- Сообщения
- 8,672
- Репутация
- 2,483
Соорудил функцию (из WinAPIEx) для получения полной даты старта указанного процесса:
В 3.3.6.1 работает на ура, но вся идея в сооружений этой одной целой функций была в том, чтобы оно работало под 3.2.8.1 (да да, у меня есть ещё пару проектов на этой версий, обновляться пока нет времени, слишком много изменений).
Функция спотыкаетсясразу в начале, на OpenProcess GetProcessTimes.
У кого какие будут идеи?
Yashied, аууу :whistle:
Код:
#AutoIt3Wrapper_Autoit3Dir=D:\AutoIt_Versions\AutoIt_3.2.8.1
Sleep(2000)
$sTime = _WinAPI_GetProcessStartDate(@AutoItPID)
ConsoleWrite(@error & @LF)
ConsoleWrite('AutoIt3.exe StartTime: ' & $sTime & @LF)
Func _WinAPI_GetProcessStartDate($iPID)
If IsString($iPID) Then $iPID = ProcessExists($iPID)
Local $Access = BitOR(0x0400, 0x0010)
Local $hProcess = DllCall('kernel32.dll', 'ptr', 'OpenProcess', 'dword', $Access, 'int', 0, 'dword', $iPID)
If (@error) Or (Not $hProcess[0]) Then
Return SetError(1, 0, 0)
EndIf
Local $tFILETIME = DllStructCreate("dword Lo;dword Hi")
Local $Ret = DllCall('kernel32.dll', 'int', 'GetProcessTimes', 'ptr', $hProcess[0], 'ptr', DllStructGetPtr($tFILETIME), 'uint64*', 0, 'uint64*', 0, 'uint64*', 0)
If (@error) Or (Not $Ret[0]) Then
$Ret = 0
EndIf
DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hProcess[0])
If Not IsArray($Ret) Then
Return SetError(2, 0, 0)
EndIf
Local $tFILETIMELOCAL = DllStructCreate("dword Lo;dword Hi")
Local $Ret = DllCall('kernel32.dll', 'int', 'FileTimeToLocalFileTime', 'ptr', DllStructGetPtr($tFILETIME), 'ptr', DllStructGetPtr($tFILETIMELOCAL))
If (@error) Or (Not $Ret[0]) Then
Return SetError(3, 0, 0)
EndIf
Local $tSYSTEMTIME = DllStructCreate("word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds")
Local $Ret = DllCall('kernel32.dll', 'int', 'FileTimeToSystemTime', 'ptr', DllStructGetPtr($tFILETIMELOCAL), 'ptr', DllStructGetPtr($tSYSTEMTIME))
If (@error) Or (Not $Ret[0]) Then
Return SetError(4, 0, 0)
EndIf
$tST = $tSYSTEMTIME
Local $tData = DllStructCreate('wchar[1024]')
Local $Ret = DllCall('kernel32.dll', 'int', 'GetTimeFormatW', 'long', 0x0400, 'dword', 0, _
'ptr', DllStructGetPtr($tST), 'wstr', 'HH:mm:ss', 'ptr', DllStructGetPtr($tData), 'int', 1024)
If (@error) Or (Not $Ret[0]) Then
Return SetError(5, 0, '')
EndIf
Local $sTime = DllStructGetData($tData, 1)
$tData = DllStructCreate('wchar[1024]')
$Ret = DllCall('kernel32.dll', 'int', 'GetDateFormatW', 'long', 0x0400, 'dword', 0, _
'ptr', DllStructGetPtr($tST), 'wstr', 'dd/MM/yyyy', 'ptr', DllStructGetPtr($tData), 'int', 1024)
If (@error) Or (Not $Ret[0]) Then
Return SetError(6, 0, '')
EndIf
Local $sDate = DllStructGetData($tData, 1)
Return $sTime & ", " & $sDate
EndFunc
В 3.3.6.1 работает на ура, но вся идея в сооружений этой одной целой функций была в том, чтобы оно работало под 3.2.8.1 (да да, у меня есть ещё пару проектов на этой версий, обновляться пока нет времени, слишком много изменений).
Функция спотыкается
У кого какие будут идеи?
Yashied, аууу :whistle: