Class Autoit-通过PID获取窗口类

Class Autoit-通过PID获取窗口类,class,autoit,pid,Class,Autoit,Pid,我想让Autoit在程序上按某个键,但“程序”窗口没有标题,每次启动时都会更改其类。唯一保持一致的是进程名称 因此,我的问题很简单:如何仅使用PID来获取Windows类?这有帮助吗 #include <Array.au3> #include <WinAPI.au3> Opt("WinDetectHiddenText", 1) ;0=don't detect, 1=do detect Opt("WinSearchChildren", 1) ;0=no, 1=search

我想让Autoit在程序上按某个键,但“程序”窗口没有标题,每次启动时都会更改其类。唯一保持一致的是进程名称

因此,我的问题很简单:如何仅使用PID来获取Windows类?

这有帮助吗

#include <Array.au3>
#include <WinAPI.au3>

Opt("WinDetectHiddenText", 1) ;0=don't detect, 1=do detect
Opt("WinSearchChildren", 1) ;0=no, 1=search children also
Opt("WinTextMatchMode", 2) ;1=complete, 2=quick
Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase


$a = ProcessGetId('firefox.exe')

For $i = 1 To UBound($a) - 1
    ConsoleWrite(ProcessGetWindow($a[$i]) & @CRLF)
Next

Func ProcessGetWindow($PId)
    If IsNumber($PId) = 0 Or ProcessExists(ProcessGetName($PId)) = 0 Then
        SetError(1)
    Else
        Local $WinList = WinList()
        Local $i = 1
        Local $WindowTitle = ""
        While $i <= $WinList[0][0] And $WindowTitle = ""
            If WinGetProcess($WinList[$i][0], "") = $PId Then
                $WindowTitle = $WinList[$i][0]
            Else
                $i += 1
            EndIf
        WEnd
        Return $WindowTitle
    EndIf
EndFunc   ;==>ProcessGetWindow

Func ProcessGetId($Process)
    If IsString($Process) = 0 Then
        SetError(2)
    ElseIf ProcessExists($Process) = 0 Then
        SetError(1)
    Else
        Local $PList = ProcessList($Process)
        Local $i
        Local $PId[$PList[0][0] + 1]
        $PId[0] = $PList[0][0]
        For $i = 1 To $PList[0][0]
            $PId[$i] = $PList[$i][1]
        Next
        Return $PId
    EndIf
EndFunc   ;==>ProcessGetId

Func ProcessGetName($PId)
    If IsNumber($PId) = 0 Then
        SetError(2)
    ElseIf $PId > 9999 Then
        SetError(1)
    Else
        Local $PList = ProcessList()
        Local $i = 1
        Local $ProcessName = ""

        While $i <= $PList[0][0] And $ProcessName = ""
            If $PList[$i][1] = $PId Then
                $ProcessName = $PList[$i][0]
            Else
                $i = $i + 1
            EndIf
        WEnd
        Return $ProcessName
    EndIf
EndFunc   ;==>ProcessGetName
#包括
#包括
Opt(“WinDetectHiddenText”,1);0=不检测,1=确实检测
选择(“WinSearchChildren”,1);0=否,1=同时搜索子项
Opt(“WinTextMatchMode”,2);1=完成,2=快速
选择(“WinTitleMatchMode”,2);1=开始,2=次级,3=精确,4=高级,-1至-4=无条件
$a=ProcessGetId('firefox.exe')
对于$i=1到UBound($a)-1
控制台写入(ProcessGetWindow($a[$i])&@CRLF)
下一个
Func ProcessGetWindow($PId)
如果IsNumber($PId)=0或ProcessExists(ProcessGetName($PId))=0,则
设置错误(1)
其他的
本地$WinList=WinList()
本地$i=1
本地$WindowTitle=“”
而$i处理GetWindow
Func ProcessGetId($Process)
如果IsString($Process)=0,则
设置错误(2)
ElseIf ProcessExists($Process)=0然后
设置错误(1)
其他的
本地$PList=ProcessList($Process)
本地$i
本地$PId[$PList[0][0]+1]
$PId[0]=$PList[0][0]
$i=1至$PList[0][0]
$PId[$i]=$PList[$i][1]
下一个
返回$PId
恩迪夫
EndFunc;==>ProcessGetId
Func ProcessGetName($PId)
如果IsNumber($PId)=0,则
设置错误(2)
如果$PId>9999,则
设置错误(1)
其他的
本地$PList=ProcessList()
本地$i=1
本地$ProcessName=“”
而$i ProcessGetName