如何用C#做出一个禁用电脑锁屏的小程序?

或者有哪些可以实现禁用电脑锁屏的函数,万分感谢。... 或者有哪些可以实现禁用电脑锁屏的函数,万分感谢。 展开
 我来答
魔法软糖™
2019-06-05 · TA获得超过838个赞
知道小有建树答主
回答量:822
采纳率:94%
帮助的人:148万
展开全部

建议你这样试试看

  1.  电脑一般无按键输入一定分钟后锁屏,所以每分钟模拟鼠标或键盘按下一个键就可以了。
  2. 模拟用户操作控制面板中,找到锁屏设置项,关闭。不同的Windows系统步骤可能不一定,需要查找控制面板相关窗口的句柄,模拟鼠标点击来完整调整操作。

  3. 由于Windows安全机制,据我所知好像没有函数能直接禁用电脑锁屏,只有锁屏的,没有阻止锁屏的。

API声明代码:

一般使用API的SendMessage和keybd_event和mouse_event

public static class 窗体API {
       [DllImport("user32.dll", EntryPoint = "SendMessageA")]
        public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
        [DllImport("user32.dll", EntryPoint = "SendMessageA")]
        public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
        [DllImport("user32.dll", EntryPoint = "SendMessageA")]
        public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, string lParam);
        [DllImport("user32.dll", EntryPoint = "SendMessageA")]
        public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, StringBuilder lParam);
        /// <summary>
        /// 向窗口发送消息,执行后马上返回。
        /// </summary>
        /// <param name="hWnd"></param>
        /// <param name="Msg"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        [DllImport("User32.dll", EntryPoint = "PostMessage")]
        public static extern int PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
        [DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
        public static extern void keybd_event(Keys bVk, byte bScan, int dwFlags, int dwExtraInfo);
        [DllImport("user32.dll", EntryPoint = "mouse_event", SetLastError = true)]
        public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
        [DllImport("User32.dll", EntryPoint = "SetCursor")]
        public static extern int SetCursor(int hCursor);
        [DllImport("User32.dll", EntryPoint = "SetCursorPos")]
        public static extern int SetCursorPos(int x, int y);
        [DllImport("user32.dll", EntryPoint = "GetCursorPos")]
        public static extern int GetCursorPos(ref MOUSEPOINT lpPoint);
}

模拟按键

public class 模拟 {
public static void 模拟按键(Keys 按键) {
            窗体API.keybd_event(按键, 0, 0, 0);
            窗体API.keybd_event(按键, 0, 2, 0);
        }
        public static void 模拟按键(Keys 组合键, Keys 按键) {
            窗体API.keybd_event(组合键, 0, 0, 0);
            窗体API.keybd_event(按键, 0, 0, 0);
            窗体API.keybd_event(按键, 0, 2, 0);
            窗体API.keybd_event(组合键, 0, 2, 0);
        }
        public static void 模拟按键(Keys 组合键1, Keys 组合键2, Keys 按键) {
            窗体API.keybd_event(组合键1, 0, 0, 0);
            窗体API.keybd_event(组合键2, 0, 0, 0);
            窗体API.keybd_event(按键, 0, 0, 0);
            窗体API.keybd_event(按键, 0, 2, 0);
            窗体API.keybd_event(组合键2, 0, 2, 0);
            窗体API.keybd_event(组合键1, 0, 2, 0);
        }
        public static void 按下(Keys 按键) {
            窗体API.keybd_event(按键, 0, 0, 0);
        }
        public static void 抬起(Keys 按键) {
            窗体API.keybd_event(按键, 0, 2, 0);
        }
        public static void 鼠标位置(int x, int y) {
            窗体API.SetCursorPos(x, y);
        }
        /// <summary>相对当前位置的移动</summary>
        public static void 鼠标移动(int x, int y) { 窗体API.mouse_event(0x1, x, y, 0, 0); }
        public static void 按下左键(int x, int y) { 窗体API.mouse_event(0x2, x, y, 0, 0); }
        public static void 抬起左键(int x, int y) { 窗体API.mouse_event(0x4, x, y, 0, 0); }
        public static void 按下右键(int x, int y) { 窗体API.mouse_event(0x8, x, y, 0, 0); }
        public static void 抬起右键(int x, int y) { 窗体API.mouse_event(0x10, x, y, 0, 0); }
        public static void 按下中键(int x, int y) { 窗体API.mouse_event(0x20, x, y, 0, 0); }
        public static void 抬起中键(int x, int y) { 窗体API.mouse_event(0x40, x, y, 0, 0); }
        /// <summary>距离正数表示向上滚动,负值表示向下滚动。轮击定义为WHEEL_DELTA,即120。</summary>      
        public static void 鼠标滚动(int x, int y, int 距离) { 窗体API.mouse_event(0x800, x, y, 距离, 0); }
        public static void 鼠标移至(int x, int y) { 窗体API.mouse_event(0x8000, x, y, 0, 0); }
}

调用的时候直接 模拟.模拟按键(Keys.Up) 就可以了

出色且精心丶饼干9329
2019-06-05 · TA获得超过9417个赞
知道大有可为答主
回答量:1.2万
采纳率:85%
帮助的人:697万
展开全部
很多方法,比如用if把你写的整个程序包起来。
bool a;
弹出一个窗体,要求输入密码,然后获取该窗体中的输入信息,与你设置的密码进行比较,相同则a=true,不同则a=false。(弹出窗体就是另外新建个窗体1,窗体1.Show()就可以打开,我记得是这样。看不明白可以直接百度C#弹出窗口)
if(a)
{
你的程序;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式