#Requires AutoHotkey v2.0
hook := DllCall("SetWindowsHookEx", "int", 13, "ptr", CallbackCreate(WindowsHookProc), "ptr", 0, "uint", 0, "ptr")
ui := Gui("AlwaysOnTop E0x8000000 -MaximizeBox -MinimizeBox")
ui.AddText(, "阻止物理输入,允许模拟输入")
btn := ui.AddButton(, "Send a")
btn.OnEvent("Click", (*) => Send("a"))
ui.OnEvent("Close", (*) => (DllCall("UnhookWindowsHookEx", "ptr", hook), 0))
ui.Show("NoActivate")
WindowsHookProc(nCode, wParam, lParam) {
if 0 == nCode {
info := PKBDLLHOOKSTRUCT(lParam)
if info.flags & 0x10 {
ToolTip "模拟输入 " GetKeyName(Format("vk{:02x}", info.vkCode))
}
else {
ToolTip "物理输入 " GetKeyName(Format("vk{:02x}", info.vkCode))
return 1 ; 阻止物理输入
}
}
return DllCall("CallNextHookEx", "ptr", 0, "int", nCode, "ptr", wParam, "ptr", lParam, "ptr")
}
class PKBDLLHOOKSTRUCT {
__New(lParam) => this.Ptr := lParam
vkCode => NumGet(this.Ptr, "uint")
scanCode => NumGet(this.Ptr, 4, "uint")
flags => NumGet(this.Ptr, 8, "uint")
time => NumGet(this.Ptr, 12, "uint")
dwExtraInfo => NumGet(this.Ptr, 16, "ptr")
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)