Советы по Delphi

       

Посылка кода клавиши/Текста в окно...


Надеюсь это поможет:

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]



Содержание раздела