Russian Qt Forum
Ноябрь 22, 2024, 20:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Win32API FindWindowEx  (Прочитано 6771 раз)
alexlogvinenkoit
Гость
« : Январь 28, 2012, 18:48 »

Всем привет!

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

Спасибо!
Записан
Bepec
Гость
« Ответ #1 : Январь 28, 2012, 20:20 »

Я конечно, нуб в Win Api, но "скрыть любую кнопку" в другом приложении...
Помоему, это аля "фантастиш"
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Январь 29, 2012, 07:42 »

Никто не обещал что кнопки - тоже окна/двери Вындоуз. Напр Qt кнопки нет. Посмотрите утилитой (насколько я помню называется Spy)
Записан
neversleep
Гость
« Ответ #3 : Январь 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.
« Последнее редактирование: Январь 29, 2012, 08:55 от neversleep » Записан
Bepec
Гость
« Ответ #4 : Январь 29, 2012, 11:50 »

Очень интересно и познавательно.
Записан
neversleep
Гость
« Ответ #5 : Январь 29, 2012, 12:56 »

Да, забыл, sizeof лучше заменить на макрос вроде:
Код:
#define ARRAYLEN(x) (sizeof(x) / sizeof(TCHAR))
Т.к при включенном юникоде TCHAR=WCHAR соответственно sizeof(TCHAR) = 2байта, а ф-циям надо передавать размер не в байтах, а в символах.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Февраль 01, 2012, 21:50 »

Никто не обещал что кнопки - тоже окна/двери Вындоуз. Напр Qt кнопки нет. Посмотрите утилитой (насколько я помню называется Spy)

Да, Spy++. Хорошая вещь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.