С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4

Объясните принцип вывода окна на передний план

14.04.2021, 00:52. Показов 3290. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В чём заключается смысл настроек и какие нужно вызвать функции чтобы можно было спокойно выдвинуть окно на передний план? Можно ли это сделать в консольном приложении?
Я бы хотел бы доработать эти строки

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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);
Чего тут не хватает, читал в инструкциях Майкрософт что-то про то что нужно послать сообщение окну которое нужно изменить, пишут что-то про стили которые тоже могут блокировать функции. Я здесь спрашивал Как переключить фокус программы на нужное окно? но никто нормально не может объяснить что это вообще такое и какие манипуляции нужно проделать чтобы окно начало подчиняться пользователю.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2021, 00:52
Ответы с готовыми решениями:

Как максимизировать чужое окно без вывода его на передний план?
Есть окно 1, оно свернуто в значок на панели задач. Есть окно 2, которое максимизировано, активно и находится на переднем плане. Нужно,...

Восстановление окна на передний план.
Есть окно. По ссылке из этого окна открывается второе окно myWin= window.open(url,'displayWindow',opt);. Второе окно может уйти на...

Вывод окна на передний план
Доброе утро. Всех с праздниками, прошедшими и грядущими! Ситуация такова. Мне нужно, чтобы второй экземпляр моей программы не...

15
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.04.2021, 20:31
Тут было: Как переключить фокус программы на нужное окно?
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
14.04.2021, 20:38  [ТС]
Цитата Сообщение от Optimus11 Посмотреть сообщение
Тут было
Ну были намёки. Последний код я просмотрел тоже, он навороченный. Функции тоже посмотрел вроде правильно у него там но он не запускается у меня.
Назовите конкретно какие действия нужно сделать.
Я сделал поиск PID а он там есть в принципе, поиск окна, ну а дальше что какие последующие действия. Почему SetWindowPos не регулирует окно? Добавил эти строки перед вызовом SetWindowPos
C++
1
2
3
LONG lStyle = GetWindowLongA(g_HWND,GWL_STYLE);
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_SYSMENU | WS_SIZEBOX);
SetWindowLong(g_HWND,GWL_STYLE, lStyle);
. Тоже не помогает. Что конкретно нужно системе чтобы управлять окнами. Инструкций не нашёл негде, может Майкрософт напишет её через пару лет но я сомневаюсь что новички её поймут.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.04.2021, 20:48
Цитата Сообщение от Nexi99 Посмотреть сообщение
Ну были намёки. Последний код я просмотрел тоже, он навороченный. Функции тоже посмотрел вроде правильно у него там но он не запускается у меня.
Назовите конкретно какие действия нужно сделать.
Я сделал поиск PID а он там есть в принципе, поиск окна, ну а дальше что какие последующие действия. Почему SetWindowPos не регулирует окно? Добавил эти строки перед вызовом SetWindowPos
C++
1
2
3
LONG lStyle = GetWindowLongA(g_HWND,GWL_STYLE);
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_SYSMENU | WS_SIZEBOX);
SetWindowLong(g_HWND,GWL_STYLE, lStyle);
. Тоже не помогает. Что конкретно нужно системе чтобы управлять окнами. Инструкций не нашёл негде, может Майкрософт напишет её через пару лет но я сомневаюсь что новички её поймут.
Я же написал, что нужно сделать, ты решил сделать, как тебе удобнее.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
14.04.2021, 20:51  [ТС]
Цитата Сообщение от Optimus11 Посмотреть сообщение
Я же написал, что нужно сделать, ты решил сделать, как тебе удобнее.
И ошибку проверил как вы писали а её нет. Скиньте ссылки на посты я перечитаю, может я тупой валенок не заметил, хотя скорее не понял специфику, потому что читал всё.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.04.2021, 21:00
Цитата Сообщение от Nexi99 Посмотреть сообщение
И ошибку проверил как вы писали а её нет. Скиньте ссылки на посты я перечитаю, может я тупой валенок не заметил, хотя скорее не понял специфику, потому что читал всё.
Цитата Сообщение от Optimus11 Посмотреть сообщение
Сделай отдельно функцию, которая будет принимать только std::vector<HWND>my_vector_HWND по ссылке и заполнять его нужными HWND.

После этого, вызови в цикле функцию My_func_SetWindowsPos написанную с учетом всех замечаний в этой теме:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
int my_GET_HWND()
{
...
}
 
