Содержание материала

 

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

 

Code:

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);

private

   AppInst: 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 then

   TF.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.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить