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

  • Автор темы Автор темы Vadik(R)
  • Дата начала Дата начала
V

Vadik(R)

Люди, как послать 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 не предлагайте, так как мне надо послать сообщение чужому окну.
 
проверте идентификатор окна если его нет то третим параметром findwindowex поставьте nil
но ничего не происходит
а что должно? если вам текст нада сменить то можна так sendmessage(h, wm_settext, 0, lparam(lpctstr(' ')));
 
А есть какая-нибудь такая программка, что наводишь на элемент управления мышью - а она пишет и его Handle, и ClassName и Caption? Если есть, то как она называется?
 
к чему такие программы если все выше перечисленое и так можна узнать

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

вот нашол... вам нужна программа InqSoft Window Scanner
 
пардон конечно, но
h:=FindWindow(nil, 'Form1');
h:=FindWindowEx(h, 0, '', 'Edit1');
работать не будет, ибо нужно в последней строчке написать вместо edit1 просто edit. попробуй.
 
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));
 
ProgeRock, zubr спасибо вам огромное!!!
Всех форумчан с наступающим!!! :)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab