Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1093794187
ПЛОВ
2004-08-29 19:43
2004.09.19
:)


1-1094209746
shc
2004-09-03 15:09
2004.09.19
Проблемы при работе с интерфейсами


14-1092599346
Vasya.ru
2004-08-15 23:49
2004.09.19
alg.exe - что за процесс?


3-1093088270
Sirruf
2004-08-21 15:37
2004.09.19
SQL в Access


6-1089958693
Amid
2004-07-16 10:18
2004.09.19
Как перехватить сообщение об ошибке при конекте с сервер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский