![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в чужом приложение на MessageDlg нажать Да [D7, WinXP]
Раф © (2007-08-02 09:18:00)Подскажите, FindWindow не находит его
Германн (2007-08-13 01:30:00) [1]Удалено модератором
zzzxxxyyy (2007-08-12 23:49:00) [2]Удалено модератором
Leonid Troyanovsky (2007-08-03 11:46:00) [3]
> Раф (02.08.07 15:33) [7]
> PostMessage(HndAsc,WM_Command,MakeWParam(IdBtn,BN_CLICKED),HndBtn);
SendMessage( HndAsc1,WM_Command,MakeWParam(IdBtn,BN_CLICKED),HndBtn);
--
Regards, LVT.
Игорь Шевченко (2007-08-03 09:52:00) [4]Elen © (03.08.07 08:46) [17]
MessageDlg не является modal dialog box.
Учи матчасть, который раз говорю, все бестолку
Elen (2007-08-03 08:46:00) [5]А не проще: The EndDialog functiondestroys a modal dialog box, causing the system to end any processing for the dialog box.
Zagaevskiy (2007-08-02 19:56:00) [6]
> Dib@zol © (02.08.07 13:27) [4]
> > EnumWindow?
>
> Хм. Оригинально... Только как ты поймёшь, что это за окно
> при таком подходе? WM_MOUSEDOWN всем рассылать?
А вот тут ты не прав. Найдёт нужное окно(по заголовку) и всё.
Лёля (2007-08-02 16:42:00) [7]проверила два BM_CLICK. таки да, работает. достаточно и одного BM_CLICK после SetForegroundWindow.
но думается мне, что отправлять WM_SETFOCUS и BM_CLICK после SetForegroundWindow все же правильнее.
Лёля (2007-08-02 16:36:00) [8]> [13] DVM © (02.08.07 16:27)
возможно. просто эти строки я взяла из своего же реально работающего кода.
DVM (2007-08-02 16:27:00) [9]
> Лёля (02.08.07 16:23) [12]
можно дважды просто послать BM_CLICK
Лёля (2007-08-02 16:23:00) [10]кстати, перед тем, как слать эти сообщения, нужно сделать SetForegroundWindow диалоговому окну.
Лёля (2007-08-02 15:57:00) [11]погоди, ты искал, вроде, HndAsc1, а юзаешь по итогу HndAsc.
И еще.
if HndBtn then<> 0
то есть, хэндл кнопки у тебя уже есть - HndBtn, вот и передавай его в PostMessage
PostMessage(HndBtn, WM_SETFOCUS, 0, 0);
PostMessage(HndBtn, BM_CLICK, 0, 0);
И читай внимательней хэлпы по WinAPI
Dib@zol (2007-08-02 15:56:00) [12]Удалено модератором
DVM (2007-08-02 15:54:00) [13]
> Не ловит, может по другому как, класс окна и имя точны проверено,
> но Хандл который находит почему то другой
Ну вообще то в системе запросто могут присутствовать два окна с одним и тем же классом и заголовком. Другие признаки надо использовать значит дополнительно.
Раф (2007-08-02 15:34:00) [14]Не ловит, может по другому как, класс окна и имя точны проверено, но Хандл который находит почему то другой
Раф (2007-08-02 15:33:00) [15]while HndAsc1=0 do HndAsc1:=FindWindowEx(Hnd,HndAsc,'#32770','Конфигуратор');
//FindWindow(Hnd, 'Конфигуратор');
if HndAsc0 then begin
//ищем кнопку в диалоге:
//обращаем внимание на знак & - если на кнопку завязана комбинация клавиш
//(это когда буква в кнопке подчеркнута)
//то надо к имени добавлять перед этой буквой & а то кнопочка не найдется если их несколько.
while HndBtn=0 do HndBtn:=FindWindowEx(HndAsc1,0,'Button','&Да');
if HndBtn0 then begin
IdBtn:=GetDlgCtrlID(HndBtn);
if IdBtn0 then begin
//ну и наконец жмем кнопку '&Да':
Sleep(1000);
PostMessage(HndAsc,WM_Command,MakeWParam(IdBtn,BN_CLICKED),HndBtn);
//а хелп MSDN по BN_CLICKED или WM_Command
//здесь верхнее слово WParam это идентификатор контрола, а нижнее - код BN_CLICKED
end;
end;
end;
DVM (2007-08-02 14:45:00) [16]
> Хм. Оригинально... Только как ты поймёшь, что это за окно
> при таком подходе?
А в чем проблема? В WinApi нет функций, позволяющих узнать класс и заголовок окна?
Лёля (2007-08-02 14:41:00) [17]допустим, у тебя есть вот такое окно сообщения:
MessageDlg('123', mtCustom, [mbYes, mbNo], 0);
нажмем в нем кнопку 'Yes' (из своего приложения):
var
hDlgWindow, hOkButton: HWND;
...
hDlgWindow := FindWindow('TMessageForm', 'Project1'{заголовок окна сообщения});
hOkButton := FindWindowEx(hDlgWindow, 0, 'TButton', '&Yes');
PostMessage(hOkButton, WM_SETFOCUS, 0, 0);
PostMessage(hOkButton, BM_CLICK, 0, 0);
конечно, тут еще нужно добавить проверки ненулёвости искомого хэндла
Dib@zol (2007-08-02 13:27:00) [18]> EnumWindow?
Хм. Оригинально... Только как ты поймёшь, что это за окно при таком подходе? WM_MOUSEDOWN всем рассылать?
Zagaevskiy (2007-08-02 13:21:00) [19]EnumWindow?
Dib@zol (2007-08-02 11:49:00) [20]> телепаты в отпуске
Ошибаешся!!!
> [0] Раф (02.08.07 09:18)
А всё же, как ты окно то находишь? Код засвети.