Auf Desktop zeichnen...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Daniel P.
Beiträge: 333
Registriert: 06.12.2005 21:49
Kontaktdaten:

Auf Desktop zeichnen...

Beitrag 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
Gruß, Daniel :? | In der Realität ist die Wirklichkeit ganz anders...

PB 4.10 (Windows XP SP 2)
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag 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
:)
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
Benutzeravatar
Daniel P.
Beiträge: 333
Registriert: 06.12.2005 21:49
Kontaktdaten:

Beitrag 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
Gruß, Daniel :? | In der Realität ist die Wirklichkeit ganz anders...

PB 4.10 (Windows XP SP 2)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Daniel P.
Beiträge: 333
Registriert: 06.12.2005 21:49
Kontaktdaten:

Beitrag 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ß
Gruß, Daniel :? | In der Realität ist die Wirklichkeit ganz anders...

PB 4.10 (Windows XP SP 2)
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
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

Beitrag von ts-soft »

Auf eine Copie des hintergrundbildes Zeichnen und dieses Austauschen.
Dann nur noch die Maustasten und koordinaten checken.
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.
Bild
Benutzeravatar
Daniel P.
Beiträge: 333
Registriert: 06.12.2005 21:49
Kontaktdaten:

Beitrag 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...
Gruß, Daniel :? | In der Realität ist die Wirklichkeit ganz anders...

PB 4.10 (Windows XP SP 2)
Antworten