uMsgNotify = WinApi.RegisterWindowMessage("SHELLHOOK");
WinApi.RegisterShellHookWindow(this.Handle);
私のフォームコンストラクターで
そしてこれは私のオーバーライドされたWndProcにあります:
protected override void WndProc(ref System.Windows.Forms.Message m)
{
IntPtr handle;
if (m.Msg == uMsgNotify)
{
switch (m.WParam.ToInt32())
{
case WinApi.HSHELL_WINDOWCREATED:
handle = m.LParam;
string windowName = GetWindowName(handle);
MessageBox.Show(windowName+" "+handle.ToString());
break;
case WinApi.HSHELL_WINDOWDESTROYED:
handle = m.LParam;
MessageBox.Show(handle.ToString());
break;
}
}
base.WndProc(ref m);
}
したがって、デフォルトの Windows シェルが explorer.exe の場合、この Win フォームは正常に動作します。すべてのイベントを取得できます作成および破棄されたすべてのウィンドウとその名前。app.exe をデフォルトの Windows シェルとして設定すると。メッセージを受信しません。
dll 関数インジェクション、フック用の個別の dll ファイルを使用する必要がありますか? 私はより簡単で簡単な解決策を得ようとしていました。
何か案は?
ありがとう