- Сообщения
- 7,790
- Репутация
- 2,322
AutoIt: 3.3.8.1+
Версия: 1.0
Категория: Процессы, Окна
Описание: Раньше использовал для получения дескриптора процесса по дескриптору его окна связку WinGetHandle() (WinWait()) --> WinGetProcess() --> _WinAPI_OpenProcess(). Случайно обнаружил на MSDN, что есть такая API-функция.
Код/Пример:
Источник: autoit-script.ru, MSDN
Автор: madmasles
Версия: 1.0
Категория: Процессы, Окна
Описание: Раньше использовал для получения дескриптора процесса по дескриптору его окна связку WinGetHandle() (WinWait()) --> WinGetProcess() --> _WinAPI_OpenProcess(). Случайно обнаружил на MSDN, что есть такая API-функция.
Код/Пример:
Код:
Opt('MustDeclareVars', 1)
Global $hWnd, $hProcess
Run(@AutoItExe & ' /AutoIt3ExecuteLine "MsgBox(64, ''Test Script'', ''Test'')"')
$hWnd = WinWait('[Title:Test Script;Class:#32770]', '', 3)
If Not $hWnd Then Exit ConsoleWrite('Error wait window' & @LF) * 0 + 1
$hProcess = _WinAPI_GetProcessHandleFromHwnd($hWnd)
If @error Then Exit ConsoleWrite('Error _WinAPI_GetProcessHandleFromHwnd' & @LF) * 0 + 2
ConsoleWrite('Process handle: ' & $hProcess & @LF)
; #FUNCTION# ====================================================================================================
; Name...........: _WinAPI_GetProcessHandleFromHwnd
; Description....: Возвращает дескриптор процесса по дескриптору его окна.
; Syntax.........: _WinAPI_GetProcessHandleFromHwnd($h_Wnd)
; Parameters.....: $h_Wnd - десриптор окна процесса.
; Return values..: Дескриптор процесса.
; Author.........: madmasles
; Remarks........: Возвращенный дескриптор обладает следующими правами доступа:
; BitOR($PROCESS_DUP_HANDLE, $PROCESS_VM_OPERATION, $PROCESS_VM_READ, $PROCESS_VM_WRITE, $SYNCHRONIZE)
; см. https://msdn.microsoft.com/en-us/library/windows/desktop/ms684880(v=vs.85).aspx
; Link...........: http://autoit-script.ru/index.php?topic=19034, https://msdn.microsoft.com/en-us/library/windows/desktop/dd318087(v=vs.85).aspx
; Example........: Есть
; ===============================================================================================================
Func _WinAPI_GetProcessHandleFromHwnd($h_Wnd)
Local $a_Res = DllCall('oleacc.dll', 'handle', 'GetProcessHandleFromHwnd', 'hwnd', $h_Wnd)
If (@error) Or (Not $a_Res[0]) Then Return SetError(1, 0, 0)
Return $a_Res[0]
EndFunc ;==>_WinAPI_GetProcessHandleFromHwnd
Источник: autoit-script.ru, MSDN
Автор: madmasles