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

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

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

.

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com