Seite 3 von 8

Verfasst: 25.02.2006 20:46
von uweb
ts-soft Du machst mich stolz !

Ich glaube ich steige demnächst vom blutigen Anfänger zum Anfänger auf.

Verfasst: 25.02.2006 21:19
von ts-soft
Meinetwegen kannste das Pflaster abnehmen, wirst ja sehen, obs noch blutet :lol:

Verfasst: 26.02.2006 14:00
von Daniel P.
ts-soft hat geschrieben:Was ist den der Unterschied zwischen DesktopWindow und Desktop.
Desktop hat immer 0 als Handle. DesktopWindow hat ein extra Handle?
Wenn ich mir das Ergebnis dieser Funktion zurückgeben lasse, erhalte ich aber nicht 0...
Zu Deinem Problem:

Code: Alles auswählen

GetModuleHandle_(GetDesktopWindow_())
wäre die logische Konsequenz
Sicher? Das habe ich schon probiert und es passiert nichts. Irgendwie erwartet GetModuleHandle_() einen String oder sowas - auf alle Fälle nicht 0 (wenn GetDesktopWindow_() das zurückgeben würde), denn dann würde diese Funktion den "ModuleHandle" des eigenen Programms zurückgeben - ich brauch aber das vom Desktop.
Um Dein Fenster als Unterfenster des Desktops zu erklären, kannste es normal erstellen und mit:

Code: Alles auswählen

SetParent_(DeinFensterhWnd, 0)
zum Desktopfenster machen.
Danke. Werde es mal ausprobieren. Wie man den ModuleHandle des Desktops ermittelt, kannst du mir aber nicht sagen, oder?

Gruß

// EDIT:
SetParent_() fuhnktioniert zwar, bringt mich aber nicht zum erhofften Ziel. Ich muss definitiv ein "Owned-Window" für den Desktop erstellen - und alles, was mir dazu fehlt ist dieses Module-Teil *needhelp* :!:

// DOPPELEDIT:
Kann mir jemand sagen, wie die DLL oder die EXE-Datei heißt, die den Desktop ausführt. Diesen Namen erwartet nähmlich GetModuleHandle_()...

Verfasst: 26.02.2006 16:01
von 125
explorer müsste das sein :)

Verfasst: 26.02.2006 16:04
von Macros
Ne, ich denke Winlogon, denn den Desktop (ohne Icons)
sieht man auch noch, wenn der Explorer abgeschmiert ist.

Verfasst: 27.02.2006 11:12
von Daniel P.
"winlogon.exe" ist laut Google für das An- und Abmelden zuständig. "explorer.exe" könnte es schon eher sein. Laut Google sorgt diese Anwendung für die Startleiste, Icons und die Verarbeitung der Rechtsklicks auf den Desktop ... muss ich mal ausprobieren (Mist, sitze gerade an einem Mac, also erst heute abend). Bis denne...

Gruß

Verfasst: 27.02.2006 11:19
von uweb
Von Danilo aus http://forums.purebasic.com/german/viewtopic.php?t=678
Mit GetDesktopWindow_() bekommst Du das Handle des
Desktop-"Fensters" und kannst dann über GetDC_() darauf
zeichnen. Das zeichnet allerdings oben drauf, also auch über
bereits sichtbare Fenster - was sicher hier nicht gewollt ist.

Den Hintergrund (Pattern,Bild) und darauf die Icons speichert
Windows wohl intern und blittet es dann auf den Desktop.
Über COM dürfte es aber eine Möglichkeit geben direkt den
Hintergrund zu manipulieren (Suchmaschine anwerfen).
Ich bin beim googeln auf folgendes gestoßen :
IActiveDesktop Interface
Allows a client program to manage the desktop items and wallpaper on a local computer.
Für mich ist COM aber so etwas wie höhere Mathematik oder die Frauen.
Ich ahne um was es geht. Ich kann zum Teil sogar damit umgehen
- allerdings ohne zu wissen was ich da genau tue,
denn richtig verstanden habe ich es nicht
(und werde ich vorraussichtlich auch nicht mehr).

Verfasst: 27.02.2006 12:07
von Daniel P.
Laut MSDN kann man damit den Desktop bearbeiten, sprich Icons hinzufügen/entfernen/manipulieren und den Pfad zum Hintergrund auslesen bzw. ändern. Zum Herumpinseln wird das wohl nicht reichen. Wenn das mit dem OwnedWindow funtkioniert, spielt das aber eh keine große Rolle mehr :wink:

