![]() |
Bildschirmschoner programmieren: Previewfenster?
Ich habe vorhin zufällig gelesen, wie einfach es ist, einen Bildschirmschoner selbst zu programmieren. Man braucht ja lediglich eine Exe in Scr umzubenennen und auf gewisse Parameter reagieren, mit denen Windows einen Bildschirmschoner startet.
/c = Konfigurieren /s = Starten Nun habe ich durch Rumprobieren herausgefunden, dass Windows das Programm jedes Mal, wenn ein Preview des Bildschirmschoners in diesem kleinen Fensterchen angezeigt werden soll, mit dem Parameter /p aufruft. Als zweiter Parameter wird eine Zahl mitgeliefert, bei der es sich wohl offensichtlich um irgendein Handle handelt. Aber was genau fange ich damit jetzt an? Um was für ein Objekt handelt es sich dabei und wie kann ich mit ihm kommunizieren? Hat da jemand zufällig eine Ahnung oder sogar Erfahrung mit? :dp: |
Re: Bildschirmschoner programmieren: Previewfenster?
einfach mal showwindow auf das handle anwenden und schauen was verschwindet... Ich könnte mir vorstellen das du das handle als parent bei deinem programm angeben musst damit es in der vorschau angezeigt wird.
[Edit]Vielleicht ist es auch das Handle auf die Canvas für die Vorschau, einfach mal bissl mit dem handle rumspielen...[/Edit] |
Re: Bildschirmschoner programmieren: Previewfenster?
Also an dieser Stelle kann ich doch spontan weiterhelfen, bin nämlich gerade an derselben Stelle, bzw. ein Schritt weiter, weil ich zwar das Preview angezeigt, aber nicht wieder automatisch WEG bekomme...
Hier erst mal, wie ich im DPR auf die Parameter reagiere (Nix wildes soweit):
Delphi-Quellcode:
Wie gesagt, alles recht einfach! Im OnCreate-Ereignis vom Preview-Fenster kommt nun folgendes:
begin
if ParamCount > 0 then begin showmessage(paramstr(1)); if (ParamStr(1) = '/s') or (ParamStr(1) = '/S') then begin Application.Initialize; Application.Title := 'Spectrum Clock'; Application.CreateForm(Tfrm_ScrSave, frm_ScrSave); Application.Run; end else if (copy(ParamStr(1),1,2) = '/c') or (copy(ParamStr(1),1,2) = '/C') then begin Application.Initialize; Application.Title := 'Spectrum Clock'; Application.CreateForm(Tfrm_Config, frm_Config); Application.Run; end else if (copy(ParamStr(1),1,2) = '/p') or (copy(ParamStr(1),1,2) = '/P') then begin Application.Initialize; Application.Title := 'Spectrum Clock'; Application.CreateForm(Tfrm_preview, frm_preview); Application.Run; end; end; end.
Delphi-Quellcode:
Der Rest bleibt dir und deinem Bildschirmschoner überlassen. Wenn mir jetzt jemand im Gegenzug helfen könnte, wie man automatisch das Fenster wieder schliessen kann, wenn der Nutzer zum Bleistift, einen anderen Schoner auswählt, wäre ich auch um ein Vielfaches glücklicher!
procedure Tfrm_preview.FormCreate(Sender: TObject);
var dispHWND: HWND; lngStyle: LongInt; DispRec: TRECT; begin dispHWND := strtoint(paramstr(2)); windows.GetClientRect(dispHWND, DispRec); lngStyle := GetWindowLong(frm_Preview.handle, GWL_STYLE); lngStyle := lngStyle or WS_CHILD; SetWindowLong(frm_Preview.handle, GWL_STYLE, lngStyle); windows.SetParent(frm_Preview.handle, dispHWND); SetWindowLong(frm_Preview.handle, GWL_HWNDPARENT, dispHWND); windows.SetWindowPos(frm_Preview.handle, HWND_TOP, 0, 0, DispRec.Right, DispRec.Bottom, SWP_NOZORDER Or SWP_NOACTIVATE Or SWP_SHOWWINDOW); end; |
Re: Bildschirmschoner programmieren: Previewfenster?
In der anhängenden Zip-Datei befindet sich der Quelltext und eine Beschreibung für die Vorlage eines Bildschirmschoners. Manchem Leser/-in mag Textteile bekannt vorkommen. Ich habe mir einige Programmteile aus dem Internet zusammengesucht.
Die Vorlage wurde mit Delphi 7 erstellt. Ich benutzte grundsätzlich Benennungen in deutscher Sprache (nicht in englischer), weil die Programmteile hierdurch lesbarer werden. In den Formen stehen keine Befehle für die Schonertätigkeit. Dieses überlasse ich der Phantasie des Programmierers. |
Re: Bildschirmschoner programmieren: Previewfenster?
Zitat:
Grüße Faux |
Re: Bildschirmschoner programmieren: Previewfenster?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
hier ein zweiter Versuch mit der Zip-Datei. |
Re: Bildschirmschoner programmieren: Previewfenster?
Hallo!
Du schreibst mal in deiner dpr CreateMutex. Wo liegt darin der Sinn? Dadurch kann man im Windows-Dialog weder auf Config noch auf Preview klicken, da dadurch eine weitere Instanz des Programmes gestartet werden müsse. Grüße Faux |
Re: Bildschirmschoner programmieren: Previewfenster?
zur Frage "Du schreibst mal in deiner dpr CreateMutex. Wo liegt darin der Sinn?..."
Ich habe beim programmieren die Erfahrung gemacht, dass beim Umschalten des Reiters innerhalb der Desktopeigenschaften das Programm wiederholt gestartet wurde. Mit dem "CreateMutex" verhindere ich dieses. Ich wünsche Euch einen guten Rutsch und ein schönes 2006. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz