Windows — консольное приложение C ++ всегда на вершине?

я НЕ находясь в поиске:

  • изготовление другой окно всегда сверху
  • создание любого вида графического интерфейса — диалоги и т.д … сверху

Я, однако, ищу способ, как сделать мой простой C ++ приставка приложение, чтобы всегда оставаться на вершине,

просто чтобы быть ясно — я ищу способ, как сделать это программно 🙂 Я старался изо всех сил поиска, но только нашел выше — что я не хочу …

Так есть ли способ сделать ваш приставка приложение всегда на вершине программно в C ++ на Windows?

PS: да, существует вопрос с соответствующим заголовком но ОП этого вопроса на самом деле ищет что-то еще (зацепки клавиатуры, …) — так что ответы там не по теме на мой вопрос.

Быстрый ответ => см. принятый ответ @AlexanderVX

пример & объяснение => мой ответ ниже

2

Решение

Ссылка в посте ОП ссылается на Windows.

Сначала вам нужно получить дескриптор для вашего окна консоли:
https://support.microsoft.com/kb/124103

Или даже лучше и современнее GetConsoleWindow способ получить эту ручку консоли.

Тогда вам нужно сделать довольно простой трюк:

::SetWindowPos(hwndMyWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_DRAWFRAME | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
::ShowWindow(hwndMyWnd, SW_NORMAL);
8

Другие решения

Как @ AlexanderVX’s answer показывает быстрый ответ, я также хотел показать вам мою окончательную реализацию с соответствующими комментариями, объясняющими, что делает что :):

Не забудьте установить версию Windows такой же или больше, чем 0x0500 и включать windows.h библиотека:

#define _WIN32_WINNT 0x0500
#include <windows.h>

Я положил пример мини-приложения на: http://ideone.com/CeLQj3

Пример с объяснением:

// GetConsoleWindow() => returns:
// "handle to the window used by the console
// associated with the calling process
// or NULL
// if there is no such associated console."HWND consoleWindowHandle = GetConsoleWindow();

if( consoleWindowHandle ){
cout << endl << "Setting up associated console window ON TOP !";
SetWindowPos(
consoleWindowHandle, // window handle
HWND_TOPMOST, // "handle to the window to precede
// the positioned window in the Z order
// OR one of the following:"// HWND_BOTTOM or HWND_NOTOPMOST or HWND_TOP or HWND_TOPMOST
0, 0, // X, Y position of the window (in client coordinates)
0, 0, // cx, cy => width & height of the window in pixels
SWP_DRAWFRAME | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW // The window sizing and positioning flags.
);
// OPTIONAL ! - SET WINDOW'S "SHOW STATE"ShowWindow(
consoleWindowHandle, // window handle
SW_NORMAL // how the window is to be shown
// SW_NORMAL => "Activates and displays a window.
// If the window is minimized or maximized,
// the system restores it to its original size and position.
// An application should specify this flag
// when displaying the window for the first time.");
cout << endl << "Done.";
} else {
cout << endl << "There is no console window associated with this app :(";
}

Рекомендации:

PS: я хотел опубликовать это как изменение ответа @ AlexanderVX, но большинство рецензентов stackoverflow почему-то подумали, что «это изменение отличается от первоначального намерения публикации» …

3