Seite 1 von 3

[Erledigt]Desktop Hintergrund DC ermitteln

Verfasst: 12.01.2021 11:56
von tft
Hallo,

ich möchte den Handler, beziehungsweise die Adresse im Speicher wissen, wo der Aktuelle Desktophintergrund zu finden ist.

Ich möchte den Desktop Hintergrund als Zeichenfläche verwenden. Jemand ne Idee?

Gruss TFT

Re: Desktop Hintergrund DC ermitteln

Verfasst: 12.01.2021 13:14
von NicTheQuick
Früher war das Window-Handle des Desktops einfach 0. Da konntest du mit GetDC_(0) einfach den Device Context des Desktops bekommen. Aber das ist alles, was ich noch weiß. Ich kann mir vorstellen, dass das unter Windows 10 heutzutage nicht mehr so einfach ist.

Re: Desktop Hintergrund DC ermitteln

Verfasst: 12.01.2021 13:15
von Mijikai

Re: Desktop Hintergrund DC ermitteln

Verfasst: 12.01.2021 15:01
von mk-soft
Wird natürlich mit dem nächsten Ausgabe überschrieben

Code: Alles auswählen

;-TOP
Define hDesktop, hDesktopDC

hDesktop = GetDesktopWindow_()
If hDesktop
  hDesktopDC = GetDC_(hDesktop)
  
  If hDesktopDC
    TextOut_(hDesktopDC, 1000, 40, "Hello, Windows!", 15)
    InvalidateRect_(hDesktop, 0, 0) 
  EndIf
  
EndIf

Re: Desktop Hintergrund DC ermitteln

Verfasst: 12.01.2021 15:51
von Derren
Interessant.
Dachte er malt auf den Hintergrund, aber er mal einfach auf den Desktop über(!) die Symbole

Re: Desktop Hintergrund DC ermitteln

Verfasst: 12.01.2021 21:22
von tft
Ich brauche den Zeiger auf die Adresse des Hintergrundbildes.
Dort kann ich dann einen eigenen eintragen.
Ich kann jetzt das Bild Verändern. Und muss dann einen Refresh befehl senden, damit die Anzeige erneuert wird.
So die Theory ......

Re: Desktop Hintergrund DC ermitteln

Verfasst: 13.01.2021 22:27
von Mijikai
tft hat geschrieben:Ich brauche den Zeiger auf die Adresse des Hintergrundbildes.
...
Schon versucht das SysListView32 bzw. WorkerW Fenster zu bekommen?

Re: Desktop Hintergrund DC ermitteln

Verfasst: 14.01.2021 14:57
von tft
äää nein ....

Re: Desktop Hintergrund DC ermitteln

Verfasst: 14.01.2021 15:10
von DarkDragon
Geht das aus dem CodeArchiv nicht mehr?

http://www.purearea.net/pb/CodeArchiv/W ... Painter.pb

Oder war das zum zeichnen darüber? (Kann es grad nicht testen, kein Windows hier)

Re: Desktop Hintergrund DC ermitteln

Verfasst: 14.01.2021 22:34
von ccode_new
Hallo!

Bekommt das jemand zum laufen?
(Das hinter die Icons gezeichnet wird)

Code: Alles auswählen

Procedure FindDTWindow()
  Protected.i hWnd, hwndWorkW, hView, h, dResult
  hwnd = FindWindow_(@"Progman"), @"Program Manager"))
  
  SendMessageTimeout_(hWnd, $052C, 0, #Null, #SMTO_NORMAL, 1000, @dResult)
  
  hwndWorkW = #Null
  Repeat
    hwndWorkW = FindWindowEx_(#Null, hwndWorkW, @"WorkerW", #Null);
    If hwndWorkW = #Null
      Continue
    EndIf
    
    hView = FindWindowEx_(hwndWorkW, #Null, @"SHELLDLL_DefView", #Null);
    If hView = #Null
      Continue
    EndIf
    
    h = FindWindowEx_(#Null, hwndWorkW, @"WorkerW", #Null)
    While h <> #Null
      SendMessage_(h, #WM_CLOSE, 0, 0)
      h = FindWindowEx_(#Null, hwndWorkW, @"WorkerW", #Null);
    Wend
    Break
    
  Until #True
  
  ProcedureReturn hWnd ;Auch schon verschiedene "WinSpy" - Handles durchprobiert! (unter Win10)
EndProcedure

Global Ecki.rect
Ecki\bottom = 10
Ecki\left = 10
Ecki\right = 110
Ecki\top = 110

Global dc = GetDCEx_(FindDTWindow(), #Null, $403)
Debug dc
If dc <> 0
  FillRect_(dc, Ecki, CreateSolidBrush_(RGB(255,0,0)))
  InvalidateRect_(dc, Ecki, 0)
  ReleaseDC_(FindDTWindow(), dc) 
EndIf