Russian Qt Forum

Компиляторы и платформы => Windows => Тема начата: alexlogvinenkoit от Январь 28, 2012, 18:48



Название: Win32API FindWindowEx
Отправлено: alexlogvinenkoit от Январь 28, 2012, 18:48
Всем привет!

Такая тема: нужно написать приложение, которое находит калькулятор и скрывает любую кнопку...
В общем зарегистрировал класс окна, создал окно, показал, запустил цикл обработки сообщений...
Функция FindWindow находит калькулятор, тут все нормально. Проблема в том, что, почему-то, функция FindWindowEx не находит кнопку на калькуляторе. ОС: Windows 7. Я что думаю, может в семерке калькулятор на WPF написан, как тогда получить описатель (HWND) элементов управления?

Спасибо!


Название: Re: Win32API FindWindowEx
Отправлено: Bepec от Январь 28, 2012, 20:20
Я конечно, нуб в Win Api, но "скрыть любую кнопку" в другом приложении...
Помоему, это аля "фантастиш"


Название: Re: Win32API FindWindowEx
Отправлено: Igors от Январь 29, 2012, 07:42
Никто не обещал что кнопки - тоже окна/двери Вындоуз. Напр Qt кнопки нет. Посмотрите утилитой (насколько я помню называется Spy)


Название: Re: Win32API FindWindowEx
Отправлено: neversleep от Январь 29, 2012, 08:14
Код:
BOOL CALLBACK EnumChildProc(
    HWND hwnd, // handle to child window
    LPARAM lParam // application-defined value
)
{
    TCHAR szClassName[0xFF];
    TCHAR szWindowText[0xFF];
    GetClassName(hwnd, szClassName, sizeof(szClassName));
    if (lstrcmpi(szClassName, TEXT("BUTTON")) == 0) {
        SendMessage(hwnd, WM_GETTEXT, sizeof(szWindowText), (LPARAM)&szWindowText);
        CharToOemBuff(szWindowText, szWindowText, sizeof(szWindowText));

        printf(TEXT("Class: \"%s\"; Text: \"%s\"; Handle: %.8X\r\n"), szClassName, szWindowText, hwnd);

        ShowWindow(hwnd, SW_HIDE);
    }
    return TRUE;
}

int main()
{
    HWND hwnd = FindWindow(TEXT("CalcFrame"), 0);
    if (hwnd) {
        EnumChildWindows(hwnd, &EnumChildProc, 0);
        InvalidateRect(hwnd, 0, TRUE);
    }
    return 0;
}
Все кнопки прячутся. Win7.


Название: Re: Win32API FindWindowEx
Отправлено: Bepec от Январь 29, 2012, 11:50
Очень интересно и познавательно.


Название: Re: Win32API FindWindowEx
Отправлено: neversleep от Январь 29, 2012, 12:56
Да, забыл, sizeof лучше заменить на макрос вроде:
Код:
#define ARRAYLEN(x) (sizeof(x) / sizeof(TCHAR))
Т.к при включенном юникоде TCHAR=WCHAR соответственно sizeof(TCHAR) = 2байта, а ф-циям надо передавать размер не в байтах, а в символах.


Название: Re: Win32API FindWindowEx
Отправлено: Alex Custov от Февраль 01, 2012, 21:50
Никто не обещал что кнопки - тоже окна/двери Вындоуз. Напр Qt кнопки нет. Посмотрите утилитой (насколько я помню называется Spy)

Да, Spy++. Хорошая вещь.