Windos XP、Vistaおよび7で長年実績のあるDelphi 2007プロジェクトがあります。それはDelphi 5からのアップグレードだったので、 "MainFormOnTaskBar"はデフォルトで "false"でした(私はそれをDPRで変更していません)。このシナリオでは、システム全体のホットキーは、メインフォームのOnCreateイベントハンドラの次のコードで「システム全体」で動作しました。Delphi 2007 - "MainFormOnTaskBar:= True"を設定すると、システム全体のホットキーが「システム全体」ではありません。
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:= true」に設定しDPRに。これは期待どおりに動作します。しかし、これにはControl-F12がシステム全体で機能しないという副作用があります。アプリケーションにフォーカスがある場合にのみ機能します(したがって、システム全体ではありません)。
私は広範に'Netは、どのように/なぜ "MainFormOnTaskBar"が特定のサブフォーム/モーダルフォームの動作に影響するかに関する多くの記事を発見しました。しかし、私は上で説明した "System-Wide Hot Key"の問題には何の影響も見いだせませんでした。 MainFormOnTaskBarをtrueとfalseに設定してアプリケーションをテストして再テストしましたが、それ以外は全く同じです。上記のシステムワイドホットキーに関する問題がMainFormOnTaskBarフラグに関連していることを積極的に検証できます。
回避策に関するご案内をいただければ幸いです。私は両方の必要があります - システム全体のホットキーとタスクバー上の独自のボタンとフォーム。
ありがとうございます。
* new *プロジェクトで複製できますか?私はできませんでした.. –
これも再現できません。もっとコードを投稿できますか? (おそらく 'RegisterHotkey'呼び出しで' Self.Handle'を 'Application.Handle'に変更しようとしますか?' WM_HOTKEY'メッセージはアプリケーションのメッセージハンドラが何もしないのであなたのフォームに入ります –
@KenWhite: 'Application.Handle'を使ってホットキーを登録すると、' WM_HOTKEY'メッセージはTFormに直接的または間接的に送られません。彼らは代わりに 'TApplication'に指示されるので、あなたは' TApplication.OnMessage'イベントおよび/または 'TApplication.HookMainWindow()'メソッドを使用しなければなりません。 –