unit Unit1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls; type TForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure FormKeyPress(Sender: TObject; var Key: Char);privateAppInst: THandle;AppWind: THandle;public{ Public declarations }end; var Form1: TForm1; implementation {$R *.DFM} uses ShellAPI; procedure SendShift(H: HWnd; Down: Boolean); var vKey, ScanCode, wParam: Word; lParam: longint;begin vKey:= $10;ScanCode:= MapVirtualKey(vKey, 0);wParam:= vKey or ScanCode shl 8;lParam:= longint(ScanCode) shl 16 or 1;if not(Down) then lParam:= lParam or $C0000000;SendMessage(H, WM_KEYDOWN, vKey, lParam);end; procedure SendCtrl(H: HWnd; Down: Boolean); var vKey, ScanCode, wParam: Word; lParam: longint;begin vKey:= $11;ScanCode:= MapVirtualKey(vKey, 0);wParam:= vKey or ScanCode shl 8;lParam:= longint(ScanCode) shl 16 or 1;if not(Down) then lParam:= lParam or $C0000000;SendMessage(H, WM_KEYDOWN, vKey, lParam);end; procedure SendKey(H: Hwnd; Key: char); var vKey, ScanCode, wParam: Word; lParam, ConvKey: longint;Shift, Ctrl: boolean;begin ConvKey:= OemKeyScan(ord(Key));Shift:= (ConvKey and $00020000) <> 0;Ctrl:= (ConvKey and $00040000) <> 0;ScanCode:= ConvKey and $000000FF or $FF00;vKey:= ord(Key);wParam:= vKey;lParam:= longint(ScanCode) shl 16 or 1;if Shift then SendShift(H, true);if Ctrl then SendCtrl(H, true);SendMessage(H, WM_KEYDOWN, vKey, lParam);SendMessage(H, WM_CHAR, vKey, lParam);lParam:= lParam or $C0000000;SendMessage(H, WM_KEYUP, vKey, lParam);if Shift then SendShift(H, false);if Ctrl then SendCtrl(H, false);end; function EnumFunc(Handle: HWnd; TF: TForm1): Bool; Far; begin TF.AppWind:= 0;if GetWindowWord(Handle, GWW_HINSTANCE) = TF.AppInst thenTF.AppWind:= Handle;result:= (TF.AppWind = 0);end; procedure TForm1.Button1Click(Sender: TObject); var Text: Array[0..255] of char; begin AppInst:= ShellExecute(Handle, 'open', 'notepad.exe', nil, '', SW_NORMAL);EnumWindows(@EnumFunc, longint(self));AppWind:= GetWindow(AppWind, GW_CHILD);end; procedure TForm1.Button2Click(Sender: TObject); begin SendKey(AppWind, 'T');SendKey(AppWind, 'e');SendKey(AppWind, 's');SendKey(AppWind, 't');end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if AppWind <> 0 then SendKey(AppWind, Key);end; end. |
[000287]