jak sprawdzić czy okno konsoli jest zminimalizowane i czy mozna wycować minimalizacje okna to statusu widocznego?

- Rejestracja:ponad rok
- Ostatnio:minuta
- Postów:377
- Rejestracja:prawie 19 lat
- Ostatnio:około 9 godzin
Jeżeli jest to terminal kompatybilny z XTERM, to można to zrobić komendą XTWINOPS, ale uwaga: Nie każdy program konsoli to obsługuje, a więc nie z każda konsolą będzie to działać, chociaż to jest najprostsze do zrobienia, bez jakiś dziwnych fikołków.

- Rejestracja:ponad 13 lat
- Ostatnio:około 3 godziny
- Lokalizacja:Tuchów
- Postów:12164
Fajnie by było, gdybyś napisał o tym o którą platformę chodzi, o jaką konkretnie konsolę i co konkretnie chcesz zrobić. Bo zakładając, że chodzi Ci o Windows i zwykłe okno konsoli, to możesz się posłużyć Win32 API i funkcjami IsIconic
oraz ShowWindow
, odpowiednio aby sprawdzić czy okno konsoli jest zminimalizowane oraz aby je przywrócić.
Jeśli chcesz zablokować możliwość minimalizacji okna konsoli, to można to zrobić na kilka sposobów, np. pobrać uchwyt menu okna i zablokować przycisk minimalizacji (proste rozwiązanie), ale też podłączyć własną procedurę okna i nadpisać obsługę komunikatu WM_WINDOWPOSCHANGING
i tam zapobiec minimalizacji, dzięki czemu nie trzeba będzie okna przywracać (trudniejsze rozwiązanie). Ale zapewne tak czy siak będzie się dało zminimalizować okno, np. skrótem Win+M czy Win+D, więc to trochę robota głupiego.
- Rejestracja:ponad 9 lat
- Ostatnio:11 dni
- Postów:1082
Pytanie po co badać stan minimalizacji konsoli?
Z definicji konsola jest interfejsem tekstowym i program tutaj wykonuje się sekwencyjnie w oczekiwaniu na wprowadzenie danych użytkownika. Nic więcej. W ogóle uruchamiając program z tekstowym interfejsem nie masz gwarancji, że jakikolwiek system graficzny będzie uruchomiony więc czemu chcesz pytać o stan okna konsoli? Nie idź pod prąd i zrób to zgodnie ze sztuką.
Moim zdaniem jeśli chcesz badać czy okno konsoli jest w stanie zminimalizowanym, to Twój program powinien mieć graficzny interfejs użytkownika. Przemyśl zatem co Twój program robi i nie rób wszystkiego po swojemu. Wszędzie są jakieś standardy czy dobre praktyki. Owszem da się zrobić to co chcesz, ale nie będzie to przenośne, będą jakieś hacki.

- Rejestracja:ponad rok
- Ostatnio:minuta
- Postów:377
dobrze dziękuje za nauki . ale coś jest inaczej "ShowWindow" jest pod WINAPI WinMain okno aplikacji, a pod konsolą nie działa to nie ta warstwa main(int argc, char* argv[]) , tak samo jest z IsIconic nie działa pod main()
tutaj jest na to dowód https://cpp0x.pl/dokumentacja/WinAPI/ShowWindow/741
a jesli chodzi o XTERM to chyba nie bedzie kompatybilne bo to zwykła konsola taka sama jak cmd czy inna, nie znam się na tym XTERM

