Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.28;
Скачать: CL | DM;

Вниз

Как в чужом приложение на 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
15-1191134727
Lex123456
2007-09-30 10:45
2007.10.28
помогите решить задачу на Pascal.Срочно.


2-1191402557
Washington
2007-10-03 13:09
2007.10.28
Выбор принтера


1-1187177937
partizan
2007-08-15 15:38
2007.10.28
TWebBrowser, текст страници


15-1191366240
ERGef
2007-10-03 03:04
2007.10.28
Sun ONE Studio ME как создать jar и jad файлы??


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