Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.174.76] |
|
Сообщ.
#1
,
|
|
|
Моя программа запускает стороннюю. Работают вместе. Когда возникает необходимость завершить работу, сторонней посылается сообщение:
if (prog) ::SendMessage(prog,WM_CLOSE, 0,0); После чего, она спрашивает нужно ли сохранить изменения? Чтобы программно нажать на "Да", я делаю так: If (progQ) ::PostMessage (progQ,WM_COMMAND,6,0); -6 – это nCtrlID кнопки «Да». Но все замирает, комп ждет реакции на свой вопрос. Подскажите, что делать? |
Сообщ.
#2
,
|
|
|
Надо вместо SendMessage использовать Post_Message.
Но кнопка не нажимается… |
Сообщ.
#3
,
|
|
|
Цитата TyT @ Но кнопка не нажимается… WM_COMMAND для контролов всё-таки несколько не такой. WM_COMMAND Возможно, в этом проблема. |
Сообщ.
#4
,
|
|
|
Попробуй SendDlgItemMessage(progQ,6,BM_CLICK,0,0);
PS: Согласно msdn, BM_CLICK может не сработать, если окно диалога не активно |
Сообщ.
#5
,
|
|
|
Сделал перебором. Кривовато, но работает.
EnumChildWindows(progQ,EnumWindowsProc, 0); А в функции: BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { char buff[256]; int nCtrlID = ::GetDlgCtrlID(hwnd); if(hwnd){ GetClassName(hwnd,(LPTSTR )buff,100); CString clN(buff); if (clN=="Button") { GetDlgItem(hwnd,nCtrlID); if (nCtrlID==6) ::PostMessage(hwnd,BM_CLICK,0,0); } } return TRUE; } |
Сообщ.
#6
,
|
|
|
Цитата TyT @ Сделал перебором. Кривовато, но работает. Попробуй окну диалога послать нормальный WM_COMMAND - ::PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(IDYES, BN_CLICKED), 0); А ещё лучше, возьми Spy++, выдели окно диалога, поставь фильтр, и посмотри какое сообщение приходит при нажатии на кнопку "Да". И отправь такое же. |
Сообщ.
#7
,
|
|
|
Цитата TyT @ Сделал перебором. Кривовато, но работает. Проще сделать через FindWindowEx (либо одним вызовом с указанием класса окна и названия кнопки, либо перебором с контролем ID по GetDlgCtrlID) Цитата Олег М @ Попробуй окну диалога послать нормальный WM_COMMAND - ::PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(IDYES, BN_CLICKED), 0); С учетом того, что IDYES=6, а BN_CLICKED=0, он так и делал в #1. Но у "нормального WM_COMMAND", еще и LPARAM д.б. равен не 0, а HWND кнопки Цитата Олег М @ А ещё лучше, возьми Spy++, выдели окно диалога, поставь фильтр, и посмотри какое сообщение приходит при нажатии на кнопку "Да". И отправь такое же. BM_CLICK как раз и имитирует нажатие кнопки, посылая все необходимые сообщения |