Gruß

Verfasst: 27.02.2006 19:51
von Daniel P.
Das HIER ist doch mal ein extrem schlechter Witz, oder? Das ist ja so, als ob man kurz vor dem Ziel die Beine rausgerissen bekommt :freak:
Wo bekommte ich den jetzt mein Module-Handle her. Wenn ich der Funktion 0 übergebe, erhalte ich das Module-Handle meines Programms. Wenn ich der Funktion - laut MSDN - eine Anwendung aus dem Anwendungspool gebe, bekomme ich immer 0 zurück = Fehler :shock: Ich will doch nur mein Module-Hääändleheheh *buhuuhhu* :cry:

Verfasst: 28.02.2006 11:01
von uweb
Sollte mein Tip tatsächlich total daneben liegen
(Ich vermute die Lösung immer noch im Bereich von
User Interface > Windows Shell > ...
Mit meinem Englisch ist es aber auch nicht so weit her.)
tut es mir leid.
Aber, vielleicht weist der Tip von Danilo aus dem anderen Thread
trotzdem in die richtige Richtung.

edit :
Alternativ könntest Du auf diesem Weg (2. DC-Ausgabe) zwar auf den Desktop
malen, aber eben nicht auf den Desktop-Hintergrund.

Code: Alles auswählen

text1$ = "Hello World !"
text2$ = "Der Desktop sollte oben nur in der Mitte durch ein Fenster verdeckt sein.  Weiter mit Escape ...."
hWin=0 ; Der Bildschirm - wer hier malt, malt eventuell auf andere Fenster
MyDC = GetDC_(hWin) ; DeviceContext zum malen, schreiben, ....
SetBkMode_(MyDC, #TRANSPARENT)
TextOut_(MyDC, 0, 5, text1$, Len(text1$));********************** 1. DC-Ausgabe
TextOut_(MyDC, 200, 25, text2$, Len(text2$));
ReleaseDC_(hWin, MyDC) ; immer gleich wieder frei geben !!!
Repeat : Until GetAsyncKeyState_(#VK_ESCAPE)
InvalidateRect_(hWin,0,1)


; weitere Möglichkeiten 
hDesktop=GetDesktopWindow_();
Debug hDesktop
hDesktop=FindWindowEx_(hDesktop, 0, "Progman", "Program Manager");
Debug hDesktop
ShowScrollBar_(hDesktop,#SB_VERT,#True)
Delay(200);
InvalidateRect_(hWin,0,1) 
Repeat : Until GetAsyncKeyState_(#VK_ESCAPE)
ShowScrollBar_(hDesktop,#SB_VERT,#False)
InvalidateRect_(hWin,0,1)

hDesktop=FindWindowEx_(hDesktop, 0, "SHELLDLL_DefView", 0);
Debug hDesktop
hDesktop=FindWindowEx_(hDesktop, 0, "SysListView32", 0);
Debug hDesktop
#LVM_GETTITEMCOUNT = $1000 + 4
Debug SendMessage_(hDesktop, #LVM_GETTITEMCOUNT, 0, 0) ;anzahl der desktop icons
SendMessage_(hDesktop,#LVM_SETTEXTCOLOR,0,RGB(255,0,0))
SendMessage_(hDesktop,#LVM_SETTEXTBKCOLOR,0,#CLR_NONE)

MyDC = GetDC_(hDesktop) ; DeviceContext zum malen, schreiben, ....
SetBkMode_(MyDC, #TRANSPARENT)
TextOut_(MyDC, 0, 5, text1$, Len(text1$));********************** 2. DC-Ausgabe
TextOut_(MyDC, 200, 25, text2$, Len(text2$));
ReleaseDC_(hDesktop, MyDC) ; immer gleich wieder frei geben !!!
Debug "2. DC-Ausgabe malt nun nicht mehr über Fenster,"
Debug "aber immer noch über Desktop-Icons"
Debug "und wird gleich wieder überpinselt"

Delay(200);
Repeat : Until GetAsyncKeyState_(#VK_ESCAPE)
InvalidateRect_(hWin,0,1)
UpdateWindow_(hWin)
SendMessage_(hDesktop,#LVM_SETTEXTCOLOR,0,RGB(255,255,255)) 
SendMessage_(hDesktop,#LVM_SETTEXTBKCOLOR,0,#CLR_NONE)
InvalidateRect_(hWin,0,1)