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);
}
Так что эта форма Win отлично работает, когда оболочкой Windows по умолчанию является explorer.exe.Я могу получить все события Все созданные и уничтоженные окна и их имена.Когда я установил мой app.exe как дефолт Windows Shell.Он не получает сообщения.
Нужно ли использовать инъекцию функции dll, отдельный файл dll для перехвата?Я пытался найти более простое и простое решение.
Есть идеи?
Спасибо