我正在嘗試在通訊程序中編程「咳嗽按鈕」,該程序並不總是有焦點。我有代碼工作來靜音和取消靜音麥克風(MMDevApi),它的工作原理非常完美。我設置了一個全球熱鍵,這對於設置靜音是完美的。現在的問題。如何知道Hotkey何時發佈?我嘗試了代碼中顯示的計時器,但它有一個奇怪的行爲。我在定時器的間隔後立即按住熱鍵和麥克風靜音,取消靜音,看起來是定時器間隔的一半,然後靜音並保持靜音。沒有計時器,它會靜音並保持完美靜音。我真的不想(或認爲這是好事)不得不打開第二把麥克風取消靜音。Delphi XE3 WM_HOTKEY如何判斷何時發佈HotKey?
//here is my register hot key code !
CoughKeyWnd := AllocateHwnd(CoughKeyWndProc);
CoughKey := GlobalAddAtom('CoughKey');
if CoughKey <> 0 then
RegisterHotKey(CoughKeyWnd, CoughKey, MOD_CONTROL, VK_OEM_3);
//the procedure
procedure TForm1.CoughKeyWndProc(var Message: TMessage);
begin
if Message.Msg = WM_HOTKEY then
begin // to prevent recalling mute
if CoughOn = FALSE then
begin
CoughOn := True;
CoughOff.SetMute(1,@GUID_NULL);
end;
Timer1.Enabled := FALSE;
Timer1.Enabled := True;
end
else
begin
Message.Result := DefWindowProc(CoughKeyWnd, Message.Msg, Message.WParam, Message.LParam);
end;
//and finally the ontimer !
procedure TForm1.JvTimer1Timer(Sender: TObject);
begin
CoughOff.SetMute(0,@GUID_NULL);
Timer1.Enabled := False;
CoughOn := False;
end;
你不明白這些信息。 –
我不認爲這是可能的。 'WM_HOTKEY'通知在發送時發送,但不發送。我將添加一個'[winapi]'標籤來擴大你的Q的觀衆羣,以確認我的想法。 –
我在努力理解爲什麼你需要檢測關鍵。爲什麼你不能只回應熱鍵? –