我说的不是这篇文章的功能
http://blog.csdn.net/kangkanglx/article/details/5692984上面这篇文章只能防止任务管理器去结束进程,其实不行,还是能结束任务。打个比方,你的QQ开启了。
C#能不能有这样一个功能,防止人为的点击X去退出,或者结束任务之类的?
就是不让他关

解决方案 »

  1.   

    可以,在FormClosing事件里面写
    e.Cancel = true;另外你可以禁用关闭按钮,参考http://www.cnblogs.com/alexusli/archive/2009/04/14/1435758.html
      

  2.   

    楼主说的是 防止人为关闭其它(非自己)进程吗?可以  系统钩子  在窗口过程处理消息之前拦截窗体消息  判断是否是关闭之类的消息 如果是  丢弃  如果不是 将消息传递下去Global Hook in C#  at google  能找到codeproject上的原文
      

  3.   

    C#搞这个不容易,但是用C就很容易了,提供你两种方法:1.Hook Ring0下的NtTerminateProcess
    2.从EPROCESS的双向链表中摘除你要保护的进程,这样用一般的方法就枚举不到该进程了,当然任务管理器里就更看不到了。以上两种方法用C写都很简单,要代码的话我可以传给你,但你若非要用C#写,那不可能防的彻底
      

  4.   

    好像不行啊朋友,当其他软件窗口已经关闭的时候,50094消息已经发出来了,这个时候我检测到这个消息的软件已经迟了,不能防止其他软件窗口的关闭SSDT SHADOW HOOK,专门用来窗口保护的
    NtUserDestroyWindow
    NtUserFindWindowEx
    NtUserBuildHwndList
    NtUserPostMessage
    NtUserMessageCall
    NtUserSendInput
    这些hook住就应该问题不大了,感兴趣的话你可以自己查查,这个已经是用烂了的技术,安全类软件都有
      

  5.   

    好像不行啊朋友,当其他软件窗口已经关闭的时候,50094消息已经发出来了,这个时候我检测到这个消息的软件已经迟了,不能防止其他软件窗口的关闭SSDT SHADOW HOOK,专门用来窗口保护的
    NtUserDestroyWindow
    NtUserFindWindowEx
    NtUserBuildHwndList
    NtUserPostMessage
    NtUserMessageCall
    NtUserSendInput
    这些hook住就应该问题不大了,感兴趣的话你可以自己查查,这个已经是用烂了的技术,安全类软件都有兄弟,能不能给个测试好的demo啊,这个资料我也看了,还是没会弄。
      

  6.   

    protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case 0x0010:
                        return;
                    default:
                        break;
                }
                base.WndProc(ref m);
            }
      

  7.   

    兄弟,我试了一下,你这个是关闭自己的时候,自己的程序可以return.我是用C#程序监控其他软件,我想其他软件关闭的时候,能return。
    这个该怎么弄?
      

  8.   

    兄弟,我试了一下,你这个是关闭自己的时候,自己的程序可以return.我是用C#程序监控其他软件,我想其他软件关闭的时候,能return。
    这个该怎么弄?

    监视其他程序就只能用钩子了
      

  9.   

    兄弟,我试了一下,你这个是关闭自己的时候,自己的程序可以return.我是用C#程序监控其他软件,我想其他软件关闭的时候,能return。
    这个该怎么弄?

    监视其他程序就只能用钩子了兄弟,我试了一下,你这个是关闭自己的时候,自己的程序可以return.我是用C#程序监控其他软件,我想其他软件关闭的时候,能return。
    这个该怎么弄?

    监视其他程序就只能用钩子了兄弟您有QQ吗?我QQ:其一思思思思留发
    能否帮个忙看一下?
      

  10.   

    兄弟,我试了一下,你这个是关闭自己的时候,自己的程序可以return.我是用C#程序监控其他软件,我想其他软件关闭的时候,能return。
    这个该怎么弄?

    监视其他程序就只能用钩子了兄弟,我试了一下,你这个是关闭自己的时候,自己的程序可以return.我是用C#程序监控其他软件,我想其他软件关闭的时候,能return。
    这个该怎么弄?

    监视其他程序就只能用钩子了兄弟您有QQ吗?我QQ:其一思思思思留发
    能否帮个忙看一下?
    兄弟不好意思啊,公司网络不能上QQ,有QQ上我还逛毛论坛,
    而且这钩子也没你想象中那么难、自己试试哈
      

  11.   

    兄弟,我试了一下,你这个是关闭自己的时候,自己的程序可以return.我是用C#程序监控其他软件,我想其他软件关闭的时候,能return。
    这个该怎么弄?

    监视其他程序就只能用钩子了兄弟,我试了一下,你这个是关闭自己的时候,自己的程序可以return.我是用C#程序监控其他软件,我想其他软件关闭的时候,能return。
    这个该怎么弄?

    监视其他程序就只能用钩子了兄弟您有QQ吗?我QQ:其一思思思思留发
    能否帮个忙看一下?
    兄弟不好意思啊,公司网络不能上QQ,有QQ上我还逛毛论坛,
    而且这钩子也没你想象中那么难、自己试试哈我现在做法是这样的,麻烦你看下:
    http://www.codeproject.com/Articles/18638/Using-Window-Messages-to-Implement-Global-System-H
    上面的demo是用全局钩子去做的。
    Form1的构造函数里面,我把
    _GlobalHooks = new GlobalHooks(this.Handle);中this.Handle换成了我要监控的目标软件的句柄。
    但是好像没起到效果,不明白,能否就具体这个问题,具体帮忙看一下?
      

  12.   

    好像不行啊朋友,当其他软件窗口已经关闭的时候,50094消息已经发出来了,这个时候我检测到这个消息的软件已经迟了,不能防止其他软件窗口的关闭SSDT SHADOW HOOK,专门用来窗口保护的
    NtUserDestroyWindow
    NtUserFindWindowEx
    NtUserBuildHwndList
    NtUserPostMessage
    NtUserMessageCall
    NtUserSendInput
    这些hook住就应该问题不大了,感兴趣的话你可以自己查查,这个已经是用烂了的技术,安全类软件都有兄弟,能不能给个测试好的demo啊,这个资料我也看了,还是没会弄。
    写好了,C#写着麻烦所以用C写了,http://download.csdn.net/detail/bigbaldy/5647313
      

  13.   

    ------------c++ 独立dll钩子,子线程映射,地址保存,api标题头重写。http://download.csdn.net/detail/tangyanzhi1111/4385675c#调用从c++ dll挂钩程序,包括计算器,记事本等简单例题描述和功能实现。
      

  14.   

    ------------c++ 独立dll钩子,子线程映射,地址保存,api标题头重写。http://download.csdn.net/detail/tangyanzhi1111/4385675c#调用从c++ dll挂钩程序,包括计算器,记事本等简单例题描述和功能实现。
    我晕,5分的程序,居然甩了一个null对象的错误!而且没源代码,也没效果。你弄个50分的吧,给源代码吧,最好有效果
      

  15.   

    ------------c++ 独立dll钩子,子线程映射,地址保存,api标题头重写。http://download.csdn.net/detail/tangyanzhi1111/4385675c#调用从c++ dll挂钩程序,包括计算器,记事本等简单例题描述和功能实现。
    我晕,5分的程序,居然甩了一个null对象的错误!而且没源代码,也没效果。你弄个50分的吧,给源代码吧,最好有效果--------------哦,对了源码没上传,我可以给你。
      

  16.   

     http://download.csdn.net/download/tangyanzhi1111/5647827
      

  17.   


     _amDBRSetThermoModel amf = (_amDBRSetThermoModel)DLLWrapper.GetFunctionAddress(hModule(), "Start", typeof(_amDBRSetThermoModel));这个对象amf为什么是null啊?
    我记事本的句柄已经娶到了。
      

  18.   


     _amDBRSetThermoModel amf = (_amDBRSetThermoModel)DLLWrapper.GetFunctionAddress(hModule(), "Start", typeof(_amDBRSetThermoModel));这个对象amf为什么是null啊?
    我记事本的句柄已经娶到了。
    ----------------你运行了没? 原编译代码 ,VS08上面编译 无误,系统是 XP。
      

  19.   


     _amDBRSetThermoModel amf = (_amDBRSetThermoModel)DLLWrapper.GetFunctionAddress(hModule(), "Start", typeof(_amDBRSetThermoModel));这个对象amf为什么是null啊?
    我记事本的句柄已经娶到了。
    ----------------你运行了没? 原编译代码 ,VS08上面编译 无误,系统是 XP。兄弟,编译没bug但是没有效果啊,运行的时候报错。
      

  20.   

     
     _amDBRSetThermoModel amf = (_amDBRSetThermoModel)DLLWrapper.GetFunctionAddress(hModule(), "Start", typeof(_amDBRSetThermoModel));这个对象amf为什么是null啊?
    我记事本的句柄已经娶到了。
    ----------------你运行了没? 原编译代码 ,VS08上面编译 无误,系统是 XP。兄弟,编译没bug但是没有效果啊,运行的时候报错。----------------源码都给你了 你还搞不定 ?  自己检查一下 。我这边编译了毫无异常,运行时候 都没任何问题。到你那边为问题一堆。提醒一下 ,钩子是杀毒软件拦截和监控的目标,杀毒等东西全部要关闭,对于钩子来说。
      

  21.   


     _amDBRSetThermoModel amf = (_amDBRSetThermoModel)DLLWrapper.GetFunctionAddress(hModule(), "Start", typeof(_amDBRSetThermoModel));这个对象amf为什么是null啊?
    我记事本的句柄已经娶到了。
    ----------------你运行了没? 原编译代码 ,VS08上面编译 无误,系统是 XP。兄弟,编译没bug但是没有效果啊,运行的时候报错。----------------源码都给你了 你还搞不定 ?  自己检查一下 。我这边编译了毫无异常,运行时候 都没任何问题。到你那边为问题一堆。提醒一下 ,钩子是杀毒软件拦截和监控的目标,杀毒等东西全部要关闭,对于钩子来说。开玩笑,你看你的代码。
    int _hModule = DLLWrapper.LoadLibrary(@"HLL.dll");
    你这个是记事本的类?
    这样的代码叫OK的?
    别玩炸糊好不?

      

  22.   


     _amDBRSetThermoModel amf = (_amDBRSetThermoModel)DLLWrapper.GetFunctionAddress(hModule(), "Start", typeof(_amDBRSetThermoModel));这个对象amf为什么是null啊?
    我记事本的句柄已经娶到了。
    ----------------你运行了没? 原编译代码 ,VS08上面编译 无误,系统是 XP。兄弟,编译没bug但是没有效果啊,运行的时候报错。----------------源码都给你了 你还搞不定 ?  自己检查一下 。我这边编译了毫无异常,运行时候 都没任何问题。到你那边为问题一堆。提醒一下 ,钩子是杀毒软件拦截和监控的目标,杀毒等东西全部要关闭,对于钩子来说。开玩笑,你看你的代码。
    int _hModule = DLLWrapper.LoadLibrary(@"HLL.dll");
    你这个是记事本的类?
    这样的代码叫OK的?
    别玩炸糊好不?


    ------------------那个是调用的C++ DLL ,用WIN32编写的。C# 负责 寻址DLL模块以及函数委托调用。算了 ,浪费了大半天时间 跟你废话了半天,还不明白?  以后 不会 会你这种人了。浪费感情,牛教三遍都明白。唉.....
      

  23.   


     _amDBRSetThermoModel amf = (_amDBRSetThermoModel)DLLWrapper.GetFunctionAddress(hModule(), "Start", typeof(_amDBRSetThermoModel));这个对象amf为什么是null啊?
    我记事本的句柄已经娶到了。
    ----------------你运行了没? 原编译代码 ,VS08上面编译 无误,系统是 XP。兄弟,编译没bug但是没有效果啊,运行的时候报错。----------------源码都给你了 你还搞不定 ?  自己检查一下 。我这边编译了毫无异常,运行时候 都没任何问题。到你那边为问题一堆。提醒一下 ,钩子是杀毒软件拦截和监控的目标,杀毒等东西全部要关闭,对于钩子来说。开玩笑,你看你的代码。
    int _hModule = DLLWrapper.LoadLibrary(@"HLL.dll");
    你这个是记事本的类?
    这样的代码叫OK的?
    别玩炸糊好不?


    ------------------那个是调用的C++ DLL ,用WIN32编写的。C# 负责 寻址DLL模块以及函数委托调用。算了 ,浪费了大半天时间 跟你废话了半天,还不明白?  以后 不会 会你这种人了。浪费感情,牛教三遍都明白。唉.....

    我的问题是说,那不是调用WIN32的API吗?我的意思是这样吗?
    故意混淆概念,咱们实事求是,本着事实说话可以吗?
    int _hModule = DLLWrapper.LoadLibrary(@"HLL.dll");
    你代码这段返回值是0.
    然后程序返回到调用他的地方,
               _amDBRSetThermoModel amf = (_amDBRSetThermoModel)DLLWrapper.GetFunctionAddress(hModule(), "Start", typeof(_amDBRSetThermoModel));
    也就是上面,这样amf对象就是null,结果就报错。咱们用事实说话可以吗
      

  24.   

    我的程序难道不行?我自己试验了,很好的拦截了,不行的话,有空给你写个Ring0的,绝对管用
      

  25.   

    呵呵,名词一套一套的,大家不信我的话可以去下载下来试试,是不是有我说的问题。
    我已经解决了,是用的瑞典一哥们写的代码。
    中国的coder为什么都这么不务实,难道是大环境所致?
      

  26.   

    呵呵,名词一套一套的,大家不信我的话可以去下载下来试试,是不是有我说的问题。
    我已经解决了,是用的瑞典一哥们写的代码。
    中国的coder为什么都这么不务实,难道是大环境所致?
    晕我用啥名词了?
    刚把Ring0的搞定,想下的就下吧,还不是很稳定,WDK7编译的XP SP3版本
    http://download.csdn.net/detail/bigbaldy/5651331
      

  27.   

    兄弟,我试了一下,你这个是关闭自己的时候,自己的程序可以return.我是用C#程序监控其他软件,我想其他软件关闭的时候,能return。
    这个该怎么弄?

    监视其他程序就只能用钩子了兄弟,我试了一下,你这个是关闭自己的时候,自己的程序可以return.我是用C#程序监控其他软件,我想其他软件关闭的时候,能return。
    这个该怎么弄?

    监视其他程序就只能用钩子了兄弟您有QQ吗?我QQ:其一思思思思留发
    能否帮个忙看一下?
    兄弟不好意思啊,公司网络不能上QQ,有QQ上我还逛毛论坛,
    而且这钩子也没你想象中那么难、自己试试哈我现在做法是这样的,麻烦你看下:
    http://www.codeproject.com/Articles/18638/Using-Window-Messages-to-Implement-Global-System-H
    上面的demo是用全局钩子去做的。
    Form1的构造函数里面,我把
    _GlobalHooks = new GlobalHooks(this.Handle);中this.Handle换成了我要监控的目标软件的句柄。
    但是好像没起到效果,不明白,能否就具体这个问题,具体帮忙看一下?
    _GlobalHooks = new GlobalHooks(this.Handle);
    this.Handle是处理消息的窗口  如果你在winform中用  那么一般就是this.Handle  然后在WndProc中
     protected override void WndProc(ref Message m)
        {
            if (_GlobalHooks != null)
                _GlobalHooks.ProcessWindowMessage(ref m);        base.WndProc (ref m);
        }
    也就是说Winform的 WndProc中可以处理系统中其他进程的消息  你看过源码中用C++写的dll了吗?
    这个dll就是负责拦截windows消息  然后将其发送到this.Handle所在线程的消息队列中去(PostMessage)
      

  28.   

    GlobalHooks类有两大功能:
    1.拦截windows消息,以类似 _GlobalHooks.Shell.Start(); 这样的代码 开始;
    2.处理拦截过后的消息,在WndProc中  
      if (_GlobalHooks != null)
      _GlobalHooks.ProcessWindowMessage(ref m);你要做的就是 注册GlobalHooks中的一些事件 如
      _GlobalHooks.Shell.WindowCreated += 
                   new GlobalHooks.WindowEventHandler(Shell_WindowCreated); //当窗口创建时发生