0

有没有办法完全阻止键盘输入?这也应该阻止像 WIN+E 这样的组合键。

我找到了这段代码,是否可以将其更改为仅阻止键盘输入(鼠标需要工作)

    procedure TForm1.Button1Click(Sender: TObject) ;

   function FuncAvail(dllName, funcName: string; var p: pointer): boolean;
   var
     lib: THandle;
   begin
     result := false;
     p := nil;
     if LoadLibrary(PChar(dllName)) = 0 then exit;
     lib := GetModuleHandle(PChar(dllName)) ;
     if lib <> 0 then
     begin
      p := GetProcAddress(lib, PChar(funcName)) ;
      if p <> nil then Result := true;
     end;
   end;

   var
     BlockInput : function(Block: BOOL): BOOL; stdcall;

   begin
    if FuncAvail('USER32.DLL', 'BlockInput', @BlockInput) then
    begin
     ShowMessage('Your Mouse and Keyboard will be blocked for 5 seconds!') ;
     BlockInput(true) ;
     Sleep(5000) ;
     BlockInput(false) ;
    end;
   end;

 end.

此代码是否也适用于 WIN 键等?

谢谢!

4

2 回答 2

8

你想得太用力了。

设置可由鼠标而非键盘控制的信息亭的适当方法是不连接键盘。 (这也使不道德的信息亭用户无法窃取您的键盘。)

这也意味着,如果您需要执行管理任务,您可以连接键盘(或远程输入),一切都会正常工作。

于 2012-01-31T18:57:55.687 回答
2

如果由于某种原因移除键盘不是一个可行的选项,那么在软件中有一种不受支持的方法:从

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}

这会禁用来自所有普通键盘设备的输入,但远程桌面虚拟键盘仍将工作,因此您可能需要确保远程桌面已配置并首先工作。

供您参考,如果您想反转该过程,UpperFilters 通常是一个包含单个字符串“kbdclass”(不带引号)的 REG_MULTI_SZ。

于 2012-02-01T02:18:02.597 回答