我已經在WINDOS XP,Vista和「7」多年運行正常一個2007年德爾福項目。這是Delphi 5的升級,因此默認情況下「MainFormOnTaskBar」爲「false」(我從來沒有在DPR中改變它)。在這種情況下,系統範圍的熱鍵在主窗體的OnCreate事件處理程序中使用以下代碼「全系統」工作。德爾福2007年 - 全系統熱鍵是不是「全系統」,如果設置「MainFormOnTaskBar:=真」
HotKey_xyz := GlobalAddAtom('Hotkey_xyz');
if NOT RegisterHotKey(Self.Handle, HotKey_xyz, MOD_CONTROL, VK_F12) then
ShowMessage('Unable to register Control-F12 as system-wide hot key') ;
(I have GlobalDeleteAtom() and UnregisterHotKey() in Form.OnDestroy as expected.)
現在,我需要一個表格,顯示在任務欄上都有自己的按鈕,所以我設置「Application.MainFormOnTaskBar:=真」在DPR。這按預期工作。但是,這具有Control-F12在系統範圍內不起作用的副作用,它只在我的應用程序具有焦點時起作用(因此,它不再是「系統範圍」了。)
我已經廣泛搜索了'Net找到了很多關於如何/爲什麼「MainFormOnTaskBar」影響某些子表單/模式表單行爲的文章。但是,我沒有發現任何關於它對上面描述的「系統範圍熱鍵」問題的影響。我已經測試並重新測試了我的應用程序,將MainFormOnTaskBar設置爲true和false,而其他所有內容保持完全相同。我可以肯定地驗證上述與系統範圍熱鍵相關的問題與MainFormOnTaskBar標誌有關。
,我將不勝感激關於工作周圍的任何指導。我確實需要兩者 - 一個系統範圍的熱鍵和一個在任務欄上有自己的按鈕的窗體。
非常感謝。
你可以用* new *項目複製它嗎?我不能.. – 2012-04-19 00:53:30
我也無法重現這一點。你能發佈更多的代碼嗎? (也可能嘗試在此期間,'RegisterHotkey'呼叫改變'Self.Handle'到'Application.Handle'呢?'WM_HOTKEY'消息仍然會得到您的形式,因爲應用程序的消息處理程序不會用它做任何事;它將被髮送到您的形式,就像通常) – 2012-04-19 01:03:40
@KenWhite:如果'Application.Handle'用於註冊熱鍵,則'WM_HOTKEY'消息將不會被引導到TForm的,直接或間接地。它們將被定向到'TApplication',所以要捕獲這些消息,你必須使用'TApplication.OnMessage'事件和/或'TApplication.HookMainWindow()'方法。 – 2012-04-19 01:17:38