AHK 配 C++:禁用鼠标设备实现完美息屏(不是休眠)

如何实现完美息屏呢?虽然可以用ahk实现息屏,但桌子一晃动,鼠标稍微偏移一下,又亮了,导致息屏无效!

win10 更新了设备管理器,现在可以禁用鼠标设备了。以前这里是灰色的。

c++ 禁用鼠标

那么,怎么编程调用它呢?

两个办法,一个ahk模拟用户操作,这个是不得以而为之、没有办法的办法。

另一个是c++编程。首先谷歌关键词"c++ disable windows device",发现问答社区的交流比较老旧,而且没有确切的信息。但是第二个就是一个完善的gist分享,代码直接就能用:

Disable or Enable Device with Hardware ID

原代码如下:

c++ 复制代码
/* for Devpkey */
#define INITGUID

/* dependencies */
#pragma comment (lib, "SetupAPI")
#include <windows.h>
#include <SetupAPI.h>
#include <Devpkey.h>

VOID SetDeviceState(LPCWSTR lpszHardwareId, DWORD dwState)
{
	HDEVINFO devInfo;

	if (devInfo = SetupDiGetClassDevsW(NULL, NULL, NULL, DIGCF_ALLCLASSES))
	{
		DWORD dwBuffersize;
		SP_DEVINFO_DATA devData;
		DEVPROPTYPE devProptype;
		LPWSTR devBuffer;

		devData.cbSize = sizeof(SP_DEVINFO_DATA);
		for (int i = 0; ; i++)
		{
			SetupDiEnumDeviceInfo(devInfo, i, &devData);
			if (GetLastError() == ERROR_NO_MORE_ITEMS) break;

			/* calculate buffer size */
			SetupDiGetDevicePropertyW(devInfo, &devData, &DEVPKEY_Device_HardwareIds, &devProptype, NULL, 0, &dwBuffersize, 0);

			/* real call */
			if (devBuffer = HeapAlloc(GetProcessHeap(), 0, dwBuffersize))
			{
				SetupDiGetDevicePropertyW(devInfo, &devData, &DEVPKEY_Device_HardwareIds, &devProptype, (PBYTE)devBuffer, dwBuffersize, NULL, 0);
				if (lstrcmpW(devBuffer, lpszHardwareId) == 0)
				{
					/* matched */
					SP_CLASSINSTALL_HEADER ciHeader;
					ciHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
					ciHeader.InstallFunction = DIF_PROPERTYCHANGE;

					SP_PROPCHANGE_PARAMS pcParams;
					pcParams.ClassInstallHeader = ciHeader;
					pcParams.StateChange = dwState;
					pcParams.Scope = DICS_FLAG_GLOBAL;
					pcParams.HwProfile = 0;

					SetupDiSetClassInstallParamsW(devInfo, &devData, (PSP_CLASSINSTALL_HEADER)&pcParams, sizeof(SP_PROPCHANGE_PARAMS));
					SetupDiChangeState(devInfo, &devData);
				}
				HeapFree (GetProcessHeap(), 0, devBuffer);
			}
		}
		SetupDiDestroyDeviceInfoList(devInfo);
	}
}

void main()
{
	SetDeviceState(L"SCSI\\CdRomTSSTcorpDVD+-RW_SH-216CBD100", DICS_DISABLE);
	/* SetDeviceState(L"SCSI\\CdRomTSSTcorpDVD+-RW_SH-216CBD100", DICS_ENABLE); */
}

如何运行:安装、打开 visual studio(以管理员方式运行),新建console项目,粘贴代码,即可运行。

接着,须要找到鼠标的devide id。这个可以在上图,属性对话框中,事件标签页内,查看相关信息。

HID\VID*** 后面的一长串就是 硬件设备的device id。

然而,直接一模一样填写是不生效的。

再看代码,发现程序获取了所有的device info,然后对比填写的值,判断是否与device info的id一致。

那么我们只需打印所有的 device id,找出最近似的就是了。

用 OutputDebugString 打印出所有 device id:

c++ 复制代码
				......
				SetupDiGetDevicePropertyW(devInfo, &devData, &DEVPKEY_Device_HardwareIds, &devProptype, (PBYTE)devBuffer, dwBuffersize, NULL, 0);
				OutputDebugString(devBuffer);
				OutputDebugString(L"\n");

可见,最后c++代码中用到的,鼠标的device id,是以USB\开头,加VID_123(数字与属性对话框中的一致),再加PID_456、REV_789,最后以MI_00收尾。运行这段代码后吗,鼠标立即失去响应。

最后再完善一下,利用命令行参数传参。

编译出一个exe,可禁用或启用设备:【免费】win10c++关闭/启动设备驱动资源-CSDN文库


AHK 实现完美息屏

移动鼠标不亮,点击键盘任意键才亮,才是完美息屏!

全能Autohotkey.ahk

使小键盘*按键变成 完美息屏按钮!

ahk 复制代码
$NumpadMult::

		SendMessage,0x112,0xF170,2,,ahk_id 0xFFFF  ; ok 如果这一行不行就要运行下面几行
		WinGet, id, List,,, Program Manager
		this_id := id1
		SendMessage, 0x112, 0xF170, 2,, ahk_id %this_id%
		Run, D:\Code\FigureOut\chrome\extesions\AutoHotKey\AnyKeyTurnOnMouseSt.bat ; 关闭鼠标驱动!
return

AnyKeyTurnOnMouse.ahk

用于 关闭鼠标驱动并监听任意键

ahk 复制代码
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
#SingleInstance Force

		
setup()
; MsgBox, 4, , Continue?
; 关闭鼠标
setup() {
	Run, C:\Users\TEST\source\repos\DeviceSuppressor\Debug\DeviceSuppressor.exe  disable="USB\VID_12C9&PID_1028&REV_0210&MI_00"
	Input, Key, L1
	reset()
	ExitApp
}
F10::
setup()
return

reset(){
	Run, C:\Users\TEST\source\repos\DeviceSuppressor\Debug\DeviceSuppressor.exe enable="USB\VID_12C9&PID_1028&REV_0210&MI_00"
}

F11::
*::
	reset()
	ExitApp
return

AnyKeyTurnOnMouseSt.bat

用于以管理员方式启动 AnyKeyTurnOnMouse.ahk

css 复制代码
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit

start D:\Code\FigureOut\chrome\extesions\AutoHotKey\AnyKeyTurnOnMouse.ahk

其中 DeviceSuppressor.exe 下载地址:

【免费】win10c++关闭/启动设备驱动资源-CSDN文库

相关推荐
开开心心就好4 小时前
仅168KB的桌面图标自动隐藏工具
windows·计算机视觉·计算机外设·excel·启发式算法·宽度优先·csdn开发云
怪兽软家7 小时前
DaVinci Resolve/达芬奇 20安装教程及下载
windows·经验分享·生活
chao1898447 小时前
完整MES系统实现 (C# 客户端服务器)
服务器·windows·c#
Hello_Embed9 小时前
Windows 安装 Claude Code 并接入 模型
windows·笔记·ai编程
Muyuan19989 小时前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
AxureMost10 小时前
4DDiG DLL Fixe 1.0.8.2 系统DLL修复工具
windows
怣疯knight12 小时前
Windows不安装 Android Studio如何打包安卓软件
android·windows·android studio
空中海13 小时前
02. 静态逆向、Manifest 分析与 Smali 重打包
服务器·网络·windows
一拳一个娘娘腔13 小时前
告别图形化界面:基于CLI的Windows系统入侵排查与防御实战手册
windows·安全
疋瓞14 小时前
批处理_基础补充、文件和文件夹处理_02
windows