Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2021, 15:24   #1
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию Как выдвинуть окно на передний план

Объясните принцип вывода окна на передний план. Я тестировал функции SetForegroundWindow BringWindowToTop SetActiveWindow SetWindowPos SwitchToThisWindow. Я пробовал выводить на передний план Word-ий документ и Mozilla Firefox. Единственное что у меня нормально получилось это изменить размер активного окна функцией SetWindowPos, но меня интересует взятие окна по PID. Вот снял видео как открывается https://disk.yandex.ru/i/2cAkrz9bZQYCYQ, https://disk.yandex.ru/i/jyJh_0qVQzGSWA. Иногда открывается часть какого-то окошка а иногда вообще не реагирует никак.
В чём заключается смысл настроек и какие нужно вызвать функции чтобы можно было спокойно выдвинуть окно на передний план? Можно ли это сделать в консольном приложении?
Я бы хотел бы доработать эти строки
Код:
HWND g_HWND=NULL;
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam){
    DWORD lpdwProcessId;
    GetWindowThreadProcessId(hWnd,&lpdwProcessId);
    if(lpdwProcessId==lParam){g_HWND=hWnd;return 0;}
    return 1;
}
 
//в main
char*put="C:\\Program Files\\Mozilla Firefox\\firefox.exe";
STARTUPINFOA start_info={sizeof start_info};
PROCESS_INFORMATION proc_info={0};
CreateProcessA(put,0,0,0,0,0,0,0,&start_info,&proc_info);
 Sleep(10000);//для того чтобы приложение загрузилось нормально нужно пока оставить
EnumWindows(EnumWindowsProc,proc_info.dwProcessId);//окно придётся находить
 
SetWindowPos(g_HWND,HWND_TOPMOST,400,400,400,400,SWP_SHOWWINDOW);//cout<<<<endl;
DWORD qq_=GetLastError();
char gh;
cin>>gh;cout<<"gh "<<gh<<" код ошибки "<<qq_<<endl;//если убрать эту строку то мы не увидим маленько окно перемещённое на передний план
//т.к. программа отработает очень быстро или таймер нужен
DWORD ExitCode=0;
GetExitCodeProcess(proc_info.hProcess,&ExitCode);
TerminateProcess(proc_info.hProcess,ExitCode);
CloseHandle(proc_info.hProcess);
Чего тут не хватает, читал в инструкциях Майкрософт что-то про то что нужно послать сообщение окну которое нужно изменить, пишут что-то про стили которые тоже могут блокировать функции.
Изображения
Тип файла: jpg открытие.jpg (87.8 Кб, 1 просмотров)
Loksiin12 вне форума Ответить с цитированием
Старый 15.04.2021, 07:07   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А вы уверены, что находите правильное окно?
Вместе со студией должна быть утилита spyxx.exe - воспользуйтесь ею и найдите нужное окно и проверьте совпадают ли дескрипторы окон.
И скорее всего вам надо HWND_TOP а не HWND_TOPMOST.
waleri вне форума Ответить с цитированием
Старый 15.04.2021, 15:38   #3
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
И скорее всего вам надо HWND_TOP а не HWND_TOPMOST.
Оба флага не работают. Но если посмотреть мой код то в EnumWindows(EnumWindowsProc,proc_in fo.dwProcessId); видно что PID передаётся сразу из структуры proc_info, да и к тому же судя по роликам и скрину выше функция пытается выдвинуть ворд на передний план а получается какае-то ерунда. Если не сложно проверьте код сами.

Последний раз редактировалось Loksiin12; 15.04.2021 в 18:40.
Loksiin12 вне форума Ответить с цитированием
Старый 15.04.2021, 22:42   #4
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Вместе со студией должна быть утилита spy
spy++ 64 находит окно , spy++ по хэндл окно не находит а вот заголовок видит что где-то существует, в общем в конечном итоге окно вручную найдено какого хрена функция не хочет с ним взаимодействовать не понятно.
Loksiin12 вне форума Ответить с цитированием
Старый 16.04.2021, 17:25   #5
Loksiin12
Форумчанин
 
Регистрация: 04.10.2020
Сообщений: 136
По умолчанию

SwitchToThisWindow(g_HWND, TRUE); тоже не работает
Loksiin12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форму на передний план! Altera Общие вопросы Delphi 14 28.05.2018 21:40
перенести окно на передний план the_deer_one WPF, UWP, WinRT, XAML 0 26.09.2014 16:41
[?] Послать клавишу в чужое окно, не выводя окно на передний план. Moriarty Win Api 4 21.02.2011 05:11
Вывести чужое окно на передний план TwiX Общие вопросы Delphi 10 12.10.2009 20:54
как переместить jLabel на передний план lady 6 Общие вопросы по Java, Java SE, Kotlin 3 23.06.2009 13:33