Anwendung hinter den Icons am Desktop ??

Für allgemeine Fragen zur Programmierung mit PureBasic.
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

Das ganze was bobobo gemacht hat geht auch kürzer...:

Code: Alles auswählen

InitSprite()
hwnd=FindWindow_("Progman",0)

OpenWindow(0,20,20,100,100,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,"seas!")
a=WindowID()
dcm=GetWindowDC_(a)
dc=GetWindowDC_(hwnd)
Dim window(100,100)
OpenLibrary(0,"user32")
Repeat
  CallFunction(0,"PrintWindow",a,dc,0)
Until WindowEvent()= #PB_Event_CloseWindow
aber das nützt uns ja alles nix...
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

orange-blue hat geschrieben:Das ganze was bobobo gemacht hat geht auch kürzer...
wobei dein code nich das selbe macht.

was mich bei dem code von bobobo etwas wundert ist das es bei mir ab und zu mal im hintergrund zu sehen ist (mit leichten fehlern die man aber beheben kann) und beim nächsten test dann mal wieder nix zu sehen ist wobei das fenster wohl schon da ist ?!
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3875
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

nicolaus hat geschrieben:
orange-blue hat geschrieben:Das ganze was bobobo gemacht hat geht auch kürzer...
wobei dein code nich das selbe macht.

was mich bei dem code von bobobo etwas wundert ist das es bei mir ab und zu mal im hintergrund zu sehen ist (mit leichten fehlern die man aber beheben kann) und beim nächsten test dann mal wieder nix zu sehen ist wobei das fenster wohl schon da ist ?!
das muss nicht wundern .. das ist normal weil der Kram nicht komplett ist.

das showwindow_() ist irgendwie nicht richtig. :|


Man müsste nun noch einmal n Screenrefresh machen und dann in das Fenster reinmalen (möglichst transparent). Mein Hirn ist allerdings gerade offline. :mrgreen:
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

was mir aufgefallen ist, ist das bei beiden methoden, nicht nochmal drübergezeichnet werden kann. sobald man ein anderes fenster maximirt und wieder minimiert, ist der desktop wie er vorher war.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

is mir auch aufgefallen. man müßte das dann wohl selber immer updaten wenn ein event auftritt ???
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3875
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

nicht nur wenn ein event auftritt .. man braucht dafür ne ständig rennende Routine (thread) die da was draufmalt. Events werden für dieses Fenster ignoriert werden müssen (?!?).

Zmatrix funktioniert übrigens auch so.

Ich hab hier noch das Problem in das Fenster reinzumalen .. irgendwie finde ich nicht die "Verwnadlungsformel" um das Teil korrekt anzusprechen. Wenn ich als Ausgabe getdc_(hWndMain) nehme dann malt er über die Icons .. das mag am benutzten showwindow_() liegen.

Vermutlich fehlt ne Anweisung die den aktuellen Hintergrund ersetzt durch das Fenster hWndMain ..

Bastelstunde :|

Code: Alles auswählen

Global hWndMain

