首页 新闻 搜索 专区 学院

求C# Hook API代码?

0
悬赏园豆:15 [已解决问题] 解决于 2013-11-24 16:24

我有需求在自己的程序里HOOK本进程的 CreateProcess的函数来阻止本进程启动IE,支持Win7,Win8 能否实现?

前提是用纯C#实现

空明流光的主页 空明流光 | 初学一级 | 园豆:48
提问于:2013-11-21 20:36
< >
分享
最佳答案
0

使用EasyHook解决了,确定很Easy。ShellExecuteW函数。

空明流光 | 初学一级 |园豆:48 | 2013-11-24 16:24
其他回答(3)
0

c#也是调用win32 api,说白了就是用c++,hook这块找个有c++经验的人一起折腾会容易些。

收获园豆:5
路过秋天 | 园豆:4763 (老鸟四级) | 2013-11-21 21:14
0
//监控函数
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的。仅供参考,不嫌弃的话可以试一试
收获园豆:5
大芝麻 | 园豆:4 (初学一级) | 2013-11-21 22:34

这个方法或许可行,但全局hook,杀软有的会报警的

支持(0) 反对(0) 空明流光 | 园豆:48 (初学一级) | 2013-11-22 10:42
0

我这有个外国人做的钩子Demo,不知道怎么给你看看,兴许有用。

收获园豆:5
于为源 | 园豆:956 (小虾三级) | 2013-11-22 10:28

关键是hook哪个api, 我用Api monitor看了所有可能的函数,都没监控到,win7该不会又走com接口了吧。其实我是拦截

Webbrower创建新窗口,总有一些栏不住,才会初次下册

支持(0) 反对(0) 空明流光 | 园豆:48 (初学一级) | 2013-11-22 10:48

你的那个Demo是不是纯C#代码实现的呢,如果是,希望能share一下。

支持(0) 反对(0) 空明流光 | 园豆:48 (初学一级) | 2013-11-22 21:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册