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

Тема в разделе "Delphi - FAQ", создана пользователем Vadik(R), 26 дек 2008.

  1. Vadik(R)

    Vadik(R) Well-Known Member

    Репутация:
    0
    Регистрация:
    12 дек 2007
    Сообщения:
    470
    Симпатии:
    0
    Люди, как послать Edit'у сообщение о нажатии клавиши? Знаю, что тема уже замусолена, но тем не менее сколько не пытался использовать чужые коды, все равно никак. Вот код:
    Код (Text):
    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 не предлагайте, так как мне надо послать сообщение чужому окну.
     
  2. ProgeRock

    ProgeRock Гость

    Репутация:
    0
    проверте идентификатор окна если его нет то третим параметром findwindowex поставьте nil
    а что должно? если вам текст нада сменить то можна так sendmessage(h, wm_settext, 0, lparam(lpctstr(' ')));
     
  3. Vadik(R)

    Vadik(R) Well-Known Member

    Репутация:
    0
    Регистрация:
    12 дек 2007
    Сообщения:
    470
    Симпатии:
    0
    А есть какая-нибудь такая программка, что наводишь на элемент управления мышью - а она пишет и его Handle, и ClassName и Caption? Если есть, то как она называется?
     
  4. ProgeRock

    ProgeRock Гость

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

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

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

    FBUS Well-Known Member

    Репутация:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    57
    Симпатии:
    0
    пардон конечно, но
    h:=FindWindow(nil, 'Form1');
    h:=FindWindowEx(h, 0, '', 'Edit1');
    работать не будет, ибо нужно в последней строчке написать вместо edit1 просто edit. попробуй.
     
  6. zubr

    zubr Гость

    Репутация:
    0
    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. Как вариант сделать так:
    Код (Text):
    var
    p: PChar;

    p := '  ';
    PostMessage(h, WM_SETTEXT, 0, Integer(p));
     
  7. Vadik(R)

    Vadik(R) Well-Known Member

    Репутация:
    0
    Регистрация:
    12 дек 2007
    Сообщения:
    470
    Симпатии:
    0
    ProgeRock, zubr спасибо вам огромное!!!
    Всех форумчан с наступающим!!! :)
     
Загрузка...

Поделиться этой страницей