static void Main() { using (System.Threading.Mutex mutex = new System.Threading.Mutex(false, Application.ProductName)) { if (mutex.WaitOne(0, false)) { int hModule = LoadLibrary(@"Injection.dll"); if (hModule == 0) { MessageBox.Show("error:LoadLibrary failed."); return; } IntPtr intPtrInstall = GetProcAddress(hModule, @"InstallHook"); IntPtr intPtrRemove = GetProcAddress(hModule, @"RemoveHook"); if (intPtrInstall == IntPtr.Zero) { MessageBox.Show("error:InstallHook function is not included in Core.dll."); FreeLibrary(hModule); return; } if (intPtrRemove == IntPtr.Zero) { MessageBox.Show("error:intPtrRemove function is not included in Core.dll."); FreeLibrary(hModule); return; } HOOKFUNC InstallHook = (HOOKFUNC)Marshal.GetDelegateForFunctionPointer (intPtrInstall, typeof(HOOKFUNC)); HOOKFUNC RemoveHook = (HOOKFUNC)Marshal.GetDelegateForFunctionPointer (intPtrRemove, typeof(HOOKFUNC)); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); InstallHook(); Application.Run(new MainForm()); RemoveHook(); FreeLibrary(hModule); } } }
static extern IntPtr SetWindowsHookEx(int idHook, HOOKFUNC lpfn, IntPtr hMod, uint dwThreadId);