如何阻止键盘&鼠标分开?我尝试使用BlockInput,它在Windows 10中不起作用,并尝试使用以下内容:
function KBHookHandler(ACode: Integer; WParam: WParam; LParam: LParam)
: LResult; stdcall;
begin
if ACode < 0 then
// Immediately pass the event to next hook
Result := CallNextHookEx(Hook, ACode, WParam, LParam)
else
// by setting Result to values other than 0 means we drop/erase the event
Result := 1;
end;
function DisableKeyboard : boolean;
begin
if Hook = 0 then
// install the hook
// Hook := SetWindowsHookEx(WH_KEYBOARD, @KBHookHandler, HINSTANCE, 0);
Hook := SetWindowsHookEx(WH_KEYBOARD, @KBHookHandler, 0, 0);
Result := Hook <> 0;
end;
我的要求是在Windows 7,Windows 8和Windows 8中单独阻止键盘和鼠标。 Windows 10.
答案 0 :(得分:0)
你在Embarcadero的Delphi NativeAPI forum上发布了同样的问题,所以我会在那里给你相同的答案。
阻止鼠标和键盘分离的唯一方法是使用单独的键盘和鼠标挂钩。
BlockInput()适用于Windows 10.但它会阻止所有输入,您无法选择它。
当钩住除你自己以外的其他进程时,你的钩子必须在DLL中,你必须将DLL的实例传递给SetWindowsHookEx()
的第3个参数:
如果hMod参数为NULL且dwThreadId参数为零或指定由另一个进程创建的线程的标识符,则可能发生错误。
通过为hMod
指定0,回调只能在调用进程中工作,因为这是唯一可以访问回调的进程。将dwThreadId
参数设置为0以全局挂钩多个线程时,hMod
必须指向可以注入其他进程的DLL。
此外,您可能需要单独的32位和64位DLL,以便分别正确挂钩32位和64位进程。但是请确保安装钩子的线程有一个消息循环:
可以在安装它的线程的上下文中调用此挂钩。通过向安装了挂钩的线程发送消息来进行调用。因此,安装钩子的线程必须有一个消息循环。
因为钩子在应用程序的上下文中运行,所以它们必须匹配&#34; bitness&#34;申请。如果32位应用程序在64位Windows上安装全局挂钩,则会在每个32位进程中注入32位挂钩(通常的安全边界适用)。在64位进程中,线程仍被标记为“#34; hooked”。#34;但是,因为32位应用程序必须运行钩子代码,系统才会在钩子应用程序的上下文中执行钩子;特别是在调用SetWindowsHookEx的线程上。这意味着挂钩应用程序必须继续泵送消息,否则可能会阻止64位进程的正常运行。
如果64位应用程序在64位Windows上安装全局挂钩,则会在每个64位进程中注入64位挂钩,而所有32位进程都使用挂钩应用程序的回调。
要挂钩64位Windows安装的桌面上的所有应用程序,请安装32位全局挂钩和64位全局挂钩,每个挂钩都来自适当的进程,并确保在挂钩应用程序中保留消息避免阻止正常运作。如果您已经拥有32位全局挂钩应用程序并且不需要在每个应用程序的上下文中运行,则可能不需要创建64位版本。 {引用}
您无法锁定整个系统的原因是因为您没有正确挂钩整个系统。