Seite 4 von 8
Verfasst: 28.02.2006 14:05
von Daniel P.
Nicht wirklich falsch, nur erscheint er mir zu umständlich. Ein Fenster mit 5 Zeilen Code zu erstellen, dass sich verhält wie eine aufgeklebte Grafik (das Fenster lässt Klicks durch - als ob es nicht da wäre), ist in meinen Augen einfacher als irgendwelche Desktopprozesse abzufangen und zu manipulieren. Da ist es doch viel einfacher, im selbst erstellten "Grafik-Fenster" zu malen. Das Einzige, was mich davon trennt, ist dieses Module-Handle. Das Fenster an den Desktop kleben geht schon, nur lässt es keine Klicks durch, weil es noch das falsche Module-Handle hat. Ich habe über die Suche noch das
HIER gefunden. Muss mal schauen, ob es mir hilft. Gehe jetzt erst mal ins englische Forum auf Suche. Kann doch nicht sein, dass kein Mensch dieses Module-Handle nicht braucht...
Gruß
Verfasst: 28.02.2006 20:00
von Daniel P.
Auf der Suche nach dem Module-Handle bin ich nun etwas weiter gekommen ... nein, ich habe es immer noch nicht
Dieser "Applikationspool", in dem alle Programme aufgelistet sind, bezieht sich lediglich auf das eigene Programm. Sprich man kann ohne weiteres das Module-Handle von irgendwelchen DLLs auslesen, die ohnehin vom Programm verwendet werden, aber nicht von Prozessen wie "explorer.exe". Ganz einfach aus dem Grund, da dieser Prozess nicht vom eigenen Programm aufgerufen wurde. Das erklärt zumindest, warum ich immer 0 als Rückgabewert habe. Allerdings erklärt es nicht, was ich stattdessen als Module-Handle übergeben könnte. Naja, werde heute abend noch etwas herumprobieren und ansonsten auf den Desktop malen müssen...
@uweb:
Habe dein Edit gesehen

