Seite 1 von 8

Auf Desktop zeichnen...

Verfasst: 22.02.2006 17:28
von Daniel P.
Hi,
kann mir jemand bei einem "nicht-wirklich-Anfänger-Problem" von einem Anfänger weiterhelfen? Und zwar möchte ich auf den Desktop (mom. nur Windows XP) herummalen.

- Der Bereich soll sich verhalten wie der Desktop-Hintergrund
- Der Bereich darf nur grafische Elemente enthalten (keine Gadgets)

Zum ersten Punkt:
Also "durchklickbar". Bei einem Rechtsklick soll das Kontextmenü des Desktops angezeigt werden oder - wenn ein Icon vor der "Kritzelei" ist - das Kontextmenü des Icons bzw. dieses Ausführen, wenn man Doppelt draufklickt, etc. . Sollte klar sein, was ich damit meine :mrgreen:

Zum zweiten Punkt:
Sollte auch klar sein; Striche, Grafiken, Kreise und was auch immer - nur keine Steuerelemente...

Hintergrund der ganzen Frage: Ich möchte ein kleines Infotool für der persönlichen Gebrauch basteln, dass neben der CPU-Auslastung auch noch die RAM-Auslastung anzeigen soll. Momentan habe ich dafür zwar schon ein Programm (Samurise, oder war es Samurize:? ), dass auch wunderbar funktioniert. Aber warum soll man es sich immer so einfach machen, wenn es auch schwer geht?

Gruß
Daniel

Verfasst: 22.02.2006 18:24
von 125

Code: Alles auswählen

; www.purearea.net (Sourcecode collection by cnesm)
; Author:  (updated for PB3.93 by ts-soft)
; Date: 22. November 2003

Global Mem.l 
; hier werden 1024 byte speicher reserviert 
Mem = AllocateMemory(1024) 

Procedure.l DesktopOutput() 
  PokeL(Mem, 1) 
  ProcedureReturn Mem 
EndProcedure 

Maus.Point 

Repeat 
  ; hier werden die maus koordinaten ausgelesen 
  GetCursorPos_(Maus) 
  ; 
  ; hier beginnt die verwirrung 
  StartDrawing(DesktopOutput()) 
    Plot(Maus\x, Maus\y, $0000FF) 
  StopDrawing() 
  ; 
  ; delay für cpu entlastung 
  Delay(5) 
  ; hier wird die escape taste geprüft 
  If GetAsyncKeyState_(#VK_ESCAPE) 
    Quit = 1 
  EndIf 
  
Until Quit 
InvalidateRect_(0, 0, 0) 
End 

; ExecutableFormat=Windows
; FirstLine=1
; EOF
:)

Verfasst: 23.02.2006 11:33
von Daniel P.
Ich habe vergessen, dass der Bereich auf dem Desktop-Hintergrund hinter den Icons - von mir aus auch davor - aber auf alle Fälle auf der "Höhe" des Desktops liegen soll. Das Codebeispiel zeichnet ja auf dem gesamten Bildschirm über alle Fenster drüber. Außerdem meine ich mit Zeichnen nicht zeichnen wie in Paint, sondern per Code. Hast jemand eine Idee. Vielleicht würde es auch über ein transparentes Fenster gehen, das auf der Höhe des Desktops liegt, aber wie macht man das?

Gruß & THX

Verfasst: 23.02.2006 12:15
von Kaeru Gaman
das problem wäre da wohl die von dir geforderte "durchklickbarkeit". das wäre bei keine fenster-lösung möglich.

muss es denn der gesamte desktop sein?
eine geshapetes fenster könnte helfen, also ein fenster, wo die begrenzung nicht rechteckig ist, gabs hier schon threads drüber.
würde aber auch wie ein normales fenster reagieren, logischerweise.

ein anderer ansatz wäre, herauszukriegen, wo im speicher das hintergrundbild steht, und das zu manipulieren...
aber frag misch net, wie das geht.

Verfasst: 23.02.2006 13:28
von bobobo
sowas in der Art is in XP schon eingbaut

folgender Code erstellt ne Webseite die sich
sekündlich refresht als Beispiel

Diese kann als DektopElement eingefügt werden (so aktiviert)
(Eigenschaften von Anzeige
Desktop
Desktop anpassen
Web
...
)

Code: Alles auswählen

Repeat
OpenFile(0,"c:\eigene dateien\ausgabe.html")
WriteStringN("<html><head>")
WriteStringN("<meta http-equiv="+Chr(34)+"expires"+Chr(34)+" content="+Chr(34)+"0"+Chr(34)+">")
WriteStringN("<meta http-equiv="+Chr(34)+"refresh"+Chr(34)+" content="+Chr(34)+"1; URL=ausgabe.html"+Chr(34)+">")
WriteStringN("</head><body>")
WriteStringN("Eduard<br>")
WriteStringN("Anton<br>")
WriteStringN(Str(Random(500000)))
WriteStringN("</body></html>")
CloseFile(0)

Delay(100)
ForEver

Verfasst: 23.02.2006 13:51
von Daniel P.
Ne, nicht eine Web-Seite und ja, das Fenster muss durchklickbar sein. Kennt ihr die Software Serious Samurize? Die kann das auch, also muss es doch eine Möglichkeit über das Windows API geben, oder? Ich wäre schon zufrieden, wenn ich ein Fenster hätte, dass auf der Höhe des Desktops liegt und dort auch bleibt -> heißt nicht in den Vordergrund geholt werden kann. Danach bräuchte ich ein durchklickbares Fenster und dann ein Fenster ohne Border und Fenstertitel, in dem ich dann per Code "malen" kann (Texte, etc.). So viel zu meiner Wunschliste...

Gruß

Verfasst: 23.02.2006 14:31
von AND51
Könnte man nicht einfach bei einem Linksklick die Mausposition abfragen und dann das Fenster verstecken oder an die Seite schieben, den Linksklick nochmals auf derselben, vorher abgefragten Mausposition simulieren?

Würde doch auch gehen, oder?

Verfasst: 23.02.2006 14:51
von Zaphod
ich habe schon programme gesehen, die direkt auf den "echten" desktop zeichnen, also hinter den icons und auch keine auswirkungen auf andere programme hatten (keine clicks klaute).
ich weiß nicht genau wie das gemacht wird, aber ich würde wetten das geht über hooks auf die funktionen, die den desktop zeichnen.

Verfasst: 23.02.2006 14:57
von ts-soft
Auf eine Copie des hintergrundbildes Zeichnen und dieses Austauschen.
Dann nur noch die Maustasten und koordinaten checken.

Verfasst: 23.02.2006 15:06
von Daniel P.
Wenn ich aber solche Sachen wie CPU-Auslastung anzeigen möchte, dann kann ich nicht immer das Hintergrundbild austauschen. Und das "Durchgeben" eines Klicks, indem man das Fenster kurz ausblendet, ist auch doof. Immerhin würde dann die ganze Zeit das Fenster blinken, wenn man darauf herumklickt...