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

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

Наш партнер Genesis Hackspace
  1. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    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 Гость

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

    Vadik(R) Well-Known Member

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

    ProgeRock Гость

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

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

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

    FBUS Well-Known Member

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

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

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

    Vadik(R) Well-Known Member

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

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