C#利用TerminateProcess()和OpenProcess()函数阻止结束进程

求一个简单的C#程序源码,利用上面两个API函数阻止用户通过任务管理器等工具结束自己的进程。以下思路为网上所找:任务管理器的“结束任务”实际上就是强制终止进程,它调用一个... 求一个简单的C#程序源码,利用上面两个API函数阻止用户通过任务管理器等工具结束自己的进程。
以下思路为网上所找:
任务管理器的“结束任务”实际上就是强制终止进程,它调用一个叫做TerminateProcess()的Win32 API函数
BOOL TerminateProcess(
HANDLE hProcess, // 将被结束进程的句柄
UINT uExitCode // 指定进程的退出码
);
可见TerminateProcess在判断结束进程前会先判断当前进程hProcess是不是我要结束的那个,而获得hprocess的方法需要调用
OpenProcess所以我们只要在结束进程前给
OpenProcess这个函数并传入要访问的进程ID来获得进程的句柄
HANDLE OpenProcess(
DWORD dwDesiredAccess, // 希望获得的访问权限
BOOL bInheritHandle, // 指明是否希望所获得的句柄可以继承
DWORD dwProcessId // 要访问的进程ID
);
中的dwProcessId赋一个错误的ID,管理器得不到正确的ID自然就不能结束这个进程,随后再弹出对话框利用自己的关闭方法我想就可以实现了

请把代码写在一个文件里贴上来,在线等,非常感谢。
请注意,思路我已经有了,写在上面,我现在要的是实现的代码,一定要是代码,因为我不清楚具体应该怎么用,所以要个源码参考一下,谢谢。

请把代码写在一个文件里贴上来。非常感谢。
展开
 我来答
HAL9000PLUS
2010-05-04 · TA获得超过1279个赞
知道小有建树答主
回答量:663
采纳率:0%
帮助的人:721万
展开全部
windows 系统有一个叫做system hook的技术,用于让你对系统api做些手脚。
你可以通过注册一个新的TerminateProcess函数钩子,当系统调用这个函数时,就会调用你的函数,你的函数可以判断这个进程是不是你的程序,比如通过窗口的title,class什么的。
如果不是你的窗口,就调用原始的TerminateProcess,如果是你的窗口,就直接return.

另外,你也可以试试重载你的C#程序的WinProc方法,对于WM_CLOSE, WM_DESTORY, WM_QUIT之类的消息进行忽略,只对于自己发出的关闭才正常响应。

上述两个思路,你选择吧。代码没有功夫写。

你的那个思路技术上有些问题。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式