pid 怎么转 handle 啊
pid 怎么转 handle 啊 谢谢各位,很基础的问题了想最大化指定进程的窗口
$pid=ProcessExists("acad.exe")
WinActivate (handle ) 这个不知道怎么来 或者,怎么最大化含有 ("acad.exe")的窗口 一个进程可以有多个窗口的,如果你知道了进程,那么用 _WinAPI_EnumWindowsTop()枚举出各窗口句柄,根据句柄比对进程名,那样应改可以的 重点在思路。。怎么做~ WinGetProcess ( "title" [, "text"] ) Local $Var = WinList()
For $i = 1 to $Var
If $Var[$i] <> "" And IsVisible($var[$i]) Then
$avArray[$i] = WinGetProcess($Var[$i]) ; Get all visible title PID.
If $PID = $avArray[$i] Then ;MATCH TEH KNOWN PID
$Titile = $Var[$i]
WINGETHANDLE($Titile)
EndIf
EndIf
Next
EndFunc
Func IsVisible($handle)
If BitAnd( WinGetState($handle), 2 ) Then
Return 1
Else
Return 0
EndIf
EndFunc Func fn_GetWinHandleFromPID($iPID)
;获取PID所属窗口句柄
Local $ahResult = [,["",""]]
ReDim $ahResult
Local $ahWnd = WinList()
For $i = 1 To $ahWnd Step 1
If WinGetProcess($ahWnd[$i]) == $iPID Then
$ahResult += 1
ReDim $ahResult[$ahResult + 1]
$ahResult = $ahWnd[$i]
$ahResult = $ahWnd[$i]
EndIf
Next
Return($ahResult)
EndFunc 补充一句,因为个人喜好的原因,上面的函数和winlist的返回结果有些不一样.
fn_GetWinHandleFromPID($iPID)的返回结果:
$ahResult = 窗口数量
$ahResult = 第一个窗口句柄
$ahResult = 第一个窗口标题
$ahResult = 第二个窗口句柄
$ahResult = 第二个窗口标题 #Include <WinAPIEx.au3>
_WinAPI_EnumProcessWindows(pid, 是否可见)
这个函数是调用枚举制定进程的窗口。使用之前必须先包含WinAPIEx.au3,这个文件是默认自带的。
第一个参数是进程的PID,第二个参数:默认True为仅枚举可见窗体, False为枚举所有窗体包括不可见的.
返回值
成功: 指定进程的窗体句柄和类的二维数组.
- 数组元素数量.
- 无用
- 第一个窗体的句柄.
- 第一个窗体的类名.
- 第n个窗体的句柄.
- 第n个窗体的类名.
失败: 返回0并设置@error非0
页:
[1]