Auf Desktop zeichnen...
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Meinetwegen kannste das Pflaster abnehmen, wirst ja sehen, obs noch blutet 

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

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)
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_()...
Gruß, Daniel
| In der Realität ist die Wirklichkeit ganz anders...
PB 4.10 (Windows XP SP 2)

PB 4.10 (Windows XP SP 2)
"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ß
Gruß
Gruß, Daniel
| In der Realität ist die Wirklichkeit ganz anders...
PB 4.10 (Windows XP SP 2)

PB 4.10 (Windows XP SP 2)
Von Danilo aus http://forums.purebasic.com/german/viewtopic.php?t=678
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).
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.
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).
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
Gruß

Gruß
Gruß, Daniel
| In der Realität ist die Wirklichkeit ganz anders...
PB 4.10 (Windows XP SP 2)

PB 4.10 (Windows XP SP 2)
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
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
Ich will doch nur mein Module-Hääändleheheh *buhuuhhu* 

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


Gruß, Daniel
| In der Realität ist die Wirklichkeit ganz anders...
PB 4.10 (Windows XP SP 2)

PB 4.10 (Windows XP SP 2)
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.
(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)
Zuletzt geändert von uweb am 28.02.2006 14:13, insgesamt 1-mal geändert.