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