1

Тема: Не виходить зховати MsgBox з попередженням

Вискакує при запуску програми MessageBox із попередженням, а коли закрити його то закривається і програма. А ця програма дуже потрібна. Я зпробував так:

#include <windows.h>

int main() {
    Sleep (10000); //у цей час клікаємо по цьому вікошку
    HWND hWnd=GetForegroundWindow();
    ShowWindow(hWnd, SW_HIDE);
}

Цей шматок кода ховає foreground child window, але при цьому не можна працювати з parent (тобто з цією програмою, яка дає попередження). Допоможіть будь-ласка його прибрати.

2

Re: Не виходить зховати MsgBox з попередженням

*піднімаю тему

3

Re: Не виходить зховати MsgBox з попередженням

А що хоч на MessageBox написано?
Ну а в цілому це схоже на "показник палива на нулі, я малюю фломастером стрілку на "повний", а машина все одно не їде".

Подякували: Betterthanyou, leofun012

4

Re: Не виходить зховати MsgBox з попередженням

Після виконання будь-яка програма закривається, для того щоб вона не закривалася потрібно цикл

Якщо ви пишете віндовс програму подивіться 4 модулі які вам допоможуть зрозуміти як це все працює

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
    MainWindow win;

    if (!win.Create(L"Learn to Program Windows", WS_OVERLAPPEDWINDOW))
    {
        return 0;
    }

    ShowWindow(win.Window(), nCmdShow);

    // Run the message loop.

    MSG msg = { };
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

Якщо ви пишете кросплатформену програму почитайте про QT фреймворк

І ще є багато інших інструментів...

Подякували: Chemist-i, leofun012

5

Re: Не виходить зховати MsgBox з попередженням

koala написав:

А що хоч на MessageBox написано?
Ну а в цілому це схоже на "показник палива на нулі, я малюю фломастером стрілку на "повний", а машина все одно не їде".

Загалом це виглядає "я не зрозумів про що тема але спробую поумнічати" чи "я зрозумів про що тема, але спробую вдати що не зрозумів". Тема про втручання до функціоналу чужої програми. Звісно, що показник на нулі, але як мені його отримати, HWND батьківського вікна чужої програми? І як зробити активним, щоб в ньому можна було клікати мишкою?

6

Re: Не виходить зховати MsgBox з попередженням

Ніяк, вочевидь. Бо це чуже вікно. HWND ви отримати можете. Але для того, щоб там можна було клікати, треба, щоб та програма обробляла події. А вона знаходиться в стані обробки єдиної події - закриття модального вікна MessageBox. І вам якраз не подобається, як вона ту подію обробляє.
Ні, ну в принципі ви можете написати свою програму, що буде перехоплювати всі кліки по тому вікну і самостійно їх обробляти так, ніби це та програма робить, але це, в цілому, трохи складніше, ніж просто написати клон тієї програми. Тобто збудувати свій автомобіль навколо намальованого показника палива.

Подякували: vaasily7071

7

Re: Не виходить зховати MsgBox з попередженням

І я ж не один раз колись тестив програми на IDA. А про таке просте не подумав.  *FACEPALM*
Трохи поправлю

koala написав:

А вона знаходиться в стані обробки єдиної події - закриття модального вікна MessageBox. І вам якраз не подобається, як вона ту подію обробляє.

Вона може не знаходитись в стані обробки. Це може бути точка виходу з якої починається вивід MessageBox без обробки та виходом ExitProcess(). Щоб програма запустилась, треба просто на IDA прибрати стрибок на цю точку *FACEPALM*