Werden denn die gezeichneten Sachen übermalt, sobald man ein Fenster über sie zieht und wieder weg schiebt oder bleiben sie stehen? Und wie sieht es aus mit Transparenz. Kann man transparent malen? Weil das wäre mir sehr wichtig - deswegen wäre ich auch so glücklich, wenn das mit meinem Fenster gehen würde...
Gruß
Verfasst: 28.02.2006 22:48
von uweb
Es freut mich, daß ich helfen konnte.
Ich denke sie bleiben nicht stehen - unabhängig davon wer
(Der Gärtner ist immer der Möder. ähem ... im Zweifel Windows der Übeltäter)
daran rumfingert.
Es bleibt Dir auf diesem Weg also nichts anderes übrig, als
"ständig" neu zu zeichnen. Wenn Du keine Animation am laufen hast wäre
meine Empfehlung nur bei entsprechenden Nachrichten neu zu zeichnen.
Ich weiß nicht ob das der optimale dafür Weg wäre.
Aber, ich denke damit müsste es gehen :
http://www.purearea.net/pb/showcase/show.php?id=181
Wenn Du mit transparent die Hintergrundfarbe meinst kannst Du das Beispiel
verwenden.
Code: Alles auswählen
MyDC = GetDC_(hDesktop) ; DeviceContext zum malen, schreiben, ....
SetBkMode_(MyDC, #TRANSPARENT)
Es wäre schön, wenn Du den Code hier veröffentlichen würdest.
Verfasst: 01.03.2006 11:18
von Daniel P.
Fragt sich nur, ob bei dem ewigen neugezeichne der Prozessor nicht so viel Geschwindigkeit abdrücken muss. Werde mich über's Wochenende mit dem Kram mal beschäftigen. Vielleicht trägt es ja Früchte. Bis dann und danke für die Hilfe!
Gruß
Verfasst: 01.03.2006 19:12
von 125
Hi,
Mirs gerade nen Licht aufgegangen vor nen paar Monaten hatte ich das prog hier aufm rechner:
http://zmatrix.sourceforge.net/
Das zeichnet eine Matrix Animation auf den Desktophintergrund und es ist OpenSource vill. findest da ja Code Stücke die du gebrauchen kannst!
mfg
125
Verfasst: 01.03.2006 19:27
von uweb
Das ist nett.
Aber :
1. ZMatrixSRC_1_5_2.zip ungezippt 4.885.565 Bytes
2. Programming Language : C++
3. Translations : English
4. GPL
Ich danke Dir trotzdem !
Verfasst: 05.03.2006 12:11
von Daniel P.
@uweb:
So habe gestern mal etwas mit GDI und deinem Beispiel gespielt und habe mir folgenden Code gebaut:
Code: Alles auswählen
hWndDesktop = 0
hDCDesktop = GetDC_(hWndDesktop)
text$ = "Das ist ein Test"
SetBkMode_(hDCDesktop,#TRANSPARENT)
TextOut_(hDCDesktop,200,200,text$,Len(text$))
ReleaseDC_(hWndDesktop,hDCDesktop)
End
Solange hWndDesktop "0" ist, pinselt GDI alles brav auf den Bildschirm. Leider auch über alle Fenster, anstatt nur auf dem Desktop zu bleiben. Also habe ich hWndDesktop das Handle von GetDesktopWindow_() verpasst. Allerdings zeichnet der Code gar nichts mehr. Warum dass denn? Deine drei Beispiele pinseln bei mir übrigens immer über alle Fenster
Gruß
Verfasst: 05.03.2006 13:08
von Zaphod
ich vermute das liegt daran, dass der desktop dann signalisiert bekommt, dass er sich neu zeichnen muß und deine änderungen dann überzeichnet bevor sie angezeigt werden konnten.
in dem zmatrix beispiel wird zumindest das redraw vom desktop abgefangen.
Verfasst: 05.03.2006 14:28
von uweb
Deine drei Beispiele pinseln bei mir übrigens immer über alle Fenster
Das finde ich merkwürdig. Da ich aber selbst nur durch viel Suchen, Try & Error,
sich aus böhmischen Dörfern einen Reim machen, zufällig darauf gekommen bin
kann ich nur wenig dazu sagen.
Es würde mich aber schon auch interessieren wo die Lösung läuft und wo nicht
bzw. ob es eine andere gibt die überall läuft.
Probiere doch bitte zur Sicherheit folgendes :
Code: Alles auswählen
; so wird bei mir über die Fenster gemalt
;hWndDesktop = 0
;**********
;so wird bei mir nicht über die Fenster gemalt
hWndDesktop=FindWindowEx_(hWndDesktop, 0, "Progman", "Program Manager");
hWndDesktop=FindWindowEx_(hWndDesktop, 0, "SHELLDLL_DefView", 0);
hWndDesktop=FindWindowEx_(hWndDesktop, 0, "SysListView32", 0);
;**********
hDCDesktop = GetDC_(hWndDesktop)
text$ = "Das ist ein Test"
SetBkMode_(hDCDesktop,#TRANSPARENT)
TextOut_(hDCDesktop,200,200,text$,Len(text$))
ReleaseDC_(hWndDesktop,hDCDesktop)
End
Zu Deiner Frage :
Zaphod hat es wohl um einiges verständlicher ausgedrückt als ich.
Ich denke sie bleiben nicht stehen - unabhängig davon wer
(Der Gärtner ist immer der Möder. ähem ... im Zweifel Windows der Übeltäter)
daran rumfingert.
Verfasst: 05.03.2006 14:42
von Daniel P.
Das mit dem Überzeichnen habe ich mir auch schon gedacht, also habe ich heute morgen den Code in eine Endlos-Schleife gesetzt (mit einem Delay von 5) und es wurde trotzdem nichts angezeigt. Zumindest hätte etwas kurz aufblinken müssen oder so. Ich probiere mal uwebs Code-Schnippsel aus - vielleicht mache ich ja was falsch. Wenn das nicht funktioniert, könnte es eventuell daran liegen, das Samurize mit ähnlichen Funktionen arbeitet und meinen Kram überzeichnet bzw. erst gar nicht auf den Desktop lässt. Ich werd's mal zum Testen abschalten...
Gruß