# Function Reference

# _WinAPI_OpenProcess

Returns a handle of an existing process object

#include <WinAPIProc.au3>
_WinAPI_OpenProcess ( $iAccess, $bInherit, $iPID [, $bDebugPriv = False] )

## Parameters

$iAccess | Specifies the access to the process object
$bInherit | Specifies whether the returned handle can be inherited
$iPID | Specifies the process identifier of the process to open
$bDebugPriv | [optional] Certain system processes can not be opened unless you have the debug security privilege. If True, this function will attempt to open the process with debug privileges if the process can not be opened with standard access privileges.

## Return Value

Success: | the process handle to the object.
Failure: | sets the @error flag to non-zero.

## Related

_WinAPI_CloseHandle, _WinAPI_ReadProcessMemory, _WinAPI_WriteProcessMemory

## See Also

Search OpenProcess in MSDN Library.

## Example

    #include <ProcessConstants.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPIProc.au3>
    #include <WinAPISys.au3>

    ; _WinAPI_CreateProcess() will be the best solution
    Local $iPID = Run('cmd.exe /k')
    If Not $iPID Then
        Exit
    EndIf

    ; Note, immediately open the process
    Local $hProcess
    If Number(_WinAPI_GetVersion()) >= 6.0 Then
        $hProcess = _WinAPI_OpenProcess($PROCESS_QUERY_LIMITED_INFORMATION, 0, $iPID)
    Else
        $hProcess = _WinAPI_OpenProcess($PROCESS_QUERY_INFORMATION, 0, $iPID)
    EndIf
    If Not $hProcess Then
        Exit
    EndIf

    ; Wait until the process exists, try enter "exit 6"
    While ProcessExists($iPID)
        Sleep(100)
    WEnd

    ConsoleWrite('Exit code: ' & _WinAPI_GetExitCodeProcess($hProcess) & @CRLF)

    _WinAPI_CloseHandle($hProcess)