okno konsoli i minimalizacja

okno konsoli i minimalizacja
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:minuta
  • Postów:377
0

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

K1
Rozwiązanie ma być wieloplatformowe czy może działać tylko na windowsie?
AN
  • Rejestracja:prawie 19 lat
  • Ostatnio:około 9 godzin
0

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.

https://invisible-island.net/xterm/ctlseqs/ctlseqs.html

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12164
1

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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 dni
  • Postów:1082
0

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.

wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:minuta
  • Postów:377
0

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

edytowany 4x, ostatnio: wilkwielki
wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:minuta
  • Postów:377
0

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 😀

edytowany 5x, ostatnio: wilkwielki
AN
  • Rejestracja:prawie 19 lat
  • Ostatnio:około 9 godzin
0

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.

edytowany 2x, ostatnio: andrzejlisek
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12164
0
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. ;)


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:11 dni
  • Postów:1082
0
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.

wilkwielki
  • Rejestracja:ponad rok
  • Ostatnio:minuta
  • Postów:377
0

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

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)