代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

您现在的位置是:首页>_C#

弱弱地问下——关于进程.该怎么处理

发布时间:2019-12-10浏览(1446)

    弱弱地问下——关于进程.
    弱弱地问下,我在做一个类似屏保的东西,想在程序运行后监控计算机状态,始终显示桌面,即当有别的程序运行时,就运行一次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)
    {
    if (nCode >= 0)
    {