Archiv verlassen und diese Seite im Standarddesign anzeigen : Verfügbare Bildschirmschoner
Kennt jemand eine Funktion, mit der man die verfügbaren Bildschirmschoner irgendwie aufzählen kann? Oder muss ich jetzt ganz umständlich alle Dateien mit der Endung ".scr" im Windowsverzeichnis suchen?
Patrik Graf
22.07.2002, 22:12
Hmmm... also, umständlich find ich das nicht. Da ich aber auch keine Funktion kenne die das macht, musst du es wohl so machen...
Hier ein kleiner Beispielcode in Delphi wie das wirklich ohne grossen aufwand geht.
procedure GetScreensavers(List: Array of String);
Var WinDir: PChar;
Result, Index: Integer;
SearchRec: TSearchRec;
begin
GetWindowsDirectory(WinDir,255); Index := 0;
Result := FindFirst(WinDir+'\*.scr',faAbyFile,SearchRec);
While Result = 0 Do begin
List[Index] := SearchRec.Name; Inc(Index);
Result := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;
Find ich nicht gerade umständlich... ok, wenn man versucht das in BrainFuck zu coden wird´s schon leicht umständlich, aber in jeder anderen Programmiersprache ist´s wohl ähnlich wenn nicht sogar noch leichter... :D
also das suchen ist nicht das prob aber bei themen glaub ich muss der bildschirmschoner nicht im windir liegen oder tauesche ich mich da?
Patrik Graf
23.07.2002, 09:56
Ein installierter Bildschirmschoner wir von Windows automatisch ins Windir kopiert... :D
Jan Krüger
23.07.2002, 12:19
das ist auch der grund, warum das aufbauen der bildschirmschoner-liste im control panel immer so lange dauert... das ganze windows-verzeichnis wird auf den kopf gestellt... :(
PS. ich kanns mir nicht verkneifen... hier der perl-code für die suche aller bildschirmschoner im windows-verzeichnis :D
opendir WINDIR, "c:/windows"; @scrlist = grep { /\.scr$/ } readdir(WINDIR); close WINDIR;
noch ein PS. der von Patrik Graf vorgestellte Delphi-Beispielcode wird voraussichtlich einen Speicherfehler verursachen (kein Speicher für PChar allokiert)... oder wurde das nach Delphi 3 geändert und ich hab wieder die halbe technische Entwicklung verpasst?
Felix Kaiser
23.07.2002, 12:49
Nein, hast nichts verpasst, der Herr Graf hats wirklich einfach nur vergessen ;)
Patrik Graf
23.07.2002, 13:27
Doch... ihr habt was verpasst... :D
Man kanns mit GetMem machen, oder (in diesem Fall) mit WinDir := ''; ... :D also "leerer String".
Hab ich aber vergessen reinzuschreiben...
PS: Für alle die jetzt meinen "der lügt doch! :D" ... nein, tu ich nicht. Schon hundert mal gemacht und hat auch schon hundert mal funktioniert :D
Jan Krüger
23.07.2002, 14:26
WinDir := '' hast du aber da nicht benutzt. Und die API-Funktionen erwarten immer, dass der Speicher schon reserviert ist. Hast du nicht gemacht. Also:
:P :D
PS. woher soll der Compiler bei WinDir := ''; wissen, wieviel Speicher er genau reservieren soll? PChars sind nicht dynamisch.
Patrik Graf
23.07.2002, 17:19
Original von JaSt:
woher soll der Compiler bei WinDir := ''; wissen, wieviel Speicher er genau reservieren soll? PChars sind nicht dynamisch.
Keine Ahnung wie das intern abläuft, ich weiß nur das es funktioniert... :D
also wenn du WinDir := StrFill (255, ' ');
die funktion weis ich nicht mehr die das macht!
dann funkt es weil er in den string mit 255 reinschreibt aber ich will nicht wissen wohin du mit deinem WinDir := '' hinmalt, eigenlich duerfte es gar nicht funktionieren!!!!!
Jan Krüger
24.07.2002, 12:14
xOOn: bei deiner lösung hast du dann aber einen string mit 255 leerzeichen, was auch nicht unbedingt das gewünscht ergebnis ist.
ich schlage immer noch das altbewährte getmem() oder stralloc() vor.
Felix Kaiser
24.07.2002, 17:52
Warum so'n Aufwand?
var WinDir: array[0..255] of char;
Und fertig. Ist 100% PChar kompatibel ;)
(da lob ich mir dynamische Pascalstrings :))
Jan Krüger
24.07.2002, 18:08
:mauer:
jo, das geht natürlich auch (wie in C ;)).
Also, irgendwie schweift ihr ein KLEINES WENIG vom Thema ab...
Jedenfalls danke! Auch wenn ich hauptsächlich in C++ programmiere, wird es wohl nicht so schwer umzusetzen zu sein. Ich dachte nur, ich frag mal nach, ob es einfacher geht...
@ JaSt
PChar ist ein zeiger auf einen char, ich biege den zeiger auf einen string mit 255 zeichen das ist das selbe als wenn ich 256 zeichen reserviere, naja fast das selbe, er reserviert speicher, der eigentlich als konstant gelten sollte aber wen interessierts
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.