History erstellen

  • Hallo liebe Leute,
    ich habe mal eine allgemeine Frage, ich würde gerne eine History für ein Tool erstellen. Sprich ich habe ein Remote Tool, wo ich in der Regel die Rechner Namen in ein Inputfeld schreibe und dann connecte ich auf den Rechner. Allerdings bietet dieses Tool keine History der Rechner auf denen ich war. Kann man das mit Autoit irgendwie realisieren, dass man die Einagbe aus dem Feld liest und in eine Datei schreibt und später darstellt und in das Feld zurück übertargen kann?

    Danke euch. Ich habe leider keine Idee wie ich an das Thema rann gehen kann.

  • Du kannst z.B. die Windows Messages abfangen. Einfacher ist es jedoch permament den inhalt des input controls zu lesen und sobald das tool irgendeine art bestätigung heraus wirft, die letzte gelesene eingabe zu verwerten. :)

    Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

  • Theoretisch könntest du dir ein Script schreiben, ebenfalls mit nem Inputfeld. dort schreibst du die Rechneradresse rein und bei klick auf nem Button lässt du deine Eingabe in eine Datei speichern.
    Eine INI würde sich wohl anbieten. Anschliessend startest du das Remotetool (vorzugsweise automatisch mit dem selben Button) und übergibst deinen Input an das Remotetool.
    Das wird wohl aber nur funktionieren, wenn du die Controls des Remotetools mit "Autoit Window Info" auslesen kannst.

    Nachtrag: Besser währe wohl eine Combobox, die bei Start deines Scripts automatisch die INI ausliest und somit die bereits vorhandenen / besuchten Rechner auflistet.

  • Nachdem du erfolgreich auf den Rechner connected hast, hänge den Inhalt des Inputs zusammen mit dem aktuellen Datum/Uhrzeit an eine simple Textdatei "BesuchteRechner.txt" an.
    Einzeiler

    Erweitere deine GUI um einen zusätzlichen Button "Bereits besuchte Rechner anzeigen".
    Klick auf diesen Button zeigt den Inhalt der Datei "BesuchteRechner.txt" an. Noch ein Einzeiler...

    Dann kannst du aus der Textdatei den Namen des Rechners, auf den du connecten willst, rüberkopieren in dein Input.

    ICH würde mir allerdings den Inhalt der Textdatei in ein Listview einlesen (doppelte entfernen) und von dort per Doppelklick den Connect starten 8)

  • oder du baust dir eine vorgelagerte GUI mit einer Combobox und einem OK Button in der du die Rechnernamen eintragen kannst.
    Dieses Script startet dein Remote Tool und stellt dann den connect her.

    Deine GUI -- dein Input -- deine Kontrolle.
    Die Eingaben kannst speichern und beim Start oder wann, wie auch immer einlesen und aus der ComboBox auswählen.

    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 Leute, danke für die zahlreichen Antworten. Das hört sich ja im Grunde nicht schwer an.
    Ich habe allerdings noch nie mit autoit so gearbeitet das ich Fenster anderer Programme verwerten kann.
    Ich kenne das Autoit Window Info Tool. Weiß aber nicht genau was es mir sagt, und wie ich das ganze verwerten kann.
    Gibt es da Tutorials, bzw. ich bräuchte ein paar Stickwörter wonach ich suchen kann. Es scheitert schon daran, dass ich nicht mal weiß wie die Funktion heißt um ein Inputfeld eines fremden Programmes auszulesen. Ich habe schon google bemüht aber ich bekomme immer nur Artikel dazu wie ich ein inputfeld in einem Autoitprogramm lese. Das weiss ich allerdings :)

    Hier mal ein Bild welches mir das Tool heraus geworfen hat.
    [Blockierte Grafik: http://img5.fotos-hochladen.net/uploads/frozenautoitpdj93k4bqc.png]

    2 Mal editiert, zuletzt von sec3k (12. November 2014 um 08:25)

  • So ich bin nun wieter gekommen und habe schon die Grundrisse hinbekommen.
    Leider bekomme ich es nicht hin, dass ich von der ListView einen Doppelklick mache und dann automtaisch der Inhalt des Items an das andere Programm übergeben wird via send. Das Doppelklickevent mit auslesen macht mir Probleme.

    Spoiler anzeigen

    Func readFile()
    Local $idListview = GUICtrlCreateListView("Connection Name ", 10, 10, 200, 200)
    _GUICtrlListView_Scroll($idListview, 0, 500)
    $linecount = _FileCountLines(@ScriptDir & "\data.cfg" )
    $file = FileOpen(@ScriptDir & "\data.cfg", 0 )
    For $i = $linecount to 1 Step -1
    $strFileLine = FileReadLine( $file, $i )
    Local $idItem1 = GUICtrlCreateListViewItem($strFileLine, $idListview)
    Next
    FileClose( $file )
    EndFunc
    remote()
    Func remote()
    Local $hGUI = GUICreate("Remote Histroy 1.0", 220, 300, 242, 505)
    readFile()
    $remote_name = GUICtrlCreateInput("DEBI-", 10, 220, 200, 25)
    $remote_start=GUICtrlCreateButton("Connect", 10, 250, 200, 40)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUICtrlSetImage(-1, "shell32.dll", 19)
    GUISetState(@SW_SHOW, $hGUI)
    While 1
    Switch GUIGetMsg()
    )
    Case $remote_start
    Run("C:\Program Files (x86)\SCCM_Remote\CmRcViewer.exe")
    WinWaitActive("Configuration Manager Remote Control")
    WinMenuSelectItem("Configuration Manager Remote Control","","&File","&Connect")
    send(GUICtrlRead($remote_name))
    send("{ENTER}")
    FileWrite(@ScriptDir & "\data.cfg", GUICtrlRead($remote_name) & @CRLF)
    readFile()
    If @error Then
    ContinueLoop
    EndIf
    Case $GUI_EVENT_CLOSE
    ExitLoop

    EndSwitch
    WEnd

    GUIDelete($hGUI)
    EndFunc ;==>Example

  • Ich habe hier kein SCCM, daher habe ich mit dem Remotedesktop-Tool improvisiert.
    Ich denke dass kannst Du aber leicht anpassen...

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    Local $additem, $a_ini
    Local $hGUI = GUICreate("Remote History 1.0", 220, 100, 242, 505)
    Local $h_Combo = GUICtrlCreateCombo("", 10, 10, 200, 200)
    If FileExists(@ScriptDir & "\data.cfg") = 1 Then _SetCombo()
    $remote_start = GUICtrlCreateButton("Connect", 10, 50, 200, 40)
    GUICtrlSetImage(-1, "shell32.dll", 19)
    GUISetState(@SW_SHOW, $hGUI)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $remote_start
    remotestart()
    $additem = GUICtrlRead($h_Combo)
    If _ArraySearch($a_ini,$additem) = -1 Then
    _ArrayAdd($a_ini, $additem, 1)
    $a_ini[UBound($a_ini)-1][0] = UBound($a_ini)-1
    _ArrayDisplay($a_ini)
    IniWriteSection(@ScriptDir & "\data.cfg", "Ziele", $a_ini)
    _SetCombo()
    EndIf
    Case -3
    Exit
    EndSwitch
    WEnd

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

    Func remotestart()
    Run("mstsc.exe")
    WinWait("Remotedesktopverbindung")
    ControlSend("Remotedesktopverbindung", "", "Edit1", GUICtrlRead($h_Combo))
    ; hier muss der klick auf den "Verbinden" Button rein...
    ; z.B.: ControlClick("Remotedesktopverbindung", "", "Button1")
    EndFunc ;==>remotestart

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

    Func _SetCombo()
    Local $temp
    $a_ini = IniReadSection(@ScriptDir & "\data.cfg",'Ziele')
    For $i = 0 To UBound($a_ini)-1
    $temp &= $a_ini[$i][1] & '|'
    Next
    $temp = StringTrimRight($temp,1)
    GUICtrlSetData($h_Combo, $temp)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/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. ;)

  • @Schnuffel danke für deine Hilfe, es war nicht genau das was ich wollte mit der Combobox, aber ich habe eine für mich praktikabele Lösung gefunden.

    Spoiler anzeigen


    Opt('GUIOnEventMode', 1)
    Func readFile()

    GUICtrlSetOnEvent(-1, "_LV1_ItemSelected")
    _GUICtrlListView_Scroll($idListview, 0, 500)
    $linecount = _FileCountLines(@ScriptDir & "\data.cfg" )
    $file = FileOpen(@ScriptDir & "\data.cfg", 0 )
    For $i = $linecount to 1 Step -1
    $strFileLine = FileReadLine( $file, $i )
    $strsplitted=StringSplit($strFileLine, ",")
    Local $idItem1 = GUICtrlCreateListViewItem($strsplitted[1] & "|" & $strsplitted[2] & "|" & $strsplitted[3] , $idListview)

    Next
    FileClose( $file )
    EndFunc

    Func _LV1_GetSelected()
    $toSplit=GUICtrlRead(GUICtrlRead($idListview), 1)
    $strsplitted=StringSplit($toSplit, "|")
    Run("C:\Program Files (x86)\SCCM_Remote\CmRcViewer.exe")
    WinWaitActive("Configuration Manager Remote Control")
    WinMenuSelectItem("Configuration Manager Remote Control","","&File","&Connect")
    send($strsplitted[1])
    send("{ENTER}")
    EndFunc

    Func _Connect()
    If GUICtrlRead($remote_name)=="DEBI-" Then
    MsgBox(48, "Achtung!", "Please insert a correct machine name!")
    Else
    Run("C:\Program Files (x86)\SCCM_Remote\CmRcViewer.exe")
    WinWaitActive("Configuration Manager Remote Control")
    WinMenuSelectItem("Configuration Manager Remote Control","","&File","&Connect")
    send(GUICtrlRead($remote_name))
    send("{ENTER}")
    $date=_DateTimeFormat(_NowCalc(), 2)
    $time=_NowTime()
    FileWrite(@ScriptDir & "\data.cfg", GUICtrlRead($remote_name) & "," & $time & "," &$date & @CRLF)
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($idListview))
    readFile()

    EndIf
    EndFunc
    Func _Exit()
    Exit
    EndFunc
    Func _Delete()
    FileDelete(@ScriptDir & "\data.cfg")
    _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($idListview))
    readFile()
    EndFunc
    remote()
    Func remote()
    Local $hGUI = GUICreate("SCCMHistroy 1.0", 260, 375, 242, 505)
    Global $idListview = GUICtrlCreateListView("Host | Time | Date ", 10,60, 240, 200)
    _GUICtrlListView_SetColumnWidth($idListview, 0, 111)
    $filemenu = GUICtrlCreateMenu("File")
    $delete = GUICtrlCreateMenuItem("Delete History", $filemenu)
    GUICtrlSetOnEvent(-1, "_Delete")
    readFile()
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    $remote_start=GUICtrlCreateButton("Connect", 10, 308, 240, 40)
    GUICtrlSetImage(-1, "shell32.dll", 14)
    GUICtrlSetOnEvent(-1, "_Connect")
    GUICtrlCreateButton("Connect From List",10,10, 195, 40)
    GUICtrlSetOnEvent(-1, "_LV1_GetSelected")
    GUICtrlSetImage(-1, "shell32.dll", 152)
    GUICtrlCreateButton("close", 211, 10, 40, 40, $BS_ICON)
    GUICtrlSetImage(-1, "shell32.dll", 28)
    GUICtrlSetOnEvent(-1, "_Exit")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Local $sFont = "Arial"
    GUISetFont(16, 400, "", $sFont)
    Global $remote_name = GUICtrlCreateInput("DEBI-", 10, 270, 240, 35)
    GUISetState(@SW_SHOW, $hGUI)
    While 1
    Switch GUIGetMsg()
    )
    Case $remote_start

    If @error Then
    ContinueLoop
    EndIf

    Case $GUI_EVENT_CLOSE
    ExitLoop

    EndSwitch
    WEnd

    GUIDelete($hGUI)
    EndFunc ;==>Example

  • wenn es hilft ist doch alles gut :)

    Bitte nur den Thread schließen, damit er dementsprechend markiert wird...
    Danke

    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. ;)