uMsgNotify = WinApi.RegisterWindowMessage("SHELLHOOK");
WinApi.RegisterShellHookWindow(this.Handle);
내 양식 생성자
응용 프로그램이 기본 Windows 데스크톱 셸로 설정된 경우 WndProc에서 셸 훅 메시지를받지 못하는 이유는 무엇입니까? 내 오버라이드의 WndProc에서
에서
이 : 기본 Windows 셸이 Explorer.exe에서 때
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);
}
그래서이 승리 양식은 잘 작동합니다. 모든 이벤트를 모두 생성하고 파괴 한 창과 이름을 얻을 수 있습니다. 내 app.exe를 defaul windows shell로 설정할 때. 메시지를 수신하지 않습니다.
dll 함수 삽입, 별도의 dll 파일을 후킹 용으로 사용해야합니까? 간단하고 쉬운 솔루션을 얻으려고했습니다.
아이디어가 있으십니까?
감사
감사합니다. Franci에게 감사하지만, 디버깅, 인터넷 검색을 3 ~ 4 시간 더 테스트했습니다. 문제는 WinApi 구조체와 함수를 C#으로 변환하고 MINIMIZEDMETRICS 구조를 설정하여 적절한 순서로 호출하는 것이 었습니다. 어쨌든 지금은 완벽하게 작동하고 있습니다. 나는 카이로 데스크톱 소스 코드와이 스레드를 사용했다. http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/cfaa9f53-8bfd-4a0a-9e9a-4c2b7d47327a – nasko7
@ nasko7 - 당신이 pinvoke를 사용한다고 믿는다. . NET에서 Win32 API 및 구조체에 적합한 C# 정의를 얻으려면 어떻게해야합니까? :-) –
예 저는 pinvoke.net을 사용했습니다 :) 다시 한번 감사드립니다. – nasko7