2012-01-31 1 views
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 ключей и т.д.?

Спасибо!

+1

'BlockInput' блокирует все входные данные пользователя, вы не можете блокировать клавиатуру. Почему вы пытаетесь это сделать? Возможно, мы сможем найти альтернативу. – Polynomial

+0

Привет, мне нужно это для своего рода Kiosk-App, взаимодействие с экраном будет выполняться только с помощью мыши. Я не хочу, чтобы был какой-то способ обойти это, например, нажать WIN + E и открыть проводник. – user990767

+0

http://stackoverflow.com/questions/3236233/how-to-create-a-kiosk-like-ui-so-that-the-user-can-never-exit-from-it-or-switch –

ответ

8

Вы слишком много думаете.

Соответствующий способ настройки киоска, который может управляться с помощью мыши, а не клавиатуры, - , не имеет клавиатуры. (Это также делает невозможным кражу вашей клавиатуры недобросовестным пользователем киоска).

Это также означает, что если вам необходимо выполнить административные задачи, вы можете прикрепить клавиатуру (или удаленную), и все будет работать хорошо.

+2

+1 слишком много думать слишком сложно –

+7

Определенно заберите физическую клавиатуру, но также убедитесь, что у пользователя нет доступа для запуска экранной клавиатуры Windows (osk.exe). –

+0

Вы можете подключить 'WndProc' и отменить все изменения размера сообщения. Как вы не можете изменить размер или минимизировать окно или изменить его z-порядок. Затем вы можете включить функцию администратора, которая отключает эту функциональность, учитывая пароль. – Polynomial

2

Если по какой-то причине удаление клавиатуры не является возможным вариантом, существует неподдерживаемый способ сделать это в программном обеспечении: удалить значение UpperFilters из

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

Это отключает ввод от всех обычных клавиатурных устройств, но виртуальная клавиатура удаленного рабочего стола все равно будет работать, поэтому вы можете захотеть убедиться, что удаленный рабочий стол настроен и работает в первую очередь.

Для справки, если вы хотите изменить процесс, UpperFilters обычно представляет собой REG_MULTI_SZ, содержащий одну строку «kbdclass» (без меток кавычек).

+0

Обратите внимание, что вам необходимо перезагрузить компьютер, чтобы он вступил в силу. –

+0

+1, ничего себе, никогда не слышал об этом трюке. Однако я предпочел бы физический способ сделать это, возможно, переключатель блокировки клавиатуры, управляющий источником питания для клавиатуры (USB). – TLama

+1

@TLama: это зависит от контекста. Я согласен, что удаление или иное физическое отключение клавиатуры, вероятно, является лучшим решением для OP, но есть сценарии, где это не подходит.В моем случае, например, мне нужно блокировать вход для сотен компьютеров с перерывами (и часто), поэтому это действительно нужно делать в программном обеспечении! –