Ein externes Programm auf suspend warten und wieder resumen

05/01/2013 17:33 golle12#1
Ein wunderschönen guten Tag

es tut mir Leid das ich so viele Threads auf machen weil ich nicht weiß wie ich mein Probem definieren soll :( . Also was ich möchte ein Beispiel Script :
PHP Code:
Func _ProcessSuspend($Process)
        
$processid = ProcessExists($Process)
        If 
$processid Then
                $ai_Handle 
= DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
                
$i_sucess = DllCall("ntdll.dll", "int", "NtSuspendProcess", "int", $ai_Handle[0])
                
DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
                If 
IsArray($i_sucess) Then
                        
Return 1
                
Else
                        
SetError(1)
                        Return 
0
                
EndIf
        Else
                
SetError(2)
                Return 
0
        
EndIf
EndFunc   ;==>_ProcessSuspend

Func _ProcessResume
($Process)
        
$processid = ProcessExists($Process)
        If 
$processid Then
                $ai_Handle 
= DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $processid)
                
$i_sucess = DllCall("ntdll.dll", "int", "NtResumeProcess", "int", $ai_Handle[0])
                
DllCall('kernel32.dll', 'ptr', 'CloseHandle', 'ptr', $ai_Handle)
                If 
IsArray($i_sucess) Then
                        
Return 1
                
Else
                        
SetError(1)
                        Return 
0
                
EndIf
        Else
                
SetError(2)
                Return 
0
        
EndIf
    
EndFunc   ;==>_ProcessResume

    $Process 
= "notepad.exe"
    
While 1
            
If _ProcessSuspend($Process) Then
                MsgBox
(0,"nein nein nein","so geht das nicht")
                
_ProcessResume($Process)
        EndIf
    
WEnd 
Wie wir hier sehen können soll das Programm auf Notepad aufpassen aber statt das es wartet bis er suspendet wird suspendet und resumt das Programm permanet den Prozess aber ich möchte dass, das Programm warten soll bis der Prozess gefreezt wurde und dann soll er den Prozess entfreezen(resumen) Hoffe ihr könnt mir helfen :handsdown:
05/01/2013 19:29 YatoDev#2
warum willst du das überhaupt machen ? kannst du das nicht iwie in einem script lösen ?
05/01/2013 20:48 Croco™#3
Code:
 While 1 
            If _ProcessSuspend($Process) Then 
                MsgBox(0,"nein nein nein","so geht das nicht") 
                _ProcessResume($Process) 
        EndIf 
    WEnd
_ProcessSuspend gibt nicht True oder False zurück wenn der Prozess bereits Suspendet ist sondern gibt True zurück wenn er erfolgreich Suspendet wurde (False wenn nicht) d.h., dass die If Abfrage immer Wahr ist und somit der Prozess immer Resumed wird.
05/01/2013 20:51 golle12#4
Nein nicht ich möchte ein League of Legends Bot machen welche aus 3 Komponenten besteht aus dem Bot selber einem Prozesssucher und einem Prozessresumer(obrige Beispiel) denn im Bot sind Passwörter und Benutzername gespeichert und diese sollen nicht in andere Programme eingegeben werden(z.B. in Notepad) falls jemand meinen prozessucher freezen möchte soll mein Prozessresumer diesen prozesssucher jedesmal resumen wenn jemand versuchen sollte diesen zu freezen :D.Hoffe ich konnte es verständlich rüberbringen. Doch hab ich was herausgefunden die Problematik ist dass, das Programm permanent den Prozess resumt was sich die CPU Auslastung ansteigen lässt. Hoffe du kannst mir helfen :handsdown: :awesome: :D

Quote:
Originally Posted by Croco™ View Post
Code:
 While 1 
            If _ProcessSuspend($Process) Then 
                MsgBox(0,"nein nein nein","so geht das nicht") 
                _ProcessResume($Process) 
        EndIf 
    WEnd
_ProcessSuspend gibt nicht True oder False zurück wenn der Prozess bereits Suspendet ist sondern gibt True zurück wenn er erfolgreich Suspendet wurde (False wenn nicht) d.h., dass die If Abfrage immer Wahr ist und somit der Prozess immer Resumed wird.
Also eigentlich gibt es doch _ProcessSuspend($Process) es ist Deklariert worden (siehe Script) und das was du sagt versteh ich nicht so ganz :confused:

Edit: Achso jetzt hab ich es verstanden mehrmals lesen hilft :D
kannst du mir ein Beispiel geben da ich nicht so ganz weiß wie ich das machen soll :D
05/01/2013 21:23 omer36#5
Quote:
Originally Posted by golle12 View Post
denn im Bot sind Passwörter und Benutzername gespeichert und diese sollen nicht in andere Programme eingegeben werden(z.B. in Notepad) falls jemand meinen prozessucher freezen möchte soll mein Prozessresumer diesen prozesssucher jedesmal resumen wenn jemand versuchen sollte diesen zu freezen :D.
wat?

im bot ist "dein" name+pw gespeichert und die werden im spiel eingegeben
(wohl mit Send() ) und du willst nicht, dass jmd einfach notepad öffnet und so dein pw sieht?

