• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Как послать 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 не предлагайте, так как мне надо послать сообщение чужому окну.
 
P

ProgeRock

проверте идентификатор окна если его нет то третим параметром findwindowex поставьте nil
но ничего не происходит
а что должно? если вам текст нада сменить то можна так sendmessage(h, wm_settext, 0, lparam(lpctstr(' ')));
 
V

Vadik(R)

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

ProgeRock

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

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

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

FBUS

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

zubr

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

Vadik(R)

ProgeRock, zubr спасибо вам огромное!!!
Всех форумчан с наступающим!!! :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!