- Rejestracja:ponad rok
- Ostatnio:minuta
- Postów:377
znalazłem działa pod main()
tutaj spis zmiennych ShowWindow
ShowWindow(GetConsoleWindow(), SW_RESTORE);
IsIconic(GetConsoleWindow()) tez tak działa jak ShowWindow(GetConsoleWindow(),
temat zamknięty,dziękije za naprowadzenie pa
- Rejestracja:prawie 19 lat
- Ostatnio:około 9 godzin
XTERM to jest standard stosowany między innymi w Linux, zarówno jako konsola systemowa (odpowiednik cmd.exe w Windows), jak i jako klient Telnet i SSH podłączający się do serwera z Linux. Do Linux jest kilka programów konsol, które można zainstalować i mają podobną funkcjonalność (gnome-terminal, konsole), XTERM to jeden z takich programów. Wszystkie te programy są mniej lub bardziej zgodne z XTERM w sensie, że większość tych programów (zarówno konsol, jak i klientów Telnet/SSH) nie obsługuje wszystkich komend, jednak obsługuje większość potrzebnych w typowych zastosowaniach.
Zanim napisałeś, że chodzi o Windows, zaproponowałem to, co zaproponowałem, bo w Linux, Unix, MacOS stosowanie tych komend to standardowy sposób sterowania działaniem konsoli, w Windows 11 od którejś aktualizacji również ten sposób działa, choć oczywiście nie wszystkie komendy. Manipulacja oknem konsoli przez uruchomiony program to mało potrzebna funkcjonalność, dlatego uprzedzam, że może to nie działać, bo nie jest obsługiwane. Nie wiem, jak jest w Windows, bo nie sprawdzałem, ale sprawdzić, to jest chwila moment, jak robisz w tym program.
Jak chodzi o samo sterowanie, to wysłanie komendy to nic innego, jak wypisanie odpowiedniego napisu na standardowe wyjście, a odebranie odpowiedzi na komendę żądającą informacji z konsoli, to odczyt napisu ze standardowego wejścia. Konstrukcja komend jest "kompatybilna w przód" w sensie, że nieobsługiwane komendy są po prostu ignorowane.

- Rejestracja:ponad 13 lat
- Ostatnio:około 3 godziny
- Lokalizacja:Tuchów
- Postów:12164
wilkwielki napisał(a):
znalazłem działa pod main()
tutaj spis zmiennych ShowWindow
Opisów funkcji szukaj na MSDN, a nie w jakichś randomowych serwisach, które nie wiadomo skąd te opisy mają, a nawet jeśli wyglądają poprawnie, to nie wiadomo czy są aktualne. Tutaj masz opisy funkcji IsIconic i ShowWindow.
Mr.YaHooo napisał(a):
Z definicji konsola jest interfejsem tekstowym i program tutaj wykonuje się sekwencyjnie w oczekiwaniu na wprowadzenie danych użytkownika. Nic więcej. W ogóle uruchamiając program z tekstowym interfejsem nie masz gwarancji, że jakikolwiek system graficzny będzie uruchomiony więc czemu chcesz pytać o stan okna konsoli?
OP nie pisał, że jego program jest konsolowym, ani tego, że ma być rozwiazaniem przenośnym na inne platformy. Poza tym nie ma żadnego powodu, aby program konsolowy nie mógł sprawdzać tego w jakim środowisku działa, a jeśli działa w systemowej konsoli, to aby nie miał możliwości manipulowania tą konsolą. Nie ma tutaj żadnego „zgodnie ze sztuką” — liczą się jedynie potrzeby i możliwości systemowego API.
Sam to robię, w swoim silniku — jeśli gra została uruchomiana z przekierowaniem logów do konsoli, to albo proces gry podpina się pod istniejącą konsolę, albo alokuje nową. Po ustanowieniu konsoli jako wyjścia, pobiera uchwyt menu konsoli i blokuje systemowy przycisk zamykania (ten na belce okna), a także rejestruje niskopoziomowy hook na klawiaturę dla konsoli, aby redefiniować skrót Alt+F4
(zamiast zamykać konsolę i ubijać grę, zjada ten skrót, aby nie dotarł do konsoli oraz wysyła zdarzenie żądania zamknięcia gry do silnika).
Jak widzisz, takie rzeczy są bardzo przydatne i bez problemu dostępne z poziomu Win32 API. ;)
- Rejestracja:ponad 9 lat
- Ostatnio:11 dni
- Postów:1082
flowCRANE napisał(a):
OP nie pisał, że jego program jest konsolowym, ani tego, że ma być rozwiazaniem przenośnym na inne platformy.
Przecież w tytule wątku jest okno konsoli i minimalizacja
więc założyłem, że jest to program tekstowy.
flowCRANE napisał(a):
Poza tym nie ma żadnego powodu, aby program konsolowy nie mógł sprawdzać tego w jakim środowisku działa, a jeśli działa w systemowej konsoli, to aby nie miał możliwości manipulowania tą konsolą. Nie ma tutaj żadnego „zgodnie ze sztuką” — liczą się jedynie potrzeby i możliwości systemowego API.
Tak, a potem powstaje tysiąc standardów i każdy program zachowuje się inaczej i mamy bałagan jak w dystrybucjach Linuxa. Ja wiem, że da się zrobić to o co kolega pyta. Pytanie czy warto. Płynięcie pod prąd i robienie wszystkiego na siłę po swojemu bardzo często nie ma sensu. Jeśli korzystamy z jakiegoś ekosystemu, to po co się temu sprzeciwiać? Program działający inaczej niż 99% programów trudniej się obsługuje, łatwiej o pomyłkę w takich programach. Oczywiście, że jest coś takiego jak "zgodnie ze sztuką" oznacza po prostu ogólnie przyjęte standardy w danej dziedzinie. Szczerze to nie widziałem programu działającego w konsoli który by badał stan minimalizacji okna. Po prostu taki interfejs stosujemy gdy chcemy mieć prosty interfejs na zasadzie wprowadź dane, otrzymaj wyniki. Jak potrzebuję coś robić z interfejsem, piszę apkę GUI.
flowCRANE napisał(a):
Sam to robię, w swoim silniku — jeśli gra została uruchomiana z przekierowaniem logów do konsoli, to albo proces gry podpina się pod istniejącą konsolę, albo alokuje nową. Po ustanowieniu konsoli jako wyjścia, pobiera uchwyt menu konsoli i blokuje systemowy przycisk zamykania (ten na belce okna), a także rejestruje niskopoziomowy hook na klawiaturę dla konsoli, aby redefiniować skrót
Alt+F4
(zamiast zamykać konsolę i ubijać grę, zjada ten skrót, aby nie dotarł do konsoli oraz wysyła zdarzenie żądania zamknięcia gry do silnika).
Tu jest trochę co innego. U Ciebie ma to sens, Kolega natomiast robi coś dziwnego i mam wrażenie, że zabiera się do tego od złej strony.
flowCRANE napisał(a):
Jak widzisz, takie rzeczy są bardzo przydatne i bez problemu dostępne z poziomu Win32 API. ;)
Ja doskonale wiem co się da zrobić w WinAPI. Korzystałem też z nieudokumentowanych funkcji API. Od tego zaczynałem swoje programowanie pod Windows. Biblię Charles'a Petzolda przeczytałem parę razy :) Tak samo wiem, że czasami trzeba użyć systemowego API gdy biblioteka framework nie oferuje tego czego chcemy. Jednak staram się aby to były naprawdę wyjątki.

- Rejestracja:ponad rok
- Ostatnio:minuta
- Postów:377
Panowie spokojnie dzięki za objaśnienie co to ten XTERM , juz sobie poradziłem z tymi dwoma funkcjami i działają dobrze w konsoli , tak chodziło o WIndows'a a nie o Linuxa , pozdrawiam