richtig verstanden?
05/01/2013 21:35 golle12#6
Quote:
Originally Posted by omer36 View Post
wat?

im bot ist "dein" name+pw gespeichert und die werden im spiel eingegeben
(wohl mit Send() ) und du willst nicht, dass jmd einfach notepad öffnet und so dein pw sieht?

richtig verstanden?
Ja und nein sie sind in Ini Dateien vertsteckt welche Verschlüsselt sind u.s.w aber es ist richtig.
Pw und name sind nicht nur von mir diese werden vom Benutzer in eine Inputbox eingegeben und werden als Ini gespeichert
Ich weiß schon das man die Ini Dateien entschlüsseln kann und dann auslesen kann aber der Schutz ist ja auch nur für die Random Kindys :D
05/01/2013 21:39 omer36#7
du kannst soviel verschlüsseln/suspenden wie du willst, solange du deine programme in autoit schreibst, ist alles lesbar...


dein problem kannst du ja auch anders lösen..

überprüf einfach ob das spiel im vordergrund ist.
wenn nicht - nichts schreiben..
05/01/2013 21:59 Croco™#8
ControlSend bringt abhilfe.
Damit Schreibt dein Programm nur in ein bestimmtest Fenster und niemand kann somit Notepad einfach öffnen.
05/01/2013 23:08 YatoDev#9
Und was wenn jemand das script suspended das das andere davor schuetzt suspended zu werden ? :D
05/02/2013 18:42 golle12#10
Quote:
Originally Posted by »FlutterShy™ View Post
Und was wenn jemand das script suspended das das andere davor schuetzt suspended zu werden ? :D
Tja das verrate ich nicht denn dass hab ich durchdacht sollte eins nicht ordentlich funktionieren wird alles geschlossen :)
05/02/2013 18:53 butter123#11
kannst auch nen 2. antisuspender einbauen, der das antisuspender programm vorm suspenden schützt :D
05/02/2013 19:35 YatoDev#12
Quote:
Originally Posted by butter123 View Post
kannst auch nen 2. antisuspender einbauen, der das antisuspender programm vorm suspenden schützt :D
Dieses musst du aber auch bei start vom hauptprogramm suspenden lassen damit das programm erst resumed wird wenn das andere programm das das andere programm vor dem suspenden schuetzt suspendet wurde das du dann mit einem anderen programm resumed das das programm das resumed wurde vor dem suspenden schuetzt ! :)
05/02/2013 19:58 golle12#13
Quote:
Originally Posted by »FlutterShy™ View Post
Dieses musst du aber auch bei start vom hauptproggramm suspenden lassen damit das programm erst resumed wird wenn das andere programm das das andere programm vor dem suspenden schuetzt suspendet wurde das du dann mit einem anderen programm resumed das das programm das resumed wurde vor dem suspenden schuetzt ! :)
Und wie geht das denn hier habe ich mal ein Script gemacht was leider immernoch nicht funktioniert ;)
PHP Code:
Global  $iPID,$Suspend = False
Global Const $PROCESS_SUSPEND_RESUME = 0x0800
Global Const $SYNCHRONIZE = 0x00100000
Global Const $PROCESS_TERMINATE = 0x0001
$iPID 
= "notepad.exe"
$Suspend = _SuspendProcess($iPID)
While 
1
    
If _SuspendProcess($iPID) Then
        $Suspend 
= True
    
If $Suspend = True Then
        _ResumeProcess
($iPID)
    ElseIf 
$Suspend = False Then
        Sleep
(500)
    EndIf
    EndIf
WEnd

Func _SuspendProcess 
($iPID)
    
$vDLL = DllOpen ('Kernel32.dll')
    
$vProc = DllCall ($vDLL, "hwnd", "OpenProcess", "dword", $SYNCHRONIZE + $PROCESS_SUSPEND_RESUME, "int", false, "dword", $iPID)
    
$vReturn = DllCall ("ntdll.dll", "int", "NtSuspendProcess", "hwnd", $vProc[0])
    
DllCall ($vDLL, "int", "CloseHandle", "hwnd", $vProc[0])
    Return 
$vReturn[0]
EndFunc 
Hoffe du kannst mir helfen :)
05/02/2013 20:01 YatoDev#14
Quote:
Originally Posted by golle12 View Post
Und wi feht das denn hier habe ich mal ein Script gemacht was leider immernoch nicht funktioniert ;)

Hoffe du kannst mir helfen :)
ehm naja der post da oben war nicht ernst gemeint aber ich kann dir auch so sagen das dir das nichts bringen wird soetwas zu machen .

Es gab trotzdem muss ich mal dazu sagen ein anderes command glaube ich um zu checken ob ein programm "freezed ist"
05/02/2013 20:03 golle12#15
Quote:
Originally Posted by »FlutterShy™ View Post
ehm naja der post da oben war nicht ernst gemeint aber ich kann dir auch so sagen das dir das nichts bringen wird soetwas zu machen .

Es gab trotzdem muss ich mal dazu sagen ein anderes command glaube ich um zu checken ob ein programm "freezed ist"
Meinst du das mit der" isWindHung" oder wie das auch immer heißt