システムトレイに表示されるC#WinFormsアプリケーションがあります。アプリケーションが負荷にメインフォームを非表示にされます。同じメインフォームの隠しフォームへのPostMessageは初めて動作しません。
private void MainForm_Load(object sender, System.EventArgs e)
{
Hide();
}
、私は(そのメッセージがRegisterWindowMessage
のWin32 API呼び出しを使用してWindowsに登録されている)カスタムウィンドウメッセージをキャッチするためにWndProcメソッドをオーバーライドしてきました。
外部のC++アプリケーションから、PostMessageで同じカスタムウィンドウメッセージをブロードキャストしています。 C#アプリケーションを最初に起動した後
UINT msg = RegisterWindowMessage(L"WM_MYCUSTOM_MESSAGE");
PostMessage(HWND_BROADCAST, msg, NULL, NULL);
私は上記のコードを実行すると、それはWndProcメソッドに取得していません。メインフォームが表示された後(本質的にはShow()
のシステムトレイアイコンをダブルクリックすると)、ブロードキャストメッセージをキャッチすると、Hide()
というフォームを隠してから作業を続けます。
MainForm_Load
イベントハンドラの最初のHide()
の後に、なぜそれが機能しないのか説明できますか?フォームをあまりにも早く隠していますか?
EDIT1:ロード時に非表示とは関係がないようです。最初の非表示がなくても、私のメインフォームのWndProcは、それが隠されて再表示された後で放送投稿の受け入れを開始するだけです...
'PostMessage'の代わりに' SendMessage(HWND_BROADCAST、msg、NULL、NULL) 'が最初から動作しますが、メッセージを投稿したいと思います。 –