In AutoIt mit PID steuern

09/19/2011 20:21 .Pro#1
Gibt es in AutoIt eine Möglichkeit, einen Prozess, der im Hintergrund (nicht das aktive Fenster) läuft, mit der PID zu steuern? Ich will nämlich einen Bot schreiben, der an ein mehrmal geöffnetes Programm Dinge Sendet und Mausklicks simuliert. (es soll an alle Prozesse das gleiche sein, wenns weiterhilft [ein Prozess soll andere Dinge machen als die andern])

MFG .Pro
09/19/2011 20:45 bollen#2
Quote:
Originally Posted by .Pro View Post
Gibt es in AutoIt eine Möglichkeit, einen Prozess, der im Hintergrund (nicht das aktive Fenster) läuft, mit der PID zu steuern? Ich will nämlich einen Bot schreiben, der an ein mehrmal geöffnetes Programm Dinge Sendet und Mausklicks simuliert. (es soll an alle Prozesse das gleiche sein, wenns weiterhilft [ein Prozess soll andere Dinge machen als die andern])

MFG .Pro
PID=Process identifier
Der PID ist ein Schlüssel aus Zahlen mit dem man exakt einen Prozess indentifizieren kann
Code:
WinGetProzess()
gibt dir den PID eines Prozesses aus (Dem du jedoch, bei mehreren gleichnamigen Prozessen , auch richtig deklarieren must z.B. mit
Code:
WinGetProzess("[ACTIVE]" ,"evt. TEXT")
WinGetProzess("[LAST]" ,"evt. TEXT")
oder mit Text der nur zu einem Fenster passt
WinGetProzess("" ,"DerText")
Um an Minimierte Fenster Tastenanschläge zu senden verwendet man am besten
Code:
ContrlSend( "title", "text", controlID, "string")
nur mal so aus dem Kopf
09/20/2011 06:07 .Pro#3
danke, aber gibt es eine möglichkeit, controlsend mit der pid zu sagen werlches fenster?
09/20/2011 09:09 uragan#4
[Only registered and activated users can see links. Click Here To Register...]

aber versuchen kannste natürlich mit:


PHP Code:
Func _GetHwndFromPID($PID)
    
$hWnd 0
    $stPID 
DllStructCreate("int")
    Do
        
$winlist2 WinList()
        For 
$i 1 To $winlist2[0][0]
            If 
$winlist2[$i][0] <> "" Then
                DllCall
("user32.dll""int""GetWindowThreadProcessId""hwnd"$winlist2[$i][1], "ptr"DllStructGetPtr($stPID))
                If 
DllStructGetData($stPID1) = $PID Then
                    $hWnd 
$winlist2[$i][1]
                    
ExitLoop
                
EndIf
            EndIf
        
Next
        Sleep
(100)
    
Until $hWnd <> 0
    
Return $hWnd
EndFunc 
;==>_GetHwndFromPID