Screensaver-Previews anzeigen
Übersicht

![]() |
x-pressiveBetreff: Screensaver-Previews anzeigen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einen rudimentären Screensaver mit Blitz zu gestalten, ist zwar kein Problem, aber so richtig professionell wirkt das nicht, wenn kein Preview des Savers im kleinen Monitor des Bildschirmschoner-Dialogs angezeigt wird.
Jetzt frage ich mich, ob und welche Workarounds es hier geben könnte. Ich bin kein C++ler, aber vielleicht wäre folgendes möglich: 1. Ein Wrapper-Tool oder eine DLL, mit der man Blitz erweitert. 2. Ein simples, externes .EXE file, das man einfach mit einem Parameter aufruft, und das dann wenigstens ein statisches Bild oder einen kleinen AVI in diesem Fenster anzeigt. Gibt es so etwas schon bzw. kennt sich hier jemand ein bisschen mit C++ aus und kann mir sagen, ob das im Prinzip möglich wäre? |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
INpac |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also, wenn ich einen einfachen Bildschirmschoner haben will, der zufällig ein bidl wo anzeigt (wie der standart von XP), nehm ich den ressourcenhacker und replace das bild mit meinem aigenen - so hab ich einen schönen weißen apple auf schönem schwarz ![]() trägt nichts dem thema bei, ich weiß |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Daddy sagt,
Yup, gibt es, weiß aber jetzt nicht wo, auf RMs CD ist er dabei! |
||
between angels and insects |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Damit kommt man ans DC und kann alles machen wenn man
weiß mit APIs umzugehen . VB6 Code: [AUSKLAPPEN] Private Sub CheckShouldRun() ' See if another instance of the program is ' running in screen saver mode. ' If no instance is running, we're safe. If Not App.PrevInstance Then Exit Sub ' See if there is a screen saver mode instance. If FindWindow(vbNullString, APP_NAME) Then End ' Set our caption so other instances can find ' us in the previous line. frmMain.Caption = APP_NAME End Sub Public Sub Main() 'MR 25.12.2001 ' Start the program. Dim args As String Dim preview_hwnd As Long Dim preview_rect As RECT Dim window_style As Long ' Get the command line arguments. args = UCase$(Trim$(Command$)) ' Examine the first 2 characters. Select Case Mid$(args, 1, 2) Case "/C" ' Display configuration dialog. RunMode = rmConfigure Case "", "/S" ' Run as a screen saver. RunMode = rmScreenSaver Case "/P" ' Run in preview mode. RunMode = rmPreview Case Else ' This shouldn't happen. RunMode = rmScreenSaver End Select Select Case RunMode Case rmConfigure ' Display configuration dialog. frmConfig.Show Case rmScreenSaver ' Run as a screen saver. ' Make sure there isn't another one running. CheckShouldRun ' Display the cover form. Load frmMain frmMain.Left = 0 frmMain.Top = 0 frmMain.Width = Screen.Width frmMain.Height = Screen.Height frmMain.Resize Saver_Init frmMain.Show Case rmPreview ' Run in preview mode. ' Get the preview area hWnd. preview_hwnd = GetHwndFromCommand(args) ' Get the dimensions of the preview area. GetClientRect preview_hwnd, preview_rect Load frmMain ' Set the caption for Windows 95. frmMain.Caption = "Preview" ' Get the current window style. window_style = GetWindowLong(frmMain.hwnd, GWL_STYLE) ' Add WS_CHILD to make this a child window. window_style = (window_style Or WS_CHILD) ' Set the window's new style. SetWindowLong frmMain.hwnd, GWL_STYLE, window_style ' Set the window's parent so it appears ' inside the preview area. SetParent frmMain.hwnd, preview_hwnd ' Save the preview area's hWnd in ' the form's window structure. SetWindowLong frmMain.hwnd, GWL_HWNDPARENT, preview_hwnd ' Show the preview. SetWindowPos frmMain.hwnd, HWND_TOP, 0&, 0&, preview_rect.Right, preview_rect.Bottom, SWP_NOZORDER Or SWP_NOACTIVATE Or SWP_SHOWWINDOW frmMain.Width = frmMain.ScaleX(preview_rect.Right, vbPixels, vbTwips) frmMain.Height = frmMain.ScaleY(preview_rect.Bottom, vbPixels, vbTwips) frmMain.Resize Saver_Init frmMain.Show End Select End Sub Private Function GetHwndFromCommand(ByVal args As String) As Long 'MR 25.12.2001 ' Get the hWnd for the preview window from the ' command line arguments. Dim argslen As Integer Dim i As Integer Dim ch As String ' Take the rightmost numeric characters. args = Trim$(args) argslen = Len(args) For i = argslen To 1 Step -1 ch = Mid$(args, i, 1) If ch < "0" Or ch > "9" Then Exit For Next i GetHwndFromCommand = CLng(Mid$(args, i + 1)) End Function |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code beschreibt leider nur, wie man die Commandline parst, aber nicht das eigentliche Kernstück, das Blitten.
Das Prinzip ist klar, bin aber Momentan nicht sicher, wo der Unterschied zwischen einem Window Handle (Hwnd) und einem Device Context (DC) liegt. Soweit ich weiß, ist ein Handle eine Integerzahl, also die Kennung eines Fensters. Den bekomme ich ja von Window mit der CommandLine. Und einen DC kann ich doch dann mittels API-Funktion ermitteln, oder nicht? Dann müsste folgender Code doch eigentlich den Inhalt des Blitz-Fensters in das Preview-Fenster Blitten (PrevHnd ist die Nummer, die aus der CommandLine gelesen wurde, also das Handle des Preview-Fensters, denke ich): Code: [AUSKLAPPEN] Const SRCCOPY = $CC0020 hdc = API_GetDC(PrevHnd%) BlitzHwnd = API_GetActiveWindow() Blitzhdc = API_GetDC(BlitzHwnd) API_BitBlt(hdc, 0, 0, 150, 113, Blitzhdc, 0,0, SRCCOPY) API_ReleaseDC(PrevHnd, hdc) API_ReleaseDC(BlitzHwnd, Blitzhdc) Funktioniert aber leider nicht ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sieht schon gut aus aber mach mal debug ausgaben der DCs
Und Teste erstmal mit GetDesktopWindow oder blitte erstmal versetzt in dein eigenes Fenster . Gibt auch noch GetWindowDC |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier eine Test-Ausgabe der Handles und DCs:
Commandline: /p 14353858 Preview Window Handle: 14353858 Preview Window hdc: 1828788975 Blitz Window Handle: 3606124 Blitz Window hdc: 1426132087 Seltsamerweise kommen bei einigen Durchläufen immer wieder mal Minuswerte heraus, so z.B.: Commandline: /p 5440964 Preview Window Handle: 5440964 Preview Window hdc: -16706983 Blitz Window Handle: 3409516 Blitz Window hdc: -738127282 Wenn ich statt GetDC() GetWindowDC() benutze, kommt das selbe raus. Woran kann das liegen? |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sieht ok aus ,
haste mal versucht in deinem eigen Fenster zu blitten ? Vieleicht haste auch nur das falsche Handle von Blitz Fenster . GetDC() und GetWindowDC() scheinen dann wohl die selbe Funk. zu sein . |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nee du, da funktioniert nichts, weder Blitten vom Desktop ins Preview Fenster, nicht von Blitz auf den Dekstop, nicht vom Desktop ins Blitz-Fenster... manchmal flackert ganz kurz etwas für den Bruchteil einer Sekunde, aber sonst nix.
Ist das mit den Minuswerten normal? Ob's daran liegt? |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mal an den Blitz Support geschrieben ob man
an das Bitmap Handle oder DC vom Backbuffer() oder ImageBuffer() kommt wegen dem Screensaver preview ![]() Mal gespannt was die antworten ... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group