Как послать Edit'у сообщение о нажатии клавиши

Vadik(R)

Well-known member
12.12.2007
469
0
#1
Люди, как послать Edit'у сообщение о нажатии клавиши? Знаю, что тема уже замусолена, но тем не менее сколько не пытался использовать чужые коды, все равно никак. Вот код:
Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, OleCtrls, SHDocVw, StdCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
h: hWND;
begin
Timer1.Enabled:=False;
h:=FindWindow(nil, 'Form1');
h:=FindWindowEx(h, 0, '', 'Edit1');
PostMessage(h, WM_SETTEXT, VK_SPACE, 1)
end;

end.
Хочу послать пробел, но ничего не происходит. Edit1.Perform не предлагайте, так как мне надо послать сообщение чужому окну.
 

Vadik(R)

Well-known member
12.12.2007
469
0
#3
А есть какая-нибудь такая программка, что наводишь на элемент управления мышью - а она пишет и его Handle, и ClassName и Caption? Если есть, то как она называется?
 
P

ProgeRock

#4
к чему такие программы если все выше перечисленое и так можна узнать

ну если сильна нужна такая прога то можна и самому написать

вот нашол... вам нужна программа InqSoft Window Scanner
 
F

FBUS

#5
пардон конечно, но
h:=FindWindow(nil, 'Form1');
h:=FindWindowEx(h, 0, '', 'Edit1');
работать не будет, ибо нужно в последней строчке написать вместо edit1 просто edit. попробуй.
 
Z

zubr

#6
1. Для определения окон в Delphi есть тулза WinSight. Также можно воспользоваться Spy++ из VS
2. FindWindowEx(h, 0, '', 'Edit1'); - прокатит только в том случае, если в окне эдита будет текст 'Edit1', уж лучше искать по имени класса FindWindowEx(h, 0, 'TEdit', nil); (если конечно поиск окон ведется в Delphi-приложении).
3. PostMessage(h, WM_SETTEXT, VK_SPACE, 1) - точно не прокатит, читаем msdn по ключевому слову WM_SETTEXT. Как вариант сделать так:
Код:
var
p: PChar;

p := '  ';
PostMessage(h, WM_SETTEXT, 0, Integer(p));
 

Vadik(R)

Well-known member
12.12.2007
469
0
#7
ProgeRock, zubr спасибо вам огромное!!!
Всех форумчан с наступающим!!! :)