Hallo zusammen,
auf Basis vom ursprünglichen Thread habe ich mich daran gemacht, eine ähnliche Anwendung zu stricken. Bei mir soll das jedoch nicht mit phpmyadmin, sondern mit SQuirreL SQL Client gehen.
Die Anwendung startet als Systemtrayanwendung. Mit der Tastenkombination Alt + W wird ein Unixtimestamp als Windowszeit angezeigt, mit der Tastenkombination Alt + U wird aus einem Windows Datum ein Unixtimestamp.
Folgende kleine Probleme habe ich noch:1.) Wenn ich einmal Alt + U gedrückt habe und dann mit X die GUI wieder schließe, kann ich die Tastenkombination Alt + W oder Alt + U nicht mehr aktivieren, obwohl die Anwendung noch im Systemtray läuft
2.) Wenn ich mit Alt + Shift + U den Unixtimestamp ausrechnen will, dann bekomme ich das beim ersten mal sauber hin. Wenn ich jedoch ein zweites unterschiedliches Datum auswähle, sehe ich beim drücken der Schaltfläche, das sich das Windowsdatum und der Unixtimestamp ändert, jedoch nach ca. 1 Sekunden wenn ich mit der Maus über das Inputfeld fahre, springt der Unixtimestamp wieder auf die Zeit der ersten Abfrage zurück. Da ich den Code nochmals neu strukturiert habe, kann ich sagen, das dieser Fehler irgendwo in der Func _win2unix() stecken muss (davon gehe ich mal aus)
Anbei noch der Code (ACHTUNG - Code wurde seit Veröffentlichung komplett ausgetauscht):
Spoiler anzeigen
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <UnixTimeMod.au3>
HotKeySet ("^!w","_unix2win")
HotKeySet ("^!u","_win2unix")
;Tray-Menü anpassen
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1)
Global $MyDateGUI, $GesetzteWindowsZeit, $date, $UnixButton, $MyUnixTime, $ErrechneteUnixZeitLabel, $ErrechneteUnixZeitInput, $aboutitem, $exititem, $text, $result
[/autoit] [autoit][/autoit] [autoit]$aboutitem = TrayCreateItem("Über")
TrayItemSetState(-1, $TRAY_UNCHECKED)
TrayItemSetOnEvent(-1, "Ueber")
TrayCreateItem("")
$exititem = TrayCreateItem("Beenden")
TrayItemSetState(-1, $TRAY_UNCHECKED)
TrayItemSetOnEvent(-1, "ExitEvent")
TraySetState()
;DLL öffnen und Handle übergeben
$dll_handle = DllOpen("user32.dll")
;;;; Hier ist der Hauptteil des Programms ;;;;
While 1
Sleep(100)
WEnd
; Funktionen
[/autoit] [autoit][/autoit] [autoit]Func _unix2win()
ConsoleWrite("Funktion UNIX2WIN wurde aufgerufen" & @CRLF)
Sleep(250); Kurz warten
Send("^c"); Drücke Ctrl + C
$text = ClipGet(); Lese die Zwischenablage in die Variable "$text"
ClipPut(""); Lösche die Zwischenablage
$result = StringLeft($text, 13); Lese 13 Zeichen von Links
$text = StringReplace($result, ".", ""); Entferne die Punkte aus dem Resultat
;Lesbares Datum erzeugen
If StringLen($text) = 10 And $text <= 2145913199 Then ; Ursprünglich 1645484400, warum auch immer
$format = "%a, %d.%m.%Y - %H:%M:%S Uhr"
$datum = _StringFormatTime($format, $text)
$datum = StringReplace($datum, "Mon", "Montag")
$datum = StringReplace($datum, "Tue", "Dienstag")
$datum = StringReplace($datum, "Wed", "Mittwoch")
$datum = StringReplace($datum, "Thu", "Donnerstag")
$datum = StringReplace($datum, "Fri", "Freitag")
$datum = StringReplace($datum, "Sat", "Samstag")
$datum = StringReplace($datum, "Sun", "Sonntag")
Else
$datum = "Kein Timestamp Format erkannt!"
EndIf
;Ergebnis bis zur nächsten relevanten Mausbewegung (10px) oder Mausklick anzeigen
ToolTip($datum)
$init_pos = MouseGetPos()
$init_pos_x = $init_pos[0]
$init_pos_y = $init_pos[1]
While 1
$current_pos = MouseGetPos()
$current_pos_x = $current_pos[0]
$current_pos_y = $current_pos[1]
If (($init_pos_x - $current_pos_x) * - 1 >= 10 Or ($init_pos_y - $current_pos_y) * - 1 >= 10) Or _IsPressed(01, $dll_handle) Then
ToolTip("")
ExitLoop
Sleep(50)
EndIf
WEnd
EndFunc
Func _win2unix()
ConsoleWrite("Funktion WIN2UNIX wurde aufgerufen" & @CRLF)
Local $DTM_SETFORMAT_, $style
$MyDateGUI = GUICreate("UnixZeit", 200, 200, (@DesktopWidth / 2) - 100, 200); GUI erzeugen
$date = GUICtrlCreateDate(-1, 10, 10, 185, 20); Datumsauswahl Control erzeugen
ConsoleWrite(GUICtrlRead($date) & " nach der ersten Deklaration" & @CRLF)
$DTM_SETFORMAT_ = 0x1032 ; $DTM_SETFORMATW
$style = "yyyy/MM/dd HH:mm:ss"
$Label01 = GUICtrlCreateLabel("Bitte Umrechnungsdatum auswählen:", 10, 50, 200, 20); Label erzeugen
$UnixButton = GUICtrlCreateButton("Unixzeit ausrechnen", 50, 80, 110, 20); Schaltfläche erzeugen
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE ; Wenn X gedrückt wird, wird GUI geschlossen, die Anwendung läuft aber weiter.
GUIDelete($MyDateGUI)
Case $UnixButton; Wenn Schaltfläche gedrückt wird, wird das Windows Zeitformat ins UnixZeitFormat umgerechnet
GUICtrlSendMsg($date, $DTM_SETFORMAT_, 0, $style);"Formatiere Datum"
ConsoleWrite(GUICtrlRead($date) & " nach der GUICtrlSendMsg" & @CRLF)
$GesetzteWindowsZeit = GUICtrlCreateLabel("Windowszeit: " & GUICtrlRead($date), 10, 120, 200, 20); Zeige zur Kontrolle das gewählte Windows Datum
ConsoleWrite(GUICtrlRead($date) & " nach der Windowszeit" & @CRLF)
$MyUnixTime = _Epoch_encrypt(GUICtrlRead($date)); Convertiere dieses ins UnixZeitFormat
ConsoleWrite(GUICtrlRead($date) & " nach Epoch_encrypt" & @CRLF)
$ErrechneteUnixZeitLabel = GUICtrlCreateLabel("Unixzeit (UTC / GMT): ", 10, 160, 150, 20);Erzeuge Label
$ErrechneteUnixZeitInput = GUICtrlCreateInput("", 120, 160, 75, 18); Erzeuge Inputfeld, damit der Zeitstempel später kopiert werden kann.
GUICtrlSetData($ErrechneteUnixZeitInput, $MyUnixTime)
ConsoleWrite($MyUnixTime & " $MyUnixTime" & @CRLF)
GUISetState(@SW_SHOW); Aktualisiere die GUI
$MyUnixTime = ""
EndSwitch
WEnd
EndFunc
Func ExitEvent()
Exit
EndFunc ;==>ExitEvent
Func Ueber()
MsgBox(64, "Information", "Mit dieser Anwendung kann man Zeitstempel vom Unix Format ins Windows Format und umgekehrt convertieren" & @CRLF & @CRLF & "von Unix nach Windows:" & @CRLF & "1. Markieren Sie die Unixzeit" & @CRLF & '2. Drücken Sie die Tasten "ALT" und "STRG" und "w"' & @CRLF & "3. Die Zeit wird als Tooltip angezeigt" & @CRLF & @CRLF & "von Windows nach Unix:" & @CRLF & '1. Drücken Sie die Tasten "ALT" und "STRG" "u"' & @CRLF & "2. Wählen Sie ein Datum aus" & @CRLF & '3. Drücken Sie die Schaltfläche"Unixzeit ausrechnen"')
EndFunc ;==>Ueber
Func _EPOCH_decrypt($epoch_time)
[/autoit] [autoit][/autoit] [autoit]Local $Day2Add = Int($epoch_time / 86400)
Local $iTimeVal = Mod($epoch_time, 86400)
If $iTimeVal < 0 Then
$Day2Add -= 1
$iTimeVal += 86400
EndIf
Local $i_wFactor = Int((573371.75 + $Day2Add) / 36524.25)
Local $i_xFactor = Int($i_wFactor / 4)
Local $i_bFactor = 2442113 + $Day2Add + $i_wFactor - $i_xFactor
Local $i_cFactor = Int(($i_bFactor - 122.1) / 365.25)
Local $i_dFactor = Int(365.25 * $i_cFactor)
Local $i_eFactor = Int(($i_bFactor - $i_dFactor) / 30.6001)
Local $asDatePart[3]
$asDatePart[2] = $i_bFactor - $i_dFactor - Int(30.6001 * $i_eFactor)
$asDatePart[1] = $i_eFactor - 1 - 12 * ($i_eFactor - 2 >= 13)
$asDatePart[0] = $i_cFactor - 4716 + ($asDatePart[1] < 3)
Local $asTimePart[3]
$asTimePart[0] = Int($iTimeVal / 3600)
$iTimeVal = Mod($iTimeVal, 3600)
$asTimePart[1] = Int($iTimeVal / 60)
$asTimePart[2] = Mod($iTimeVal, 60)
Return SetError(0, 0, StringFormat("%.2d/%.2d/%.2d %.2d:%.2d:%.2d", $asDatePart[0], $asDatePart[1], $asDatePart[2], $asTimePart[0], $asTimePart[1], $asTimePart[2]))
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_EPOCH_decrypt
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Epoch_encrypt($date)
[/autoit] [autoit][/autoit] [autoit]Local $main_split = StringSplit($date, " ")
If $main_split[0] - 2 Then
Return SetError(1, 0, "") ; invalid time format
EndIf
Local $asDatePart = StringSplit($main_split[1], "/")
Local $asTimePart = StringSplit($main_split[2], ":")
If $asDatePart[0] - 3 Or $asTimePart[0] - 3 Then
Return SetError(1, 0, "") ; invalid time format
EndIf
If $asDatePart[2] < 3 Then
$asDatePart[2] += 12
$asDatePart[1] -= 1
EndIf
Local $i_aFactor = Int($asDatePart[1] / 100)
Local $i_bFactor = Int($i_aFactor / 4)
Local $i_cFactor = 2 - $i_aFactor + $i_bFactor
Local $i_eFactor = Int(1461 * ($asDatePart[1] + 4716) / 4)
Local $i_fFactor = Int(153 * ($asDatePart[2] + 1) / 5)
Local $aDaysDiff = $i_cFactor + $asDatePart[3] + $i_eFactor + $i_fFactor - 2442112
Local $iTimeDiff = $asTimePart[1] * 3600 + $asTimePart[2] * 60 + $asTimePart[3]
[/autoit] [autoit][/autoit] [autoit]Return SetError(0, 0, $aDaysDiff * 86400 + $iTimeDiff)
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Epoch_encrypt
[/autoit]
Danke für Eure Hilfe