GetWindowRect - probleme



  • MiC++ha schrieb:

    EDIT: Ah jetzt ja eine Insel, du willst den RECT vom Desktop, oder?
    ..... GetWindowRect(NULL, &abc) .......

    ach übrigens der befehl dafür is:

    HWND GetDesktopWindow(void.....erklärt sich glaube von selbs!damit kann man übrigens prim die höhe und breite des desktops herausfinden, das lohnt sich für fullscreen anwendungen!:

    int main(void)
    {
    	RECT r;
    	GetWindowRect(GetDesktopWindow(),&r);
    	printf("die Hoehe des Desktops: %d\nund die Breite:%d\n",r.bottom,r.right);
    	return 0;
    }
    


  • @t.baum1
    klar geht das so auch, aber wenn ich NULL angebe, also kein Handle, bei den Funktionen die ein HWND erwarten, niemmt Windows immer das erste und das ist der Desktop, daher funktionieren auch (fast) alle Funktionen damit.
    Oder anders und "virtual" gesehen, ruft windows GetDesktopWindow() auf, wenn ich NULL angebe.



  • aso...na das is ja n knaller...^^ ich habs lieber n bischen unübersichtlicher!!*g*
    danke trotzdem



  • Ich setze statt NULL immer die HWND_DESKTOP-Konstante ein 😉



  • geeky schrieb:

    Ich setze statt NULL immer die HWND_DESKTOP-Konstante ein 😉

    LOL
    Klar ist sauberer, dann weißt man auf anhieb das der Desktop gemeint ist.
    Probier mal folgendes aus:

    if (HWND_DESKTOP == NULL) MessageBox(NULL,"Aha ist NULL","Ises NULL?",MB_OK);
    

    Schreibfaule sparen sich halt 8 Zeichen und nehmen die NULL 😃



  • Schreibfaule wundern sich dann auch, wenn ihre Programme unter der kommenden Windows-Version nicht funktionieren (beliebtes Stichwort: XXX_ALL_ACCESS).

    Kannst Du garantieren, das auf Longhorn auch HWND_DESKTOP == NULL ist?

    Ich glaube nicht! Und genau dafür gibt es jene Konstante...



  • Hepi schrieb:

    Kannst Du garantieren, das auf Longhorn auch HWND_DESKTOP == NULL ist?

    Ich glaube nicht! Und genau dafür gibt es jene Konstante...

    Das hätte dann aber zur Folge, dass Longhorn nicht mehr abwärtskompatibel wäre, denn #define-Konstanten werden ja beim Compilieren ersetzt durch ihren Wert. 😉



  • Winuser.h sagt:

    #define HWND_DESKTOP (HWND)0
    

    Somit würden alle Programme die sowohl NULL oder (HWND)0 oder HWND_DESKTOP verwendet haben, auf Longhorn nicht laufen!
    Welchen Sinn sollte es haben das dort ein anderer Wert ist?



  • Gegenfrage:
    Wozu ist HWND_DESKTOP dann überhaupt da, wenn es doch nur eine zum HWND gecastete 0 ist?

    Und ich bleibe dabei:
    Schreib ein Programm, was auf HKLM mittels KEY_ALL_ACCESS schreibend zugreift.

    Starte es unter Windows98.

    Starte es als Administrator unter Windows 2000/XP.
    Starte es als normaler Nutzer unter Windows 2000/XP.

    Was fällt uns auf?

    Das Programm, was unter Windows98 vollkommen problemlos lief, tut's unter Windows 2000/XP nur noch mit Adminrechten. Und das alles nur, weil der Programmierer "schreibfaul" war und es bequem war, einfach KEY_ALL_ACCESS zu benutzen.

    Es würde mich NICHT wundern, wenn HWND_DESKTOP unter Longhorn auf einmal 0x8000 wäre und GetWindowRect(NULL, &rc) rein gar nichts zurückliefert...

    Denn, flenders, laufen würde das Programm nach wie vor; die Ergebnisse, die es liefert, wären aber undefiniert (wie bei KEY_ALL_ACCESS).



  • Ich nehme einfach das, was in der Doku steht - wenn dort sthet HWND_DESKTOP, dann nehme ich das, steht dort NULL, dann eben das. Diese Konstanten haben aber ja nicht nur den Sinn, variabel zu bleiben, sondern vielmehr, dass du dir keine Zahlenwerte merken musst 🙂



  • @Hepi
    Du hast das nicht richtig verstanden.
    Wenn ich z.B. GetDC(HWND_DESKTOP); schreibe so wandelt der Compiler es zu ne Null um und das Programm könnte das was er auf dem Desktop machen will nicht durchführen bei Longhorn wenn es dort 0x0800 ist, also müßte das Prog auf Longhorn mit der neuen SDK compiled werden. mein Medienplayer hat OSD welches durch GetDC(..)..etc. das auf dem Desktop ausgiebt, gut ich könnte das dann neu compilen, aber was ist mit den Leuten die meinen MediaPlayer verwenden?
    Verstehst du den (Un)Sinn wenn es dann einen anderen Wert hat?

    KEY_ALL_ACCESS nutzt man um kompatibel zu sein, das hat aber nichts mit der defination des Desktop Handle zu tun, den egal ob ich HWND_DESKTOP oder NULL verwende, in der EXE steht immer die Null.


Anmelden zum Antworten