Verfasst: 25.02.2006 20:46
ts-soft Du machst mich stolz !
Ich glaube ich steige demnächst vom blutigen Anfänger zum Anfänger auf.
Ich glaube ich steige demnächst vom blutigen Anfänger zum Anfänger auf.
Wenn ich mir das Ergebnis dieser Funktion zurückgeben lasse, erhalte ich aber nicht 0...ts-soft hat geschrieben:Was ist den der Unterschied zwischen DesktopWindow und Desktop.
Desktop hat immer 0 als Handle. DesktopWindow hat ein extra Handle?
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.Zu Deinem Problem:wäre die logische KonsequenzCode: Alles auswählen
GetModuleHandle_(GetDesktopWindow_())
Danke. Werde es mal ausprobieren. Wie man den ModuleHandle des Desktops ermittelt, kannst du mir aber nicht sagen, oder?Um Dein Fenster als Unterfenster des Desktops zu erklären, kannste es normal erstellen und mit:zum Desktopfenster machen.Code: Alles auswählen
SetParent_(DeinFensterhWnd, 0)
Ich bin beim googeln auf folgendes gestoßen :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).
Für mich ist COM aber so etwas wie höhere Mathematik oder die Frauen.IActiveDesktop Interface
Allows a client program to manage the desktop items and wallpaper on a local computer.
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)