Hallo erstmal
hab heute versucht eine alarmfunktion mittels dllcall zu realisieren .
das ergebniss sollte sein, dass beim erreichen der alarm zeit die funktion
_TimerCallBackFunc die gewuenschte operation aussfuehrt...
soweit funktioniert das auch, aber mir fehlt noch eine art parameter uebergabe
um mit der funktion _TimerCallBackFunc verschiedene aufgaben zu erfuellen
zum beispiel wenn ich das ganze als alarm fuer eine wecker oder termin planer nutzen moechte
dort mehrere alarme definiert werden die verschieden aufgaben erfuellen sollen,
so kann das im moment die funktion nicht unterscheiden
da ich unerfahren mit dem umgang von dll´s bin , dachte ich mir ich frag mal besser
wuerde mich ueber etwas hilfe freuen
LG
b0ony
Spoiler anzeigen
Global Enum $TIMERID1 = 10002
Global $hGUI, $iTimer1, $hCallBack
;alarm zeit editieren
;************************************************
$alert_time_span = '17:28:00:777' ;uhr *
;$alert_date_span = '19/02/2008' *
;************************************************
$now_time_span = _get_local_time() ;'19:00:00:001' ;
$now_time_TickCount = _WinAPI_GetTickCount ()
$alert_time_msec = _Convert_To_Ticks($alert_time_span, 4, ":")
$now_time_msec = _Convert_To_Ticks($now_time_span[0], 4, ":")
If $alert_time_msec <= $now_time_msec Then
ConsoleWrite( "error :$alert_time_span => past: "& $alert_time_span & @CRLF)
$MSec_Dif = 5000
ElseIf $alert_time_msec > $now_time_msec Then
$MSec_Dif = $alert_time_msec - $now_time_msec
ConsoleWrite( "$MSec_Dif: "& $MSec_Dif& @CRLF)
EndIf
;************************************************
; hier haette ich gerne eine parameter uebergabe an die
; _TimerCallBackFunc funktion zb. alarm type (sound,popup,action,usw)
$hCallBack = DllCallbackRegister("_TimerCallBackFunc", "none", "hwnd;int;int;dword")
$iTimer1 = _WinAPI_SetTimer($hGUI, $TIMERID1, $MSec_Dif, DllCallbackGetPtr($hCallBack))
;************************************************
While 1
Sleep(1000)
WEnd
;---------------------------------------------------------|
Func _Convert_To_Ticks($TimeSpan, $iElements = 3, $iDelimter = ":") ; 11:00:00:000
Local $TParts = StringSplit($TimeSpan, $iDelimter, 1)
If Not @error Then
$iElements = $TParts[0]
;If $iElements = 1 Then $iTicks = 1000 * (3600 * $TParts)
If $iElements = 2 Then $iTicks = 1000 * (3600 * $TParts[1]) + (60 * $TParts[2])
If $iElements = 3 Then $iTicks = 1000 * ((3600 * $TParts[1]) + (60 * $TParts[2]) + $TParts[3])
If $iElements = 4 Then $iTicks = 1000 * ((3600 * $TParts[1]) + (60 * $TParts[2]) + $TParts[3]) + $TParts[4]
Return $iTicks
Else
SetError(1)
Return 0
EndIf
EndFunc ;==>_TimeToTicks
;---------------------------------------------------------|
Func _WinAPI_GetTickCount ()
Local $TickCount = DllCall("Kernel32.dll", "int", "GetTickCount")
Return $TickCount[0]
EndFunc
;---------------------------------------------------------|
Func _WinAPI_SetTimer($hWnd, $iIDEvent, $iElapse, $pTimerFunc = 0)
Local $iResult = DllCall("user32.dll", "int", "SetTimer", "hwnd", $hWnd, "int", $iIDEvent, "int", $iElapse, "ptr", $pTimerFunc)
If @error Then Return SetError(-1, -1, 0)
Return $iResult[0]
EndFunc ;==>_WinAPI_SetTimer
;---------------------------------------------------------|
Func _get_local_time()
Local $stSystemTime = DllStructCreate('ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort')
DllCall('kernel32.dll', 'none', 'GetLocalTime', 'ptr', DllStructGetPtr($stSystemTime))
$year = StringFormat('%04d', DllStructGetData($stSystemTime, 1))
$mon = StringFormat('%02d', DllStructGetData($stSystemTime, 2) )
$day = StringFormat('%02d', DllStructGetData($stSystemTime, 4))
$hour = StringFormat('%02d', DllStructGetData($stSystemTime, 5)) ; MEZ
$min = StringFormat('%02d', DllStructGetData($stSystemTime, 6))
$sec = StringFormat('%02d', DllStructGetData($stSystemTime, 7))
$msec = StringFormat('%03d', DllStructGetData($stSystemTime, 8))
local $sys_date[2]
$sys_date[0] = $hour&":"&$min&":"& $sec &":"& $msec
$sys_date[1] = $hour&":"&$min&":"& $sec &":"& $msec &" "& $day &"/"& $mon &"/"& $year
$stSystemTime = 0
Return $sys_date
EndFunc ;==>_sys_time
;---------------------------------------------------------|
Func _TimerCallBackFunc($hWnd, $Msg, $iIDTimer, $dwTime)
$test_time = _get_local_time()
ConsoleWrite( "hWnd : " & $hWnd & " Msg : " & $Msg & " iIDTimer : " & $iIDTimer & " dwTime : " & $dwTime &" $test__time : "& $test_time[1] & @CRLF)
;
_WinAPI_KillTimer($hGUI, $iTimer1)
DllCallbackFree($hCallBack)
exit
EndFunc ;==>_TimerCallBackFunc
;---------------------------------------------------------|
Func _WinAPI_KillTimer($hWnd, $iIDEvent)
Local $iResult = DllCall("user32.dll", "int", "KillTimer", "hwnd", $hWnd, "int", $iIDEvent)
If @error Then Return SetError(-1, -1, 0)
Return $iResult[0] <> 0
EndFunc ;==>_WinAPI_KillTimer
;---------------------------------------------------------|