Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

[gelöst] Fenster verstecken

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 01.02.2009, 19:30    Titel: [gelöst] Fenster verstecken Antworten mit Zitat

Hey,

Ich versuche beliebige Fenster zu verstecken.
Immer das, das im Vordergrund ist, wenn ein Tastenkürzel gedrückt wird.

Das klappt aber nur manchmal:

Code:

hwnd=getforegroundwindow
showwindow(hwnd,sw_minimize)
showwindow(hwnd,sw_hide)
showwindow(hwnd,sw_hide)


Exakt so klappt es bei Vollbildfenster, bspw. Far Cry, wenn ich es in eine loop setze und sleep 1 als Intervall nehme.

Es klappt dann aber nicht mehr bei nicht-Vollbildmodus-Fenstern.
Da bricht dann irgendwie alles zusammen und komische Dinge passieren^^
Als workaround dachte ich überprüfe ich halt ob ein Fenster im Vollbildmodus läuft oder nicht, aber ich finde einfach keine Möglichkeit das herauszufinden.
Dann bleibt zuletzt noch das Problem, dass bei Programm im Vollbildmodus ein icon in der Taskleiste bleibt, obwohl ich es ja "hide".

Habt ihr ne Idee wie ich das Problem lösen kann?

mfg noop


Zuletzt bearbeitet von noop am 03.02.2009, 14:35, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 01.02.2009, 19:32    Titel: Antworten mit Zitat

http://www.xtremevbtalk.com/showthread.php?t=278342
Hilft der 5. Beitrag weiter?
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 02.02.2009, 11:50    Titel: Antworten mit Zitat

Mit ShowWindow auf SW_HIDE setzen.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 02.02.2009, 12:11    Titel: Antworten mit Zitat

So hat er es ja in seinem Startpost auch gemacht, aber offenbar funktioniert das nicht so ganz gut. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 02.02.2009, 12:43    Titel: Antworten mit Zitat

Zitat:
Da bricht dann irgendwie alles zusammen und komische Dinge passieren^^

Diese Aussage sollte mal präzisiert werden!

Man kann mit GetWindowPlacement den Anzeigestatus des Fensters abfragen:

Zitat:
The GetWindowPlacement function retrieves the show state and the restored, minimized, and maximized positions of the specified window.

BOOL GetWindowPlacement(

HWND hWnd, // handle of window
WINDOWPLACEMENT *lpwndpl // address of structure for position data
);


Parameters

hWnd

Identifies the window.

lpwndpl

Points to the WINDOWPLACEMENT structure that receives the show state and position information.
Before calling GetWindowPlacement, set the length member of the WINDOWPLACEMENT structure to sizeof(WINDOWPLACEMENT).
GetWindowPlacement fails if lpwndpl->length is not set correctly.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

The flags member of WINDOWPLACEMENT retrieved by this function is always zero. If the window identified by the hWnd parameter is maximized, the showCmd member is SW_SHOWMAXIMIZED. If the window is minimized, showCmd is SW_SHOWMINIMIZED. Otherwise, it is SW_SHOWNORMAL.
The length member of WINDOWPLACEMENT must be set to sizeof(WINDOWPLACEMENT). If this member is not set correctly, the function returns FALSE.

See Also

SetWindowPlacement, WINDOWPLACEMENT

_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 03.02.2009, 12:54    Titel: Antworten mit Zitat

@Jojo:thx. 2 Minuten später ne Antwort und ich kann erst Ewigkeiten später reingucken-suckt zwinkern
Mal sehen ob mir das weiterhilft.

1.@Elektronix:yep da hat 28398 recht. Klappt bei normalen Fenstern, wie z.b Firefox. Sobald du aber zu Vollbildanwendungen übergehst weigern die sich.


2.@Elekronix: Bin mir nicht sicher, was an der Anweisung anders ist, als an der Anweisung showwindow. Ich habe mich immer von solche stuctures ferngehalten...da hatte ich immer Probleme mit.
So was dann für komische Dinge passieren:
1.Die Auswirkungen sind nicht immer die gleichen
2.Auswirkungen:
-Alles friert ein und nur per Taskmanager kann ich dann mich abmelden und neu anmelden um das Problem zu lösen.
-Das Fenster wird minimiert aber in der Taskleiste ist noch ein Symbol das sich langsam nach rechts bewegt.
-Das Fenster wird minimiert aber das Symbol in der Taskleiste bleibt(Diesmal ohne Zuckungen)
-Das Fenster bleibt im Vordergrund. Lediglich manchmal scheinen Teile anderer Fenster durch(Sowie wenn der WMP beim Liedwechsel sich flackernd einblendet)
-Es passiert gar nichts und das Fenster bleibt ohne Reaktion.

So und jetzt kümmere ich mich mal wieder ums Programm lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 03.02.2009, 14:34    Titel: Antworten mit Zitat

Yay lächeln

Es klappt.

thx für die Hilfe.

Hier mal das Grundgerüst meines Programmes:

Code:

#include once "windows.bi"
declare sub debuffer
dim hwnd as hwnd = 0
dim keydown as integer = 0

debuffer

do
    if getasynckeystate(vk_control) and getasynckeystate(89) then
        if keydown=0 then
            if hwnd=0 then
                hwnd=getforegroundwindow
                postmessage(hwnd,WM_SYSCOMMAND,sc_minimize,0)
                do
                    sleep 1
                loop until isiconic(hwnd)
                showwindow(hwnd,sw_hide)
            else
                showwindow(hwnd,sw_show)
                hwnd=0
            end if
            keydown=1
        end if
    else
        keydown=0
    end if
    if getasynckeystate(vk_lmenu) and getasynckeystate(vk_escape) then
        if hwnd>0 then showwindow(hwnd,sw_show)
        end
    end if
sleep 1
loop

sub debuffer
    dim as integer key,result
    for key=1 to 255
        result=getasynckeystate(key)
    next key
end sub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz