我有需求在自己的程序里HOOK本进程的 CreateProcess的函数来阻止本进程启动IE,支持Win7,Win8 能否实现?
前提是用纯C#实现
使用EasyHook解决了,确定很Easy。ShellExecuteW函数。
c#也是调用win32 api,说白了就是用c++,hook这块找个有c++经验的人一起折腾会容易些。
//监控函数 LRESULT CALLBACK WinMonitorProc(int nCode,WPARAM wParam,LPARAM lParam) { if(HCBT_CREATEWND==nCode) { char title[50]; memset(title,0,50); ::GetWindowText(HWND(wParam),title,50); if(title=="Windows Internet Explorer 8"); CloseWindow(HWND(wParam)); /*::GetWindowThreadProcessId(HWND(wParam),&dword); tmp=::OpenProcess(PROCESS_ALL_ACCESS,false,dword); if(hand!=tmp) { ::SetProcessAffinityMask(tmp,1); }*/ } return ::CallNextHookEx(g_hKeyBoard,nCode,wParam,lParam); } 本来是一个项目上把新建进程绑定到固定CPU核的钩子,改成你得需求 启动钩子 ::SetWindowsHookEx(WH_CBT,WinMonitorProc,NULL,0); 这些都是Win32 API函数,C#可以DELLINPORT的。仅供参考,不嫌弃的话可以试一试
这个方法或许可行,但全局hook,杀软有的会报警的
我这有个外国人做的钩子Demo,不知道怎么给你看看,兴许有用。
关键是hook哪个api, 我用Api monitor看了所有可能的函数,都没监控到,win7该不会又走com接口了吧。其实我是拦截
Webbrower创建新窗口,总有一些栏不住,才会初次下册
你的那个Demo是不是纯C#代码实现的呢,如果是,希望能share一下。