弱弱地问下——关于进程.
弱弱地问下,我在做一个类似屏保的东西,想在程序运行后监控计算机状态,始终显示桌面,即当有别的程序运行时,就运行一次show desktop,强制显示到桌面,同事屏蔽CTR+ ALT + DEL组建(屏蔽TaskManager),请问用进程监控还是怎么做,太感谢了.
------解决方案--------------------想在程序运行后监控计算机状态,始终显示桌面,即当有别的程序运行时,就运行一次show desktop,强制显示到桌面,
没看完全明白。
但我想应该可以实现。用HOOK。
------解决方案--------------------用hook可以实现
但是不能屏蔽
CTR+ ALT + DEL组建
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Diagnostics;
using System.IO;
namespace WindowsApplication1
{
   ///    <summary>  
   /// Description of MainForm.  
   ///    </summary>  
   public partial class Form4 : Form
   {
       public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
       static int hHook = 0;
       public const int WH_KEYBOARD_LL = 13;
       //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。  
       HookProc KeyBoardHookProcedure;
       //键盘Hook结构函数  
       [StructLayout(LayoutKind.Sequential)]
       public class KeyBoardHookStruct
       {
           public int vkCode;
           public int scanCode;
           public int flags;
           public int time;
           public int dwExtraInfo;
       }
       #region DllImport
       //设置钩子  
       [DllImport("user32.dll")]
       public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
       [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
       //抽掉钩子  
       public static extern bool UnhookWindowsHookEx(int idHook);
       [DllImport("user32.dll")]
       //调用下一个钩子  
       public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
       [DllImport("kernel32.dll")]
       public static extern int GetCurrentThreadId();
       [DllImport("kernel32.dll")]
       public static extern IntPtr GetModuleHandle(string name);
       #endregion
       #region 自定义事件
       public void Hook_Start()
       {
           // 安装键盘钩子  
           if (hHook == 0)
           {
               KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
               //hHook = SetWindowsHookEx(2, 
               //            KeyBoardHookProcedure, 
               //           GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), GetCurrentThreadId()); 
               hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
                         KeyBoardHookProcedure,
                        GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
               //如果设置钩子失败.  
               if (hHook == 0)
               {
                   Hook_Clear();
                   //throw new Exception("设置Hook失败!"); 
               }
           }
       }
       //取消钩子事件  
       public void Hook_Clear()
       {
           bool retKeyboard = true;
           if (hHook != 0)
           {
               retKeyboard = UnhookWindowsHookEx(hHook);
               hHook = 0;
           }
           //如果去掉钩子失败.  
           if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
       }
       //这里可以添加自己想要的信息处理  
       public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
       {