Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Вниз
Нажать программно кнопку Найти похожие ветки
← →
sensor (2004-08-01 05:58) [0]Уважаемые мастера, подскажите: мне нужно нажать Enter в другом приложении (в поле Edit), как правильно?...сорец:
SendMessage(EditHandle, WM_Keydown, VK_return, 0);
не работает, что здесь не так?
← →
Кириешки © (2004-08-01 07:15) [1]Типа такого?
SpeedButton1.Perform(WM_LBUTTONDOWN, 0, 0);
SpeedButton1.Perform(WM_LBUTTONUP, 0, 0);
← →
Кириешки © (2004-08-01 11:05) [2]Вот программа которую делал мой племянник для нажатия на кнопки чужого приложения.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Edit1: TEdit;
Button2: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure ClickOnForm (wnd:HWND;caption:string);
var
TheChildHandle:HWND;
begin
TheChildHandle:=FindWindowEx(wnd,0,nil,PChar(caption));
SendMessage(TheChildHandle,WM_LButtonDown,1,1);
SendMessage(TheChildHandle,WM_LButtonUP,1,1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
wnd:HWND;
caption:string;
begin
wnd:=GetTopWindow(0);
repeat
SetLength(caption,GetWindowtextLength(wnd));
GetWindowText(wnd,@caption[1],length(caption)+1);
if (trim(caption)=pchar(edit1.text)) then ClickOnForm(wnd,pchar(edit2.text));
wnd:=GetNextWindow(wnd,GW_HWNDNEXT);
until wnd=0;
end;
procedure TForm1.FormCreate(Sender: TObject);
VAR
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
i : Integer;
begin
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN
IF IsWindowVisible(Wnd) AND
(GetWindow(Wnd, gw_Owner) = 0) AND
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
THEN BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
ListBox1.items.Add(StrPas(buff));
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
edit1.text := pchar(listbox1.items[listbox1.itemindex]);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
oncreate(sender);
end;
end.
Может поможет. Я сам такой шнягой никогда не занимался.
← →
Rem (2004-08-01 11:06) [3]Кому же вы посылаете Enter? Edit"у? Вы уверены, что Edit обрабатывает нажатие Enter?
Как варианты, могу предложить отсылать то же сообщение:
1. Форме, на которой расположен Edit, в надежде, что у этой формы KeyPreview = true
2. Кнопке "OK", расположенной на этой форме. В данной ситуации также можно посылать MouseClick, как в [1].
Хотите точный ответ - опишите проблему шире: для чего вам надо Enter обрабатывать?
← →
Dimaxx (2004-08-01 11:42) [4]А выполнить команду PostMessage(BtnHandle,BM_CLICK,0,1); религия не позволяет? :)
← →
Кириешки © (2004-08-01 12:06) [5]Dimaxx (01.08.04 11:42) [4]
;)) !!!
← →
sensor (2004-08-01 21:40) [6]Dimaxx не пашет
Rem уверен что эдит обрабатывает энтер, в проге то другой он работает
← →
sensor (2004-08-01 21:42) [7]SendMessage(EditHandle, WM_Keydown, VK_return, 0);
по идее сорец правилный, в этом случае эдиту посылаеца месадж о нажатии enter"a (vk_return)... но оно не пашет.
← →
Dimaxx (2004-08-01 23:11) [8]2 sensor:
Так я не понял: надо нажать на кнопку программно или послать в edit enter? Конкретизируй, а то в сабже одно, а обсуждение идет о другом. Если кнопку нажать, так все прекрасно действует. Если надо нажать клавишу (а это совсем другое), тогда так и пиши. :-)
← →
sensor (2004-08-02 00:45) [9]2 dimaxx
я уже многа раз сказал, в edit послать enter.
---
сорец я кинул, какая там кнопка, када там написано че да как, тока оно не пашет
← →
sensor (2004-08-02 01:05) [10]а, и еще есть одно, в МОЕЙ проге (т.е. на моей форме) все это работает.
← →
nikkie © (2004-08-02 01:32) [11]>я уже многа раз сказал, в edit послать enter.
а табе многа раз гаварят, что это enter - клавиша, а не не кнопка, во-первых.
а во-вторых, неизвестно кто и как обрабатывает обрабатывает это сообщение. singleline edit, например, никак enter не обрабатывает, но может и обрабатывать, если его сабклассировать.
в-третьих, читаем документацию:
The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed.
начинаем думать, какая разница между SendMessage и PostMessage.
в-четвертых, почему ты думаешь, что реакция будет на WM_KEYDOWN, а не на WM_KEYUP?
в-пятых, есть такая функция keybd_event.
← →
Chislo Pi (2004-08-02 10:13) [12]Удалено модератором
← →
Pavel Zholudev (2004-08-04 10:00) [13]procedure TForm1.Timer1Timer(Sender: TObject);
var Hnd, HndBtn:HWND;
begin
Hnd:=FindWindow(nil,"KONICA MINOLTA PagePro 1300W");
If Hnd>0 then begin
HndBtn:=FindWindowEx(Hnd,0,"Button","Proceed");
SendMessage (HndBtn, BM_Click, 0, 0);
end;
end;//proc
← →
GrayFace © (2004-08-04 11:25) [14]nikkie © (02.08.04 1:32) [11]
Сомниваюсь, что может работать PostMessage и не работать SendMessage.
> в-четвертых, почему ты думаешь, что реакция будет на WM_KEYDOWN, а не на WM_KEYUP?
Естественно. Так бывает в большинстве случаев.
sensor
Попробуй слать WM_Char. Либо ставь фокус на то окно, а потом посылай WM_keyDown и WM_KeyUp и еще заполни у них LParam.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c