AU3如何获取一个进程的句柄?
因为这个进程的窗口,没有窗口标题,所以想通过句柄来操作。但是如何通过进程获得句柄。 本想通过类来操作窗口,但却发现,原来有几个程序的类都是一样的。所以这样看来,还是只有句柄才是唯一。而句柄每次启动程序都是不一样的,所以只有通过进程名来获取句柄了。 送你个UDF
Func _GetHwndFromPID($PID)
$hWnd = 0
$stPID = DllStructCreate("int")
Do
$winlist2 = WinList()
For $i = 1 To $winlist2
If $winlist2[$i] <> "" Then
DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $winlist2[$i], "ptr", DllStructGetPtr($stPID))
If DllStructGetData($stPID, 1) = $PID Then
$hWnd = $winlist2[$i]
ExitLoop
EndIf
EndIf
Next
Sleep(100)
Until $hWnd <> 0
Return $hWnd
EndFunc ;==>_GetHwndFromPID 谢谢楼上的朋友热心解答,但可惜的是,经测试,失败了。 嗯 那个是我以前收集的 也没用过 现在试试 果然不对
又找了一个
Func _WinGetByPid($iPID)
Local $aWList = WinList()
Local $aRet =
For $iCC = 0 To $aWList
If WinGetProcess($aWList[$iCC]) = $iPID AND _
BitAND(WinGetState($aWList[$iCC]), 2) Then
ReDim $aRet
$aRet += 1
$aRet[$aRet] = $aWList[$iCC]
EndIf
Next
If $aRet = 0 Then
Return SetError(1, 0, 0)
Else
Return $aRet
EndIf
EndFunc
返回值的是句柄 原帖由 sxd 于 2008-12-21 12:46 发表 http://www.autoitx.com/images/common/back.gif
嗯 那个是我以前收集的 也没用过 现在试试 果然不对
又找了一个
Func _WinGetByPid($iPID)
Local $aWList = WinList()
Local $aRet =
For $iCC = 0 To $aWList
If W ...
谢谢,对于有些隐藏的窗口还是不行,看来要另想他法了,不过还是谢谢你!:) 虽然没有窗口标题,不过可以用窗口文本作匹配,试试 原帖由 liongodmien 于 2008-12-21 21:12 发表 http://www.autoitx.com/images/common/back.gif
虽然没有窗口标题,不过可以用窗口文本作匹配,试试
这个程序就是贱,是文化管理用的软件,没有窗口文本,没有标题,什么都没有。 那你想操作什么呢?得到进程句柄做什么用? 原帖由 sanhen 于 2008-12-21 21:39 发表 http://www.autoitx.com/images/common/back.gif
那你想操作什么呢?得到进程句柄做什么用?
得到句柄后把窗口给关了。 得到进程句柄关闭窗口?能不能直接结束进程呢。还省事。 直接结束进程应该可以吧..总不会连进程都没有吧..
最好能把那个窗口的图片贴出来看看.大家也知道具体什么样的 获取进程句柄的应该是这个。其他的自己搞定吧。
#Include <WinAPI.au3>
Local $Process,$ProcessID,$ProcesshWnd
$Process="notepad.exe"
Run($Process)
ProcessWait($Process)
$ProcessID = ProcessExists($Process)
$ProcesshWnd = _WinAPI_OpenProcess(0x001F0FFF, True, $ProcessID, False)
MsgBox(0,0, $ProcesshWnd )
_WinAPI_CloseHandle($ProcesshWnd)
$hWin=WinGetHandle("") 可以通过窗口的类名来得到句柄
SendMessageA($hWin,16,0,0) ;16是退出消息。
还有就是枚举窗口。
$list = _WinAPI_EnumWindows(True)
for $i = 1 to $list
If $list[$i]="窗口名" Then
$h=$list[$i]
EndIf
next
这种方法可以,针对那些动态创建的窗口。
页:
[1]