I am trying to connect to the start button using the following code.
// Create an instance of HookProc. StartHookProcedure = new CallBack(StartHookProc); IntPtr desktop = FindWindowEx( IntPtr.Zero, IntPtr.Zero, "Progman", null); uint procId = 0; uint threadId = GetWindowThreadProcessId(desktop, out procId); Process process = Process.GetCurrentProcess(); ProcessModule module = process.MainModule; IntPtr hModule = GetModuleHandle(null); // get my module handle... //IntPtr start = FindWindowEx(desktop, IntPtr.Zero, "Button", null); hHook = SetWindowsHookEx(WH_GETMESSAGE, StartHookProcedure, hModule, (int)threadId); //If the SetWindowsHookEx function fails. if (hHook == 0) { int err = Marshal.GetLastWin32Error(); MessageBox.Show("SetWindowsHookEx Failed" + err.ToString()); return; }
SetWindowHookEx always starts in error 1428 ERROR_HOOK_NEEDS_HMOD
It is not possible to install a non-local hook without a module handle.
I do not understand this. It fails even though I call GetModuleHandle(null) .
source share