int My_func_SetWindowsPos()
{
...
}
 
 
 
 
int main()
{
 
 
std::vector<HWND>my_vector_HWND
my_GET_HWND(my_vector_HWND);
 
 
 
 
int status;
 
for(int i=0; i<my_vector_HWND.size();i++)
{
 
status = My_func_SetWindowsPos;
 
if(status !=0)
{
std::cout<<"Выводишь код ошибки"<<std::endl;
}
 
}
 
}
Или можешь делать любым тебе удобным способом.
И я запустил бы этот код у себя, и посмотрел бы, как оно у тебя перемещается, потому что у меня все работает. А ту простыню кода, я не хочу запускать.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
14.04.2021, 21:06  [ТС]
Цитата Сообщение от Optimus11 Посмотреть сообщение
Сделай отдельно функцию,
Я с векторами не работаю, не умею, не люблю я их, толку от них 0, я не перевариваю такие записи <> и не понимаю зачем громодить тонну кода если речь идёт только об одном окне, и я не могу с ним справится с 1им окном, куда мне пихать вектора или массивы а вы хотите чтобы я пачку запустил. У меня мало кода чтобы в функции пихать, мне взять простыню добавить вектор сделать кашу и засунуть в функции. Ну да конечно проверить мой примитивный код почему-то сложно вам, а я вот смотрю и просматриваю всё что присылают, это не всегда нужно но изучаю полезные свойства. Если вы знаете где есть инструкции где описаны требования чтобы окно найти дайте ссылку я почитаю.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.04.2021, 21:11
Цитата Сообщение от Nexi99 Посмотреть сообщение
Я с векторами не работаю, не умею, не люблю я их, толку от них 0
Не проблема, пусть это будет указатель. От них надеюсь толк есть ?

Цитата Сообщение от Nexi99 Посмотреть сообщение
Ну да конечно проверить мой примитивный код почему-то сложно вам, а я вот смотрю и просматриваю всё что присылают
Странно все это.
По мне так в любом случае, задача разбитая на отдельные функции - всегда читается визуально лучше, но, если тебе так удобнее, делай так, как удобно тебе.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
14.04.2021, 21:30  [ТС]
Цитата Сообщение от Optimus11 Посмотреть сообщение
По мне так в любом случае, задача разбитая на отдельные функции
А сколько там текста в 1ом посте. Его там почти нет. Запустил процесс. Нашёл окно и дальше SetWindowPos, всё что описано ниже условно не нужно то что я там закрыл процесс и хэндл, кода там нет. Но специфику я наверное не написал до конца, вы что-то намекали про стили, потом может нужно сообщение в окно послать, может память выделить или перенаправить, я смутно так понял читая описание функций. Просто в целом не понятно какие нужны самые критические действия чтобы это заработало. Там в инструкция от Майкрософт тонна флагов, заблудиться можно, когда на какой воздействовать, ни картинок с примерами ни хрена нет.

Добавлено через 14 минут
Цитата Сообщение от Optimus11 Посмотреть сообщение
Не проблема, пусть это будет указатель.
А где я вам возьму несколько окон если у меня 1ин запущенный процесс, остальные процессы нужно смотреть функциями так что я не знаю что туда сувать да и как я писал выше хотелось бы справиться с одним окном. Ну и сделать это на обычной консоли а не на WinMain, потому что дальше я всё на этой консоли хочу мутить, оконные приложения мне не нужны пока что.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.04.2021, 22:03
Цитата Сообщение от Nexi99 Посмотреть сообщение
А где я вам возьму несколько окон если у меня 1ин запущенный процесс, остальные процессы нужно смотреть функциями так что я не знаю что туда сувать да и как я писал выше хотелось бы справиться с одним окном.
EnumWindows().

