Entwickler-Ecke
Windows API - Datumstellen - Programm Ausführen - Datum Zurückstellen
Havoc][ - Sa 08.02.03 22:48
Titel: Datumstellen - Programm Ausführen - Datum Zurückstellen
Hallo Leute.
Ich habe gerade ein doofes Programm geschrieben. Es ist auch eigentlich nur zum spielen. Aber ich habe keine Plan warums nicht so geht wie ich das will *G*.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TFrmCTWCrack.FormCreate(Sender: TObject); var neu : TSystemTime; sd, sda : String; begin // Altes Datum Zwischenspeichern. sda := DateToStr(Date); // Zeit zwischenspeichern. sd := TimeToStr(Time);
neu.wyear := 1998; neu.wmonth := 1; neu.wday := 1;
neu.whour := StrToInt(copy(sd, 1, 2)); neu.wminute := StrToInt(copy(sd, 4, 2)); neu.wsecond := StrToInt(copy(sd, 7, 2)); SetLocalTime(neu);
Sleep(5000); Try ShellExecute(0, 'open', 'Ctwpp.exe', nil, '', SW_SHOWNORMAL); finally // Altes Datum wieder setzten. neu.wday := StrToInt(copy(sda, 1, 2)); neu.wmonth := StrToInt(copy(sda, 4, 2)); neu.wyear := StrToInt(copy(sda, 7, 4));
neu.whour := StrToInt(copy(sd, 1, 2)); neu.wminute := StrToInt(copy(sd, 4, 2)); neu.wsecond := StrToInt(copy(sd, 7, 2)); SetLocalTime(neu); end end; |
Also er soll ein bestimmtes Datum setzten, das Programm ausführen (nur nen Programm das runter innen Systray klappt [aber kein delphi]) und sich das Datum was er sich gemerkt hat, wieder zurücksetzten.
Aber genau das tut er nicht mehr.
Kann mir jemand sagen was ich da falsch gemacht habe ?
Ciao Havoc][
Delete - Sa 08.02.03 22:52
Was amcht er denn statt dessen? Es könnte an dem Sleep liegen, das legt dein programm total lahm. In den 5 Sekunden macht dein Programm gar nichts.
probier das mal anstatt sleep:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure delay(msec:longint); var start,stop:longint; begin start := gettickcount; repeat stop := gettickcount; application.processmessages; until (stop - start ) >= msec; end; |
Delete - Sa 08.02.03 22:54
Bist du sicher, dass bei diesem ganzen Copy-Kram die richtigen Zahlenwerte übergeben werden? Wenn Ja, dann lautet meine Frage: welches Betriebssystem?
Unter WinNT/2000/XP musst du einer Gruppe angehören, die das Recht zum Ändern der Zeit hat. Zumindest unter WinXP genügt es nicht!, sich das Recht SE_SYSTEMTIME_NAME (denke ich) manuell zu holen.
Wie wär´s, wenn du dir eine aktuelle Version von dem Programm besorgst, das du da startest? Dann brauchst du nicht ständig die Zeit umstellen.
:wink:
Havoc][ - Sa 08.02.03 22:57
hm, das sieht mir ehrlichgesagt zu kompliziert aus.
Ich habe das sleep eigentlich nur eingebaut, weil ich dachte, das SystemDatum brauch etwas, bevor es sich 'initialisiert' hat.
Denn das auhzurufende Programm brauch unbedingt die neue Systemzeit.
Würde also heissen, wenn das Sleep() auch das ändern der Systemzeit anhält, erklärt sich natürlich auch, warum das aufzurufende Programm auf eine art fehler läuft, bzw. das SystemDatum nicht geändert wird.
Also Es kommt kein fehler, sondern das datum wird einfach nicht gestellt.
[EDIT]
Ups da war ja noch ne antwort *G*
Also:
Ich benutze Win2k - aber wenn ich das Programm _nicht_ aufrufe wird das Datum ohne Probleme gestellt. Aber mit dem aufruf und dem Try Finally Block geht es nicht mehr.
Genügend Rechte sind vorhanden.
Und der 'Copy-Krams' Funktioniert auch. Bin ihn mit dem Debbugger duchgegangen..
[/edit]
Ciao Havoc][
Delete - Sa 08.02.03 23:03
Was ist daran komplizeirt? Kopier den Code gleich hinter das Wort Implementation und dann ersetzt du das Sleep(5000) durch Delay(5000).
Sind die 30 Tage für das Shareware Programm abgelaufen oder wie? :wink:
Delete - So 09.02.03 09:38
Mal ganz abgesehen davon -
Wenn du die Funktion "SetLocalTime" gefunden hast (in der Hilfe, oder sonst wo), dann müsstest du doch eigentlich auch über ihr Gegenstück gestolpert sein, mit dem du die aktuelle Zeit und das aktuelle Datum ermitteln kannst.
Das würde die ganzen Copy-Anweisungen vollkommen überflüssig machen.
Übrigens: "SetLocalTime" ist eine Funktion mit Bool-Rückgabeergebnis. Das heißt, wenn die Funktion erfolgreich ausgeführt werden konnte, ist das Ergebnis TRUE. Das wäre doch ein Ansatzpunkt, um möglicherweise auf das Sleep verzichten zu können?!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!