Procedure maler()
  Debug hWndMain
  r.RECT
  
  r\left=0
  r\top=100
  r\right=150
  r\bottom=150
  Repeat
    SetBkColor_(GetDC_(hWndMain),RGB(16,2,2))
    DrawText_(GetDC_(hWndMain),"TESTESTESTETSTETER$TZERTZRTZ",20,r,#DT_BOTTOM)
    Delay(10)
  ForEver
EndProcedure


Procedure WindowCallback(Window, message, wParam, lParam)
    Select message
    Case #WM_CLOSE
        If MessageBox_(Window, "Wirklich beenden?", "EXIT", #MB_YESNO) = #IDYES
            DestroyWindow_(Window)
        Else
            Result  = 0
        EndIf
    Case #WM_DESTROY
        PostQuitMessage_(0)
        Result  = 0
    Default
        Result  = DefWindowProc_(Window, message, wParam, lParam)
    EndSelect
    ProcedureReturn Result
EndProcedure

#Style  = #WS_VISIBLE | #WS_BORDER | #WS_SYSMENU
#StyleEx  = #WS_EX_TOOLWINDOW | #WS_EX_OVERLAPPEDWINDOW
#SM_XVIRTUALSCREEN = 76
#SM_YVIRTUALSCREEN=77

#SM_CXVIRTUALSCREEN = 78
#SM_CYVIRTUALSCREEN = 79
#COINIT_APARTMENTTHREADED =2

WindowClass.s  = "MeinFenster"

gscreenWidth = GetSystemMetrics_(#SM_CXVIRTUALSCREEN)
If gscreenWidth = 0
    gscreenWidth = GetSystemMetrics_(#SM_CXSCREEN)
EndIf
gscreenHeight = GetSystemMetrics_(#SM_CYVIRTUALSCREEN)
If gscreenHeight = 0
    gscreenHeight = GetSystemMetrics_(#SM_CYSCREEN)
EndIf
gscreenTop = GetSystemMetrics_(#SM_YVIRTUALSCREEN)
gscreenLeft = GetSystemMetrics_(#SM_XVIRTUALSCREEN)

;gscreenWidth = GetSystemMetrics_(#SM_CXSCREEN)
;gscreenHeight = GetSystemMetrics_(#SM_CYSCREEN);

ValidRGN = CreateRectRgn_(0,0,gscreenWidth,gscreenHeight);

ghProgman = FindWindow_("Progman", "Program Manager")
If ghProgman<>0
  Debug "parent as Progman-Class:"+Str(ghProgman)
  ghShellDLL = FindWindowEx_(ghProgman, 0, "SHELLDLL_DefView", 0)
  Debug "ghShellDll :"+Str(ghShellDLL)
  ghSysListView = FindWindowEx_(ghShellDLL,0,"SysListView32",0)
Else
  ghProgman=FindWindow_("DesktopBackgroundClass",0)
  If ghProgman <>0
    ghShellDLL=FindWindowEx_(ghProgman, 0, "DeskFolder", 0)
    ghSysListView = FindWindowEx_(ghShellDLL,0,"SysListView32",0)
    LiteStepMode = true;
  Else
    ghShellDLL=0
    ghSysListView=0
  EndIf
EndIf

wc.WNDCLASSEX
wc\cbSize  = SizeOf(WNDCLASSEX)
wc\lpfnWndProc  = @WindowCallback()
wc\hCursor  = LoadCursor_(0, #IDC_CROSS); #IDC_ARROW   = Arrow
; #IDC_SIZEALL = Size Arrow
; #IDC_CROSS   = Cross
wc\hbrBackground  = #COLOR_WINDOW + 1;CreateSolidBrush_(RGB($8F,$8F,$8F))
wc\lpszClassName  = @WindowClass

RegisterClassEx_(@wc)

;CoInitializeEx_(0,#COINIT_APARTMENTTHREADED)
;StoreOrigDesktop_()

Debug "ghSyyListView :"+Str(ghSysListView)
If LiteStepMode=#True
  Debug "litestep=#TRUE"
  If ghProgman<>0
    Debug "ghProgman<>0"
    hWndMain = CreateWindowEx_(#WS_EX_TRANSPARENT,WindowClass,"Matrix Code", #WS_CHILDWINDOW | #WS_OVERLAPPED |#WS_CLIPSIBLINGS|#WS_CLIPCHILDREN,0,0,gscreenWidth,gscreenHeight,ghProgman,0,0,0);
    EnableWindow_(hWndMain,#False)
    SetWindowPos_(hWndMain,#HWND_BOTTOM,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
  Else
    Debug "ghProgman=0"
    hWndMain = CreateWindowEx_(#WS_EX_TRANSPARENT,WindowClass,"Matrix Code", #WS_CHILDWINDOW |#WS_CLIPCHILDREN,gscreenLeft,gscreenTop,gscreenWidth,gscreenHeight,GetDesktopWindow_(),NULL,hInstance,NULL);
  EndIf
Else
  Debug "litestep #FALSE"
  If ghShellDLL <>0
    Debug "ghShellDll<>0"
		hWndMain = CreateWindowEx_(#WS_EX_TRANSPARENT,WindowClass,"Matrix Code",#WS_CHILDWINDOW |#WS_OVERLAPPED |#WS_CLIPCHILDREN,0,0,gscreenWidth,gscreenHeight,ghShellDLL,0,0,0)
    EnableWindow_(hWndMain,#False)
    SetWindowPos_(hWndMain,#HWND_BOTTOM,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
  Else
    Debug "ghShellDll=0"
    hWndMain = CreateWindowEx_(#WS_EX_TRANSPARENT,WindowClass,"Matrix Code", #WS_CHILDWINDOW |#WS_CLIPCHILDREN,gscreenLeft,gscreenTop,gscreenWidth,gscreenHeight,GetDesktopWindow_(),0,0,0)
    
  EndIf
EndIf


;hWndMain  = CreateWindowEx_(#StyleEx, WindowClass, "Test-Window", #Style, 10, 10, 200, 200, 0, 0, 0, 0)
Debug "Handle von Matrix-Code-Fenster:"+Str(hWndMain)

CreateWindowEx_(0, "Static", "", #WS_CHILD |#WS_EX_TRANSPARENT| #WS_VISIBLE | $12, 1, 1, 102, 22, hWndMain, 0, 0, 0)
For i= 1 To 5
;  CreateWindowEx_(0, "Button", "Button "+Str(i), #WS_CHILD  |#WS_EX_TRANSPARENT|#WS_VISIBLE, 10, 20*i, 100, 20, hWndMain, 0, 0, 0)
Next i
CreateThread(@maler(),0)

ShowWindow_(hWndMain,  #SW_SHOWDEFAULT)
;ShowWindow_(hWndMain,  SW_RESTORE	)
UpdateWindow_(hWndMain);
;For i= 0 To 255
;  Debug GetDeviceCaps_(GetDC_(0),i)
;Next i
Debug "setcliprgn"
Debug SelectClipRgn_(hWndMain,ValidRGN)



;DrawText_(GetDC_(hWndMain),"TESTESTESTETSTETER$TZERTZRTZ",20,r,#DT_BOTTOM)
MessageRequester("","-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------",0)
End

While GetMessage_(msg.MSG, #Null, 0, 0 )
    TranslateMessage_(msg)
    DispatchMessage_(msg)
Wend
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Justy
Beiträge: 131
Registriert: 10.09.2004 13:31
Wohnort: Feldbach / Steiermark / Österreich
Kontaktdaten:

Beitrag von Justy »

Hallo!
Ich denke ich weiß wieso eure ganzen diskussionen hier NICHTS bringen:

Winamp AVS (Milkdrop auch) überlagert schlicht und einfach eine bestimmte farbe mit dem gerenderten bild und setzt dann das hintergundbild auf ein bild mit dieser farbe!
Probiert mal im AVS in den Display-Optionen eine häufige farbe, z.b. schwarz, zu nehmen und startet dann irgendein programm das irgendeinen text anzeigt: jeder schwarze pixel wird mit der visualisierung überlagert!

Fragt mich jetzt nur nicht wie das geht...

mfg. Justy
Am Anfang erschuf der Mensch Gott.
Friedrich Nietzsche
mipooh
Beiträge: 226
Registriert: 12.12.2004 04:49
Kontaktdaten:

Beitrag von mipooh »

Code: Alles auswählen

Result = RunProgram(FileName$ [, Parameter$, WorkingDirectory$ [, Flags]])
Description

Launches an external program. The 'FileName$' should include its path. If the returned 'Result' is 0, the command can't be launched.

Flags is optional and can be a combination of the following values:
1: Wait until the launched program quits
2: Launch the program in invisible mode
Gruss
Mipooh

Uppsss, übersehen dass es mehrere Seiten zu diesem Thread gab...
Kann man seine Beiträge nicht löschen?
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3875
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

Früher war der letzte Eintrag immer löschbar..

everything flows.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten