Fernsteuerung mit @SW_HIDE funzt nicht?

  • Hallo allerseits!

    ICh schon wieder ;) :

    ICh habe folgendes Sktipt geschrieben:

    RegClean-Fernstuerung
    [autoit]

    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $ProgressGUI = GUICreate("Form1", 545, 25, -1, -1, $WS_POPUP, $WS_EX_TOOLWINDOW)
    $Progress = GUICtrlCreateProgress(0, 0, 545, 25)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    Run(@ScriptDir & "\Tools\regclean\Regclean.exe")

    [/autoit] [autoit][/autoit] [autoit]

    Global $ControlText = StringSplit("Loading Component Categories...|Loading Interface Identifiers...|Loading Type Library Identifiers...|Scanning Class Identifiers for errors...|Scanning Type Library Identifiers for errors...|Finished checking. Waiting to Fix Errors.", "|")

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To 6
    Do
    Sleep(100)
    Until ControlGetText("Microsoft RegClean", "", 1013) = $ControlText[$i]
    GUICtrlSetData($Progress, $i * 10)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ControlClick("Microsoft RegClean", "", 1009)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Sleep(100)
    Until ControlGetText("Microsoft RegClean", "", 1013) = "Saving corrections to the registry..."
    GUICtrlSetData($Progress, $Progress + 10)

    [/autoit] [autoit][/autoit] [autoit]

    While WinExists("Microsoft RegClean")
    ControlClick("Microsoft RegClean", "", 1008)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "", "fertig")

    [/autoit]

    Dazu folgender Anhang: autoit.de/wcf/attachment/3940/, der gehört (entpackt) nach Tools\regclean.

    Wenn ich nun die Zeile

    [autoit]

    Run(@ScriptDir & "\Tools\regclean\Regclean.exe")

    [/autoit]


    durch @SW_HIDE, @SW_LOCK, @SW_DISABLE oder so nicht zugänglich mache, funktioniert nichts. Wieso?
    wie kann ich ein Programm verdeckt fernsteuern ?(

    Danke für Eure Bemühungen! (Ein Spruchwechsel muss ja mal drin sein ;) )

  • Hier die Optionen von RegClean:

    Script geändert, verwende WinGetText:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $ProgressGUI = GUICreate("Form1", 545, 25, -1, -1, $WS_POPUP, $WS_EX_TOOLWINDOW)
    $Progress = GUICtrlCreateProgress(0, 0, 545, 25)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    Run(@ScriptDir & "\Tools\regclean\Regclean.exe /S",@ScriptDir & "\Tools\regclean")

    [/autoit] [autoit][/autoit] [autoit]

    Global $ControlText = StringSplit("Loading Component Categories...|Loading Interface Identifiers...|Loading Type Library Identifiers...|Scanning Class Identifiers for errors...|Scanning Type Library Identifiers for errors...|Finished checking. Waiting to Fix Errors.", "|")

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To 6
    Do
    Sleep(100)
    Until WinGetText("Microsoft RegClean", 1013) = $ControlText[$i]
    GUICtrlSetData($Progress, $i * 10)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ControlClick("Microsoft RegClean", "", 1009)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Sleep(100)
    Until WinGetText("Microsoft RegClean", 1013) = "Saving corrections to the registry..."
    GUICtrlSetData($Progress, $Progress + 10)

    [/autoit] [autoit][/autoit] [autoit]

    While WinExists("Microsoft RegClean")
    ControlClick("Microsoft RegClean", "", 1008)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "", "fertig")

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo!

    Erstmal danke für die Antwort!

    Es geht aber viel schneller, als es eigntlich sollte, führt der das wirklich ganz normal aus?

  • zumindest erstellt er eine UNDO-Datei :D

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Gut, dann wirds wohl stimmen!

    Wie ist das denn mit dem "Microsoft Windows Tool zum Entfernen bösartiger Software" (zu groß für einen Anhang -> aber s. c't Helper)

    Mein Source-Code ist:

    &quot;Source&quot;
    [autoit]

    #RequireAdmin
    #include <WindowsConstants.au3>
    #include <ProgressConstants.au3>
    #include <SendMessage.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $ProgressGUI = GUICreate("Form1", 545, 25, -1, -1, $WS_POPUP, $WS_EX_TOOLWINDOW)
    $Progress = GUICtrlCreateProgress(0, 0, 545, 25)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    $Risiko = 3

    [/autoit] [autoit][/autoit] [autoit]

    Run(@ScriptDir & "\Tools\windows-kb890830-v2.6.exe")

    [/autoit] [autoit][/autoit] [autoit]

    WinWait("Microsoft Windows-Tool zum Entfernen bösartiger Software - JAN 2009 ")
    Sleep(1000)

    [/autoit] [autoit][/autoit] [autoit]

    ControlClick("Microsoft Windows-Tool zum Entfernen bösartiger Software - JAN 2009 ", "", 12324)

    [/autoit] [autoit][/autoit] [autoit]

    If $Risiko < 3 Then
    ControlClick("Microsoft Windows-Tool zum Entfernen bösartiger Software - JAN 2009 ", "", 1034)
    Else
    ControlClick("Microsoft Windows-Tool zum Entfernen bösartiger Software - JAN 2009 ", "", 1033)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ControlClick("Microsoft Windows-Tool zum Entfernen bösartiger Software - JAN 2009 ", "", 12324)

    [/autoit] [autoit][/autoit] [autoit]

    $ProgressHandle = ControlGetHandle("Microsoft Windows-Tool zum Entfernen bösartiger Software","","msctls_progress321") ; Handle zur 1. Progressbar des Fensters "Fenstertitel" holen
    $LowLimit = _SendMessage($ProgressHandle,$PBM_GETRANGE,True)
    $HighLimit = _SendMessage($ProgressHandle,$PBM_GETRANGE,False)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $progressbarPOS = _SendMessage($ProgressHandle,$PBM_GETPOS) ; mit dem Handle kann dann mit _SendMessage die Position abgefragt werden.
    $prozent = ($progressbarPOS-$LowLimit)/($HighLimit-$LowLimit)*100
    GUICtrlSetData($Progress, $prozent)
    Sleep(100)
    Until $prozent = 100

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Sleep(10000)

    [/autoit] [autoit][/autoit] [autoit]

    ControlClick("Microsoft Windows-Tool zum Entfernen bösartiger Software - JAN 2009 ", "", 12325)

    [/autoit]

    Verdeckt funzt das auch nicht...

    Einmal editiert, zuletzt von MatthiasG. (14. Februar 2009 um 19:23)

  • Hallo MatthiasG,

    ich habe das mal nachgestellt.
    Also ich würde das folgendermaßen machen:
    Wenn Du das Malware-Removal-Tool laufen läßt, erstellt das Programm einen temporären Ordner in einem lokalen Laufwerk mit einer wirren Zahlen-Buchstaben Kombination.
    In diesem Ordner befindet sich auch die mrt.exe.
    Die ist es, auf die es ankommt.
    Diese kopierst Du dir in Deinen Tools-Ordner unter "\mrt".
    So kannst Du Updates auch einfach austauschen, ohne das Script nochmal anpassen zu müssen.
    (Ich habe den WinText Zusatz "Jan 2009" mal weggelassen.)
    Und hier das angepasste Script:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #include <WindowsConstants.au3>
    #include <ProgressConstants.au3>
    #include <SendMessage.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $ProgressGUI = GUICreate("Form1", 545, 25, -1, -1, $WS_POPUP, BitOr($WS_EX_TOOLWINDOW,$WS_EX_TOPMOST))
    $Progress = GUICtrlCreateProgress(0, 0, 545, 25)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $Risiko = 3
    $win = "Microsoft Windows-Tool zum Entfernen bösartiger Software"
    Run(@ScriptDir & "\Tools\mrt\mrt.exe",@ScriptDir&"\Tools\mrt",@SW_HIDE)
    GUISetState(@SW_SHOW)
    WinWait($win)

    [/autoit] [autoit][/autoit] [autoit]

    ControlClick($win, "", 12324)

    [/autoit] [autoit][/autoit] [autoit]

    If $Risiko < 3 Then
    ControlClick($win, "", 1034)
    Else
    ControlClick($win, "", 1033)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ControlClick($win, "", 12324)

    [/autoit] [autoit][/autoit] [autoit]

    $ProgressHandle = ControlGetHandle($win,"",1021) ; Handle zur 1. Progressbar des Fensters "Fenstertitel" holen
    $LowLimit = _SendMessage($ProgressHandle,$PBM_GETRANGE,True)
    $HighLimit = _SendMessage($ProgressHandle,$PBM_GETRANGE,False)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $progressbarPOS = _SendMessage($ProgressHandle,$PBM_GETPOS) ; mit dem Handle kann dann mit _SendMessage die Position abgefragt werden.
    $prozent = ($progressbarPOS-$LowLimit)/($HighLimit-$LowLimit)*100
    GUICtrlSetData($Progress, $prozent)
    Sleep(100)
    Until $prozent = 100

    [/autoit] [autoit][/autoit] [autoit]

    WinWait($win,"",5)
    ControlClick($win,"", 12325)

    [/autoit]


    PS: ich würde aber nicht nur den Scrollbalken anzeigen, sondern darunter schon immer noch einen Text, was Dein Prog gerade macht.
    Lass die User doch nicht dumm sterben... ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Das ist ja nur ein Testskript, das in ein größeres Programm eingebunden wird ;) Danke! Ich schau mir das mal in Ruhe an!

    Edit: Äh sry wenn ich so doof frag, aber wie erreiche ich den temporären Ordner ?(
    Vergiss, was ich geschrieben habe, habe es von meinem Vista System32-Ordner rausgeholt :D

    2 Mal editiert, zuletzt von MatthiasG. (15. Februar 2009 um 13:09)

  • Wie lasse ich ihn denn reagieren, wenn das Tool einen Virus entdeckt, mein Computer ist nämlich clean, und Sub7 wird con ihm nicht erkannt...

  • sieh Dir mal mit mrt.exe /? die Startparameter der Software an 8)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Und wie gebe ich dem Programm /F:Y mit, einfach in den Run-Befehl mit rein oder über _RunDOS ?

  • Run(@ScriptDir & "\Tools\mrt\mrt.exe /F:Y",@ScriptDir&"\Tools\mrt",@SW_HIDE)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)