Цитата Сообщение от Nexi99 Посмотреть сообщение
Ну и сделать это на обычной консоли а не на WinMain.
WinMain здесь и не нужен, ты же не создаешь свои окна.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
14.04.2021, 22:15  [ТС]
Цитата Сообщение от Optimus11 Посмотреть сообщение
EnumWindows()
Так он у меня есть там EnumWindows(EnumWindowsProc,proc_info.dwProcessId); зачем мне эту строку запихивать в функцию, вы хотите чтобы я оттуда окон набрал чтобы массив заполнить или вектор кому что, и проверял как они работают?
Цитата Сообщение от Optimus11 Посмотреть сообщение
WinMain здесь и не нужен
Ну по ходу да вы же прислали прогу скомпилированную она работала. В инструкции написано что этот режим проявляет некие свойства но всего не усмотришь.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
14.04.2021, 22:25
Цитата Сообщение от Nexi99 Посмотреть сообщение
Так он у меня есть там EnumWindows(EnumWindowsProc,proc_info.dwProcessId); зачем мне эту строку запихивать в функцию, вы хотите чтобы я оттуда окон набрал чтобы массив заполнить или вектор кому что, и проверял как они работают?
Типа того. Чтобы в main`е не было ничего лишнего. Вызвали функцию получили вектор или указатель на HWND видимых окон и сосредоточились на передвижении их на передний план. В общем давно бы уже сделали.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
15.04.2021, 00:13  [ТС]
Цитата Сообщение от Optimus11 Посмотреть сообщение
Чтобы в main`е не было ничего лишнего.
Давайте обменяемся разработками я вам могу отдать функцию которая строит массивы любых размеренностей(правда пока динамические) https://youtu.be/wzDQsMQY-b4 (но толька просьба не распространять мой алгоритм выщитывал очень долго) а вы мне покажете как выдвинуть нужное окно по PID на передний план, потому что эти писаки ни к чему не приведут.
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
15.04.2021, 16:49
Цитата Сообщение от Nexi99 Посмотреть сообщение
Так он у меня есть там [INLINE]EnumWindows
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//my_get_HWND_window
#include <iostream>
#include <Windows.h>
 
 
static int cntr_globL = 0;
 
 
BOOL CALLBACK EnumWindowsProc_1(HWND   hwnd, LPARAM lParam)
{
 
 
    BOOL my_bool_IsWindowVisible = IsWindowVisible(hwnd); 
 
 
    SetLastError(0);        
 
    int my_TextLength_A = GetWindowTextLengthA(hwnd);
 
 
 
    if (my_bool_IsWindowVisible != 0 && my_TextLength_A != 0)
    {
        *(int*)lParam = *(int*)lParam + 1;
    }
 
    return TRUE;
 
}
 
 
 
 
 
 
BOOL CALLBACK EnumWindowsProc_2(HWND   hwnd, LPARAM lParam)
{
 
    BOOL my_bool_IsWindowVisible = IsWindowVisible(hwnd);
 
 
    //SetLastError(0);
 
    int my_TextLength_A = GetWindowTextLengthA(hwnd);
 
 
 
    if (my_bool_IsWindowVisible != 0 && my_TextLength_A != 0)
    {
        
        (((HWND*)lParam))[cntr_globL] = hwnd;
 
        cntr_globL++;
 
    }
 
    return TRUE;
 
}
 
 
 
 
 
 
 
int my_get_HWND_window(HWND** my_HWDN_p, int* Kol_vo_HWND)
{
 
    BOOL My_bool_EnumWindows_cntr = EnumWindows(EnumWindowsProc_1, (LPARAM)Kol_vo_HWND);
 
 
    *my_HWDN_p = (HWND*)malloc((*Kol_vo_HWND)*sizeof(HWND*));
 
 
    My_bool_EnumWindows_cntr = EnumWindows(EnumWindowsProc_2, (LPARAM)*my_HWDN_p);
 
 
 
    return TRUE;
}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    HWND* my_HWDN_p;
    int Kol_vo_HWND=0;
 
    my_get_HWND_window(&my_HWDN_p, &Kol_vo_HWND);
 
 
    std::cout << Kol_vo_HWND << std::endl;
 
    for (int i = 0; i < Kol_vo_HWND; i++)
    {
        std::cout << my_HWDN_p[i] << std::endl;
           //SetWindowsPos(my_HWDN_p[i])
 
    }
}
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
15.04.2021, 23:51  [ТС]
Цитата Сообщение от Optimus11 Посмотреть сообщение
BACK EnumWi
Я проверял прогой spy++ 64 найденное моими коляками окно оно существует. Ваш код вставлял были найдены активные/развёрнутые окна.
Цитата Сообщение от Optimus11 Посмотреть сообщение
IsWindowVisible(hwnd);
Сайт может спокойно понять активно у вас окно или нет и кто его собирает бот или человек, сайту нужно отправить флаг что окно открыто и развёрнуто но не известно можно ли обрабатывать сайт в свёрнутом виде.
Ну поигрались с окнами дальше что?

Добавлено через 10 минут
Кстати там утечка памяти она не критичная конечно но нужно не забывать удалять память.
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,825
Записей в блоге: 4
16.04.2021, 17:26  [ТС]
SwitchToThisWindow(g_HWND, TRUE); тоже не работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.04.2021, 17:26
Помогаю со студенческими работами здесь

Код VBA для вывода элемента формы на передний план
Здравствуйте! Подскажите пожалуйста код VBA для вывода элемента формы на передний план.

Как вытащить color picker из popup окна на передний план?
В общем есть страничка (html+uikit), кнопка по нажатию на которую всплывающее окно (модальное в терминах uikit), во всплывающем окне...

Объясните принцип работы части кода для вывода элементов контейнера
Вот, собственно говоря, сам код для вывода элементов контейнера: struct print { char sep; print(char s) : sep(s) { } inline void...

Поместить контролл на передний план, на задний план "по уровням"
Доброго времени суток :) В VS при создании есть 2 функции &quot;на передний план &quot; и &quot;на задний план&quot;, а можно элемент поднимать...

На передний план
Как переместить контрол перед всеми другими(программно). Он находится в Canvas.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru