German Systemzeit des PDA einstellen

FASchmidt

Member
Licensed User
Hallo,

wie kann ich aus einem Basic-Programm heraus die Systemzeit des PDAs einstellen? :sign0085:

Gruß Andreas
 

specci48

Well-Known Member
Licensed User
Hallo Andreas,

eine direkte Funktion zur Einstellung der Systemzeit bietet Basic4ppc (derzeit) leider nicht.
Falls Du dich allerdings ein wenig mit den Registry Einträgen auskennst, könnte man Datum und Uhrzeit ggf. mit Hilfe der Registry.dll ändern. Mir ist aber leider nicht bekannt, wo und wie die aktuelle Systemzeit in der Registry hinterlegt ist.


Gruß

specci48
 

MM2forever

Active Member
Licensed User
Ich bezweifle das sowetwas wie die Systemzeit über die Registry läuft...
Ich denke eher das das ein Datensegment im Ram ist das vom Prozessor ständig aktualisiert wird.
Da müsste man dann eingreifen und die Werte ändern.
Kann sei das ich Blödsinn erzähle, aber so hab ich mir das jezt mal gedacht ;)
 

MM2forever

Active Member
Licensed User
FaSchmidt - was soll mit der Anwendung bezweckt werden?
Vielleicht gibt es noch ne andere Möglichkeit.
Hatte schon nach command-line anwendungen gesucht denen man eine gewünschte Zeit übergeben könnte, welche diese dann ändert, hab aber nichts gefunden.
 

alfcen

Well-Known Member
Licensed User
Hallo,
in embeddedVB ging das so. Vielleicht hilft es jemandem weiter. Das Setzten der Systemzeit koennte zB ueber GPS erfolgen. Die Routine ist etwas umstaendlich, funktioniert jedoch unter Pocket PC 2003, WM5/6 nicht getestet.

Private Sub cmdSetClock_Click()
If Not ready Then Msgbox "GPS Data is instable at this stage.", vbInformation, " GPS Not Ready": Exit Sub
Dim st As Date
st = Int(Now) + (Mid(gga(1), 1, 2) + Mid(gga(1), 3, 2) / 60 + Mid(gga(1), 5, 2) / 3600 + (zt - sv)) / 24
If SetDeviceTime(Year(st), Month(st), Weekday(st), Day(st), Hour(st), Minute(st), Second(st), 0) Then
Msgbox "Clock set to" & vbCrLf & FormatDateTime(st, vbGeneralDate), vbInformation, " GPS Clock"
Else
Msgbox "Error when setting clock.", vbCritical, " GPS Clock"
End If
End Sub

Public Function SetDeviceTime(Year As Integer, Month As Integer, DayOfWeek As Integer, Day As Integer, Hour As Integer, Minute As Integer, Second As Integer, Millisecond As Integer) As Boolean 'for PPC clock set
Dim bs As String
Dim lRet As Long
bs = ToBinaryString(Year, CE_INTEGER) 'CE_INTEGER=2
bs = bs & ToBinaryString(Month, CE_INTEGER)
bs = bs & ToBinaryString(DayOfWeek, CE_INTEGER)
bs = bs & ToBinaryString(Day, CE_INTEGER)
bs = bs & ToBinaryString(Hour, CE_INTEGER)
bs = bs & ToBinaryString(Minute, CE_INTEGER)
bs = bs & ToBinaryString(Second, CE_INTEGER)
bs = bs & ToBinaryString(Millisecond, CE_INTEGER)
lRet = SetLocalTime(bs)
If lRet = 0 Then SetDeviceTime = False Else SetDeviceTime = True
End Function

Public Function ToBinaryString(Number As Variant, Bytes As Integer) As String 'for PPC clock set
Dim i As Integer
Dim bIsNegative As Boolean
If Bytes > 4 OR Bytes < 1 Then Exit Function
If Number < 0 Then
bIsNegative = True
Number = Number * -1
Number = Number Xor ((2 ^ (8 * Bytes - 1)) - 1)
Number = Number + 1
End If
For i = 0 To Bytes - 1
If i = Bytes - 1 AND bIsNegative Then
ToBinaryString = ToBinaryString & (ChrB(GetByteValue(Number, i) + &H80))
Else
ToBinaryString = ToBinaryString & ChrB(GetByteValue(Number, i))
End If
Next i
End Function

Public Function GetByteValue(Number As Variant, BytePos As Integer) As Long
Dim mask As Long
On Error Resume Next
If BytePos > 3 OR BytePos < 0 Then Exit Function
If BytePos < 3 Then
mask = &HFF * (2 ^ (8 * BytePos))
Else
mask = &H7F * (2 ^ (8 * BytePos))
End If
GetByteValue = Number AND mask
GetByteValue = GetByteValue / (2 ^ (8 * BytePos))
End Function
 

Filippo

Expert
Licensed User
Hallo,

ich glaube das Problem gelöst zu haben.
Hier eine DLL und mit ein Beispiel.

Ciao,
Filippo
 

Attachments

alfcen

Well-Known Member
Licensed User
Hallo Filippo,

Sieht ja praechtig aus !!! Und kinderleicht zu bedienen :sign0098:

Mein irre langer code war wohl nutzlos, da SetDeviceTime ein API Aufruf in embVB war.

Benutzt Du #Sharp or VS fuer Deine tollen DLLs?
Wenn ich damit auch mal klarkommen wuerde kaemen vielleicht weitere libraries :)

Ciao

Robert
 

alfcen

Well-Known Member
Licensed User
Bitte entschuldige meine Kleinlichkeit:
GetData = GetDate
SetData = SetDate

Ciao
Robert
 

specci48

Well-Known Member
Licensed User
Hallo zusammen,

ich will auch ein wenig kleinlich sein, daher im Anhang die zugehörige chm-Datei (bereits mit Date statt Data)


Gruß

specci48
 

Attachments

Filippo

Expert
Licensed User
Hallo specci48 und alfcen,

ich finde es super dass ihr kleinlich seid. Ich werde heute Abend die DLL berichtigen und neu posten.

Ciao und Danke,
Filippo
 

alfcen

Well-Known Member
Licensed User
Hallo Filippo und speeci48

Darf ich nochmals kleinlich sein?
In der Help wird empfohlen das object mit time. zu benennen.
Time ist ein reserved keyword in B4PPC und wird auch blau im editor :)

Es funktioniert zwar, aber der Ordnung halber waere es vielleicht besser

time.SetDate als zB. ppct.SetDate umzuschreiben.

Nichts fuer ungut

Robert
 

alfcen

Well-Known Member
Licensed User
Kein Grund fuer Entschuldigung. Das object als time zu benennen liegt ja nun wirklich sehr nahe. Haette ich anfangs vielleicht auch so gemacht :)
Vielen Dank!
 

FASchmidt

Member
Licensed User
Hallo,

vielen Dank für Eure Hilfe. Entschuldigt bitte auch dass ich so lange nicht geantwortet habe. Der Zweck meiner Frage war die doch recht ungenaue Uhr meines PDA bei einer GPS-Verbindung automatisch aktualisieren zu lassen.

Gruß Andreas
 

specci48

Well-Known Member
Licensed User
Besser spät als nie ;)
Und genau genommen haben wir hierbei alle wieder etwas (über Basic4Ppc) gelernt!
 
Top