Quantcast
Channel: Ru.Board
Viewing all articles
Browse latest Browse all 1260605

AutoIT (3271) / Автоматизация работы (3)

$
0
0
Skif_off:
Подскажите, пожалуйста, что не так с объектом Scripting.Dictionary: для экономии пробую объединить функции _WinAPI_GetParentProcess() и _WinAPI_GetProcessName() (AutoIt 3.3.8.1, WinAPIEx v.3.8_3380), чтобы не перебирать дважды список процессов, [more=один из вариантов функции]
Код:
Func _WinAPI_GetParentProcessPIDAndName($PID = 0)
If Not $PID Then
$PID = @AutoItPID
EndIf
Local $oDict = ObjCreate('Scripting.Dictionary')
Local $hSnapshot = DllCall('kernel32.dll', 'ptr', 'CreateToolhelp32Snapshot', 'dword', 0x00000002, 'dword', 0)
If (@error) Or (Not $hSnapshot[0]) Then
Return SetError(1, 0, 0)
EndIf
Local $tPROCESSENTRY32 = DllStructCreate('dword Size;dword Usage;dword ProcessID;ulong_ptr DefaultHeapID;dword ModuleID;dword Threads;dword ParentProcessID;long PriClassBase;dword Flags;wchar ExeFile[260]')
Local $pPROCESSENTRY32 = DllStructGetPtr($tPROCESSENTRY32)
Local $Ret, $aResult[2], $iTmp
$hSnapshot = $hSnapshot[0]
DllStructSetData($tPROCESSENTRY32, 'Size', DllStructGetSize($tPROCESSENTRY32))
$Ret = DllCall('kernel32.dll', 'int', 'Process32FirstW', 'ptr', $hSnapshot, 'ptr', $pPROCESSENTRY32)
While (Not @error) And ($Ret[0])
$iTmp = DllStructGetData($tPROCESSENTRY32, 'ProcessID')
If $iTmp = $PID Then
$aResult[0] = DllStructGetData($tPROCESSENTRY32, 'ParentProcessID')
EndIf
If $iTmp <> 0 Then $oDict.Add($iTmp, DllStructGetData($tPROCESSENTRY32, 'ExeFile'))
$Ret = DllCall('kernel32.dll', 'int', 'Process32NextW', 'ptr', $hSnapshot, 'ptr', $pPROCESSENTRY32)
WEnd
_WinAPI_CloseHandle($hSnapshot)
$aResult[1] = $oDict.Item($aResult[0])
Return $aResult
EndFunc ;==>_WinAPI_GetParentProcessPIDAndName
[/more] выдаёт ошибку

Цитата:
Error: The requested action with this object has failed

Что не так с $oDict.Add? Подумал было, что первый процесс System с PID = 0 и такой ключ "не устраивает" объект, добавил условие

Код:
If $iTmp <> 0 Then

но всё равно ошибка. Проверял на Win7x32.


jFobos
Всё равно не очень понял :) Ну да ладно, всё равно функции WM_* беру готовые или подсказанные и проблем пока не было, а будут - начнёт доходить...

Viewing all articles
Browse latest Browse all 1260605

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>