German Systemzeit des PDA einstellen

Discussion in 'German Forum' started by FASchmidt, Sep 21, 2007.

  1. FASchmidt

    FASchmidt Member Licensed User

    Hallo,

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

    Gruß Andreas
     
  2. specci48

    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
     
  3. MM2forever

    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 ;)
     
  4. specci48

    specci48 Well-Known Member Licensed User

    :sign0156:

    specci48
     
  5. MM2forever

    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.
     
  6. alfcen

    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
     
  7. Filippo

    Filippo Expert Licensed User

    Hallo,

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

    Ciao,
    Filippo
     

    Attached Files:

  8. alfcen

    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
     
  9. alfcen

    alfcen Well-Known Member Licensed User

    Bitte entschuldige meine Kleinlichkeit:
    GetData = GetDate
    SetData = SetDate

    Ciao
    Robert
     
  10. specci48

    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
     

    Attached Files:

  11. Filippo

    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
     
  12. Filippo

    Filippo Expert Licensed User

  13. alfcen

    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
     
  14. specci48

    specci48 Well-Known Member Licensed User

    :signOops:

    ... ist erledigt ....

    :sign0013:
     

    Attached Files:

  15. alfcen

    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!
     
  16. FASchmidt

    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
     
  17. specci48

    specci48 Well-Known Member Licensed User

    Besser spät als nie ;)
    Und genau genommen haben wir hierbei alle wieder etwas (über Basic4Ppc) gelernt!
     
Loading...