Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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" (из своего приложения):

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);


конечно, тут еще нужно добавить проверки ненулёвости искомого хэндла


 
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, вот и передавай его в PostMessage
PostMessage(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
2-1191423364
Winni
2007-10-03 18:56
2007.10.28
как изменить переменные окружения в RunTime ?


15-1190699158
YuriKoltsov
2007-09-25 09:45
2007.10.28
Printer selected is not valid


2-1191689278
Nikfel
2007-10-06 20:47
2007.10.28
Над каким элементом в списке курсор.


2-1191824158
Quart
2007-10-08 10:15
2007.10.28
Текущая запись


15-1190894467
hochu
2007-09-27 16:01
2007.10.28
Нужна помощь срочно!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский