Autor Beitrag
Havoc][
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 08.02.03 22:48 
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*.

ausblenden volle Höhe 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][

_________________
January 21 2003: KEVIN FREE
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden 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;
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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][ Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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][

_________________
January 21 2003: KEVIN FREE
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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?!