1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. misterspeed

Beiträge von misterspeed

  • Progressbar zur Scriptlaufzeit einbinden.

    • misterspeed
    • 15. September 2013 um 11:48

    Du hast das Prinzip meiner Lösung nicht verstanden. Eine Schleife mit einem einzigen Durchlauf nutzt dir rein garnichts um einen Verlauf darzustellen, ist doch klar, dass hier der Verlauf sofort auf 100% gesetzt wird und dann erst deine Funktion der Outlook UDF aufgerufen wird. Die Schleifenlösung macht nur dann Sinn wenn du ohnehin etwas in Schleifen machst, bei Einzelbefehlen wie filereadtoarray oder eben dieser einen Outlook Funktion müsstest du schon innerhalb der Funktion schauen ob es dort Schleifen gibt und wenn ja dort deine Verläufe aktualisieren.

    Ich würde aber davon abraten in fremden UDF Funktionen solche Änderungen einzubauen, da du diese vermutlich auch mal in anderen Scripten nutzen willst und dort vielleicht garkeine Progressbar vorhanden ist. Für Funktionen deren Laufzeit du nicht kennst gibt es wie erwähnt wurde noch marquee Progressbars um zu signalisieren, dass hier noch etwas passiert.

    Da du irgendwas von 3 Sekunden für den ersten Teil des Scriptes gesagt hattest würde ich mir da garkeine große Mühe machen und den Verlauf nur ungefähr veranschaulichen, also z.B. so:


    Spoiler anzeigen
    [autoit]


    ; Schichtplan CSV Datei von Internetseite einlesen bzw. downloaden.
    ; -----------------------------------------------------------------------------------------------------------
    GUICtrlSetData($progressbar1,1)
    GUICtrlSetData($progressbar2,50)
    InetGet("http://www.xxxxxxxxxxx.xx/xxxxx.csv", "C:\Outlook-Temp\xxxxx.csv",1,0)
    GUICtrlSetData($progressbar1,2)
    GUICtrlSetData($progressbar2,100)
    ; -----------------------------------------------------------------------------------------------------------
    ; Schichtplan CSV Datei in ein Array lesen
    ; -----------------------------------------------------------------------------------------------------------
    GUICtrlSetData($progressbar2,50)
    _FileReadToArray("C:\Outlook-Temp\xxxxx.csv", $neu_file)
    _ArrayDelete($neu_file, 0)
    GUICtrlSetData($progressbar1,5)
    GUICtrlSetData($progressbar2,100)
    Global $n_caldays[UBound($neu_file)]
    Global $n_entryid[UBound($neu_file)]
    Global $n_subject[UBound($neu_file)]
    Global $n_start[UBound($neu_file)]
    Global $n_end[UBound($neu_file)]
    Global $n_AllDayEvent[UBound($neu_file)]
    Global $n_ReminderSet[UBound($neu_file)]
    Global $n_ReminderMinutesBeforeStart[UBound($neu_file)]
    Global $n_Categories[UBound($neu_file)]
    Global $n_split

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

    ; -----------------------------------------------------------------------------------------------------------
    ; Vorhandene Outlook Kalendereinträge in Arrays schreiben
    ; -----------------------------------------------------------------------------------------------------------
    GUICtrlSetData($progressbar2,10)
    Global $oOutlook = _OL_Open()
    GUICtrlSetData($progressbar2,20)
    Global $aFolder = _OL_FolderAccess($oOutlook, "Personal Folders\Kalender")
    GUICtrlSetData($progressbar2,30)
    Global $aItems = _OL_ItemFind($oOutlook, "Personal Folders\Kalender", $olAppointment, "", "Categories", "Schichtplan", "Start,EntryID,Subject" , "")
    GUICtrlSetData($progressbar2,80)
    _ArrayDelete($aItems, 0)
    GUICtrlSetData($progressbar1,7)
    GUICtrlSetData($progressbar2,100)

    [/autoit]

    EDIT: Wenn die Datei wirklich groß ist und der Download lange braucht schau dir wie gesagt den Background Parameter von inetget an und verwende inetgetinfo um letzlich einen Downloadverlauf zu realisieren. Der Aufwand lohnt aber nicht bei minifiles die sowieso in ein paar ms runtergeladen sind.

  • Progressbar zur Scriptlaufzeit einbinden.

    • misterspeed
    • 14. September 2013 um 13:27

    Erstmal, keine Ahnung warum man hier irgendwas in eine Datei schreiben sollte. Es reicht völlig innerhalb der Schleifen den aktuellen Prozentwert des Schleifenfortschritts als neuen Progressbar Wert zu setzen. Da du mehrere Schleifen hast bietet es sich an zwei Progressbars zu erstellen, die eine zeigt den Gesamtfortschritt an und wird immer zwischen den Schleifen um x Prozent erhöht, die andere zeigt den Verlauf der aktuell abgearbeiteten Schleife an.

    Allgemeine Kritik an deiner Vorgehensweise:

    Du verschwendest unmengen Zeit, wenn du für jeden Eintrag der erstellt, geändert oder gelöscht werden soll ein neues Outlook Objekt anlegst (ol_open / ol_close /_ol_folderaccess). Ich würde soetwas einmal zum Programmstart machen und dann solange Aktionen ausführen bis das Objekt nicht mehr benötigt wird.


    Hier ein einfaches Progressbar Beispiel:


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    Global $progressbar1, $progressbar2, $button, $wait, $s, $msg, $m

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

    GUICreate("Meine GUI Progressbar", 220, 100, 100, 200)
    $progressbar1 = GUICtrlCreateProgress(10, 10, 200, 20)
    GUICtrlSetColor(-1, 32250); Funktioniert nicht mit Windows XP Style
    $progressbar2 = GUICtrlCreateProgress(10, 40, 200, 20)
    $button = GUICtrlCreateButton("Start", 75, 70, 70, 20)
    GUISetState()
    While 1
    $msg = GUIGetMsg()
    if $msg = $button Then test()
    if $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd

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

    Func test()
    Local $aTest[30]
    GUICtrlSetData($progressbar1,0)

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

    ; schritt 1 Daten einlesen
    for $i = 1 to UBound($aTest)-1
    Sleep(200)
    GUICtrlSetData($progressbar2,(100*$i)/(UBound($aTest)-1))
    Next
    GUICtrlSetData($progressbar1,33)

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

    ; schritt 2 Daten vergleichen
    for $i = 1 to UBound($aTest)-1
    Sleep(200)
    GUICtrlSetData($progressbar2,(100*$i)/(UBound($aTest)-1))
    Next
    GUICtrlSetData($progressbar1,66)

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

    ; schritt 3 Daten eintragen
    for $i = 1 to UBound($aTest)-1
    Sleep(200)
    GUICtrlSetData($progressbar2,(100*$i)/(UBound($aTest)-1))
    Next
    GUICtrlSetData($progressbar1,100)
    EndFunc

    [/autoit]
  • Präsentation erstellen

    • misterspeed
    • 14. September 2013 um 12:17

    Also zumindestens mit dem Windows Media Center funktioniert es bei mir wenn man z.B. die CLASS als identifizierendes Merkmal angibt:

    [autoit]


    run("C:\Windows\ehome\ehshell.exe /nochrome") ; Startet WMC ohne fensterrahmen
    run("notepad") ; Startet Notepad

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

    Opt("WinTitleMatchMode",2) ; Der Titel des Fensters muss nicht vollständig angegeben werden
    $hFenster1 = WinWait("[CLASS:eHome Render Window]") ; Wartet auf das Fenster und ermittelt das Fensterhandle, Titel oder andere Details des Fenster mit Au3Info ermittelbar
    $hFenster2 = WinWait("Unbenannt - Editor") ; Wartet auf das Fenster und ermittelt das Fensterhandle, Titel oder andere Details des Fenster mit Au3Info ermittelbar

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

    If $hFenster1 = 0 or $hFenster2 = 0 Then Exit MsgBox(0,"Fehler","Mindestens eines der Fensterhandle konnte nicht ermittelt werden!" & @CRLF & $hFenster1 & @CRLF & $hFenster2)

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

    splitscreen($hFenster2,$hFenster1) ; Splitscreen Modus aktivieren
    Sleep(5000)
    fullscreen($hFenster1) ; Vollbild Modus aktivieren
    Sleep(5000)
    splitscreen($hFenster1,$hFenster2) ; Splitscreen Modus aktivieren, diesmal andersrum

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

    Func splitscreen($hBig,$hSmall)
    ; zeigt zwei Fenster im Spliscreen an, $hBig ist das große Fenster, $hSmall das kleine
    WinMove($hBig,"",0,0,0.7*@DesktopWidth,0.7*@DesktopHeight,5) ; Bewegt das große Fenster in die obere linke Ecke und vergrößert es auf 70% der Desktopbreite und Höhe
    WinMove($hSmall,"",@DesktopWidth-(0.3*@DesktopWidth),@DesktopHeight-(0.3*@DesktopHeight),0.3*@DesktopWidth,0.3*@DesktopHeight,5) ; Bewegt das kleine Fenster in die untere rechte Ecke und verkleinert es auf 30% der Desktopbreite und Höhe
    EndFunc

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

    Func fullscreen($hFull)
    ; zeigt das Fenster im Vollbild an
    WinMove($hFull,"",0,0,@DesktopWidth,@DesktopHeight,5) ; vergrößert das Fenster auf die Desktopauflösung
    EndFunc

    [/autoit]

    Bei deinem TVCenter halte ich es für möglich, dass der CLASS String sich bei jedem Start ändert, daher würde ich es hier erstmal mit einem Teiltitel versuchen, also "TVCenter". Sollte TVCenter aber mehrere Fenster haben die diesen String enthalten kann hier durchaus das falsche Fenster erkannt werden. In dem Fall versuche eben den CLASS String und schau ob er sich ändert, wenn ja könnte man das Handle ggf. noch auf andere Weise rausfinden (ich denke da an die Funktion winlist()), was aber etwas aufwendiger wird und möglicherweise nicht immer zuverlässig funktioniert.

    EDIT: Mein Script oben sieht seltsam aus bzw. funktioniert nicht richtig, wenn das WMC zuletzt im Vollbild Modus war. Du solltest es also im Fenstermodus starten und mit ALT+F4 beenden bevor du das script testest und zukünftig ebenfalls so beenden. Jedenfalls sehe ich keine andere Möglichkeit das WMC zu beenden wenn es im Fenstermodus ist und der Rahmen ausgeblendet sein soll.

  • Präsentation erstellen

    • misterspeed
    • 13. September 2013 um 21:00

    Kopier mal alle Daten von Au3Info (Tab summary) des betreffenden Videofenster und poste zusätzlich dein abgeändertes Script.

    EDIT: Außerdem wäre noch die Frage im Raum ob du das Fenster überhaupt beliebig resizen und verschieben kannst, also von Hand. Wenn das schon nicht geht wird auch ein Script nicht viel ausrichten können.

  • Videofenster automatisch verkleinern / vergrößern

    • misterspeed
    • 12. September 2013 um 23:03

    Zugehöriger Thread plus Lösungsansatz von mir befindet sich hier: https://autoit.de/index.php?page=Thread&amp;threadID=43863

  • Präsentation erstellen

    • misterspeed
    • 12. September 2013 um 22:40

    Wie gesagt man kann mit Autoit auch Fenster an beliebige Positionen verschieben und deren größe verändern (winmove), einen echten Fullscreen Modus brauchst du somit eigentlich nicht, du kannst das Fenster ja auch auf die maximale Auflösung vergrößern bzw im Splitscreen Mode dann wieder verkleinern. Das einzige was du dazu brauchst ist das Handle des jeweiligen Fensters bzw ersatzweise den Fenstertitel oder andere eindeutige Merkmale. Solche Informationen bekommst du über das Tool Au3Info, welches sich im Scite Editor im Menü Tools befindet. Das wäre jedenfalls mein Ansatz.

    Hier mal ein Beispiel, welches einen Split- und Fullscreen Mode für Notepad und Paint realisiert:

    [autoit]


    run("mspaint") ; Startet mspaint
    run("notepad") ; Startet Notepad

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

    Opt("WinTitleMatchMode",2) ; Der Titel des Fensters muss nicht vollständig angegeben werden
    $hFenster1 = WinWait("Unbenannt - Paint") ; Wartet auf das Fenster und ermittelt das Fensterhandle, Titel oder andere Details des Fenster mit Au3Info ermittelbar
    $hFenster2 = WinWait("Unbenannt - Editor") ; Wartet auf das Fenster und ermittelt das Fensterhandle, Titel oder andere Details des Fenster mit Au3Info ermittelbar

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

    If $hFenster1 = 0 or $hFenster2 = 0 Then Exit MsgBox(0,"Fehler","Mindestens eines der Fensterhandle konnte nicht ermittelt werden!" & @CRLF & $hFenster1 & @CRLF & $hFenster2)

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

    splitscreen($hFenster2,$hFenster1) ; Splitscreen Modus aktivieren
    Sleep(5000)
    fullscreen($hFenster1) ; Vollbild Modus aktivieren
    Sleep(5000)
    splitscreen($hFenster1,$hFenster2) ; Splitscreen Modus aktivieren, diesmal andersrum

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

    Func splitscreen($hBig,$hSmall)
    ; zeigt zwei Fenster im Spliscreen an, $hBig ist das große Fenster, $hSmall das kleine
    WinMove($hBig,"",0,0,0.7*@DesktopWidth,0.7*@DesktopHeight,5) ; Bewegt das große Fenster in die obere linke Ecke und vergrößert es auf 70% der Desktopbreite und Höhe
    WinMove($hSmall,"",@DesktopWidth-(0.3*@DesktopWidth),@DesktopHeight-(0.3*@DesktopHeight),0.3*@DesktopWidth,0.3*@DesktopHeight,5) ; Bewegt das kleine Fenster in die untere rechte Ecke und verkleinert es auf 30% der Desktopbreite und Höhe
    EndFunc

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

    Func fullscreen($hFull)
    ; zeigt das Fenster im Vollbild an
    WinMove($hFull,"",0,0,@DesktopWidth,@DesktopHeight,5) ; vergrößert das Fenster auf die Desktopauflösung
    EndFunc

    [/autoit]

    Wie du siehst ziemlich simpel.

    Erweiterbar wäre das ganze dann noch durch die von mir weiter oben genannten Dinge, also evtl. die Taskbar verstecken, eine Hintergrund GUI erzeugen und die Ränder oder Titelleisten der Fenster entfernen/verstecken. Und schon hat man eine professionell wirkende Splitscreen Lösung.

  • ini Mehrfacheingabe und auslesen

    • misterspeed
    • 12. September 2013 um 19:14

    Arbeite eben mit Sektionen in der Ini, also z.B. mit solch einem Aufbau:


    Code
    [Settings1]
    keyDatum=20130907
    keyA=value
    keyB=value
    ...
    [Settings2]
    keyDatum=20130912
    keyA=value
    keyB=value
    ...

    Für jeden neuen Datensatz wird eine neue Sektion angelegt. Wenn du das auf z.B. 5 beschränken willst musst du dir überlegen wie du das managen willst und wann welche Sektionen überschrieben werden oder gelöscht werden sollen. Wenn du das Datum reinbringen willst verwende die Datums Makros, also @Year, @MDay usw. und füge diesen Datumsstring als zusätzlichen Schlüssel in jede Sektion ein. So kannst du leicht ermitteln welche Sektion die älteste ist und von dir ersetzt werden soll. Du kannst das dann auch zur Sortierung des Listviews nutzen.

  • Präsentation erstellen

    • misterspeed
    • 12. September 2013 um 18:53

    Nunja dein Hauptproblem wird hier sein, dass vermutlich die wenigsten deine TV Kartensoftware kennen und für Tests zur Verfügung haben. Eine Auftragsprogrammierung gestaltet sich ohne deine aktive Mithilfe also etwas schwierig. Deine Chancen auf eine brauchbare Lösung sind somit am größten wenn du es selbst versuchst und dich ein wenig mit Autoit beschäftigst.

  • Präsentation erstellen

    • misterspeed
    • 12. September 2013 um 14:24

    Sollte nicht allzu schwer sein. Ich nehme mal an, dass sowohl der VLC als auch die Software der TV Karte einen Fenster Abspielmodus besitzen. Solange es Standard Windows Fenster sind sollte man störende Dinge wie die Titelleiste des Fensters oder den Rand des Fensters per

    [autoit]

    guisetstyle

    [/autoit]

    entfernen können.

    Die Position und Größe der Fenster sollten mit

    [autoit]

    winmove

    [/autoit]

    änderbar sein.

    Da du keine Überlappung willst wirst du automatisch etwas vom Hintergrund sehen, daher bietet es sich an dafür eine Vollbild GUI mit ansprechendem Hintergrund zu erstellen, damit man nichts mehr vom Startbutton oder der Taskleiste sieht. Die beiden Videofenster benötigen dann noch das ontop Attribut.

    [autoit]

    winsetontop

    [/autoit]

    Das hier ist übrigens nicht das "mach mir mal" Unterforum. Hier kannst du Fragen stellen wie man etwas tun kann und wenn du dabei dann an deine Grenzen stößt auch nachfragen wie man die Fehler deines Scriptes beheben kann.

    Wenn du dazu keine Lust, Zeit oder Fähigkeiten hast bleibt dir noch eines der beiden "machs mir!" Foren:

    Programmieranfragen ohne Gegenleistung
    Programmieranfragen mit Gegenleistung

    Da du / ihr ja offensichtlich kommerzielle Interessen verfolgt würde ich mal annehmen, dass euch solch eine Programmierarbeit auch ein paar Euro wert ist / sein sollte. In dem Fall ist letzteres Unterforum angebracht, andernfalls eben das erstere.

  • childgui die 3000.

    • misterspeed
    • 12. September 2013 um 00:26

    Doch klar geht das:

    [autoit]

    $child_GUI = GUICreate("Child GUI", 274, 101, 470, 212, BitOR($GUI_SS_DEFAULT_GUI, $WS_CHILD),-1,$hGUI)

    [/autoit]

    Vergleich es mit deinem Code und du wirst feststellen, dass du seither kein child window hattest (siehst du in der Taskleiste, da sollten keine child windows auftauchen).


    EDIT:

    Der Bug, dass das Hauptfenster in den Background springt liegt im Übrigen an deinem Disable und Enable. Beide Zeilen auskommentiert und du hast dieses Verhalten nicht mehr. ;)

  • childgui die 3000.

    • misterspeed
    • 12. September 2013 um 00:06

    Alternativ eben ein Return Statement sobald die Child GUI beendet werden soll. Achja du hast im übrigen bei deiner Child GUI vergessen den Parent anzugeben (letzter Parameter bei guicreate).
    Ich würde dir außerdem nahelegen alle Variablen in Funktionen auch als local zu deklarieren, damit vermeidest du versehentliche Kollisionen mit globalen GUI Variablen, gerade wenn man seine Buttons so durchnummeriert wie du kann das gern mal passieren. Das war aber bei dir nicht der Fehler, wollte es nur angemerkt haben.

  • Autoit Programm als Service schreiben

    • misterspeed
    • 11. September 2013 um 23:52

    Inwiefern kommt nix? Läuft der Service und kann z.B. in Intervallen ein Logfile schreiben oder Programme starten, so dass sie im Taskmanager zu sehen sind? Wenn ja passt das soweit ja alles. Wenn du hingegen auf einem anderen angemeldeten Benutzeraccount irgendwas sehen willst brauchst du soweit ich das weiß einen interaktiven Service der die grafische Ausgabe auf dem gewünschten Account macht. Wie man sowas einrichtet kann ich dir leider nicht sagen, hab ich mich nie damit beschäftigt.

    Hier ein paar Infos dazu: http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx

  • Handling mit Schlüssel aus einer Datenbank

    • misterspeed
    • 11. September 2013 um 20:18

    Eine Variante hätte ich noch, die theoretisch nicht nur sehr viel schneller, sondern eigentlich schon perfekt für die Ansprache von Daten per Schlüssel ist:

    https://autoit.de/index.php?page…0336#post220336

    Schau dir mal das Dictionary Object an. ;)

  • Handling mit Schlüssel aus einer Datenbank

    • misterspeed
    • 11. September 2013 um 19:44

    Ok und was soll an deiner Lösung nun das Problem sein? Genau so hätte ich es auch gemacht, aus Performancegründen würde ich aber mit exitloop arbeiten um unnötige Schleifendurchläufe nach einem Treffer zu vermeiden. Das kommt der Performance mit Sicherheit zu Gute.

    EDIT: Wobei du das durch hochsetzen von $j prinzipiell schon machst, wenn ich das grad recht gesehn habe bzw in [0][0] der letzte Arrayindex vermerkt sein sollte...

    EDIT2:
    Optimieren könnte man die Suche möglicherweise noch wenn das Array mit den Schlüsseln vorab alphabetisch sortiert wird und man dann jenachdem wie der Schlüssel des Events beginnt das Array rückwärts oder vorwärs durchläuft. Arg viel wird es aber vermutlich nicht bringen...
    Deutlich mehr Performance dürftest du durch eine SQLite oder einer beliebigen anderen Datenbank und einem dazugehörigen Select bekommen, aber ich denke bei 3000 Zeilen mal 100 Events sollte die Array Lösung noch performant genug sein.

  • Handling mit Schlüssel aus einer Datenbank

    • misterspeed
    • 11. September 2013 um 19:03

    Was hat Assign damit zu tun? Und hast du nun eine Datenbank (wenn ja welche? sqlite / oracle / microsoft ...) oder eine Textdatei die du als Datenbank bezeichnest? Wo ist dein Beispielscript?
    Du schreibst außerdem, dass alle Daten bereits in einem Array sind (1D oder 2D Array?), wo ist dann noch das Problem den zugehörigen Text abzurufen? Mit _arraysearch() sollte das ja wohl zu machen sein.

    EDIT:

    Zitat

    ich habe zwar dafür schon eine Lösung gefunden, jedoch ist die Verarbeitungsdauer sehr lang


    Tjo die solltest du dann auch posten...

  • Skype

    • misterspeed
    • 8. September 2013 um 20:49

    In dem man die Dokumentation der Skype API liest?

    Diese ist scheinbar im Skype Developer Bereich verfügbar (Anmeldung/Registrierung erforderlich) oder man nimmt eben eines der vielen anderen Google Ergebnisse für "Skype4COM.Skype" zur Hand, wie zum Beispiel dieses hier: http://users.skynet.be/fa258239/besta…m/skype4com.pdf

    Skype schreibt im übrigen:

    Zitat


    Important: The Desktop API is no longer supported and some of its features will be gradually discontinued.

  • Mac Auslesen und Rechnername anpassen

    • misterspeed
    • 8. September 2013 um 15:41
    Zitat von Greek

    Bei mir matcht das _StringBetween garnicht ?

    Eventuell ist die Anzahl der Leerzeichen zwischen den Windows Versionen unterschiedlich oder aber es wird stattdessen ein @TAB gesetzt. Das meinte ich auch mit unzuverlässig. Oscar fragt einfach WMI danach, das geht mit jeder Windowsversion immer gleich und man muss auch nicht erst irgendwelche Ergebnistexte parsen.

    Zitat von Sonjiru

    Um nun den Rechnernamen anzupassen muss ich wohl folgendes machen :

    Das Array (sind ja mehrere MAC Adressen abgespeichert) in verschiedene Variablen Speichern (richtig?).

    Dann das entsprechende Fenster aufrufen und das die Variable einfügen`?


    Nein, warum willst du das Ergebnis in Variablen speichern? Lass es einfach im Array, das ist schließlich eine Sammlung von Variablen Inhalten, die du problemlos einzeln ansprechen kannst. Willst du das erste Ergebnis haben kannst du dieses so abrufen:

    [autoit]


    msgbox(0,"Beispielausgabe",$aResult[0])

    [/autoit]

    Bevor du irgendwelche Rechnernamen änderst solltest du dir aber erstmal darüber klar sein welche der Mac Adressen nun eigentlich die Richtige ist. Ipconfig /all ist womöglich der falsche Ansatz. Über WMI kannst du denke ich besser ermitteln, welcher Adapter nun der primäre ist über den auch externe Verbindungen (Gateway?) möglich sind.

    Irgendwelche Fenster zu automatisieren um den Rechnernamen zu ändern ist im übrigen auch nicht notwendig, man kann das soweit ich mich entsinne über die Registry ändern. Dazu einfach mal google befragen "change hostname" oder "change pc name" sollten jedemenge Ergebnisse liefern.

  • Mac Auslesen und Rechnername anpassen

    • misterspeed
    • 8. September 2013 um 15:15

    Erstmal würde ich Oscars Lösung bevorzugen, da diese weit weniger umständlich und zuverlässiger ist.

    Zu deiner Methode:

    Es ist grober Unfug ein Kommandozeilenprogramm mit send() zu automatisieren. Alle Commandline Parameter kann man direkt in den run() Aufruf packen. Es ist außerdem ein unsinniger Umweg über eine Textdatei zu gehen, denn man kann die Rückgabe auch direkt in eine Variable schreiben. Dann braucht man auch keine Admin Rechte um eine Datei zu schreiben oder zu lesen.


    Hier mal eine Lösung die "ipconfig /all" sinnvoller anwendet:

    [autoit]


    #include <Constants.au3>
    #include <array.au3>
    #include <string.au3>

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

    Dim $cmd = 'ipconfig /all'
    Dim $pid = Run(@ComSpec & " /c " & $cmd, "", @SW_HIDE,$STDOUT_CHILD)
    Dim $output = ""

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

    While ProcessExists($pid)
    $output &= StdoutRead($pid)
    WEnd

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

    ConsoleWrite($output & @CRLF)

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

    $aResult = _StringBetween($output," Physikalische Adresse . . . . . . : ",@CRLF)
    _ArrayDisplay($aResult)

    [/autoit]
  • Aktuelles Thema: Serial überprüfen mit MySQL

    • misterspeed
    • 4. September 2013 um 18:56
    Zitat von AspirinJunkie


    Dann erstellt man sich auf dem Server noch folgende Prozedur:

    SQL
    CREATE PROCEDURE check_serial(IN UserSerial	VARCHAR(20))
    	SELECT COUNT(*) FROM serials WHERE number=UserSerial;


    Als Abfrage im AutoItskript verwendet man dann noch lediglich folgendes:

    [autoit]

    _Query($sqlcon, "Call check_serial('" & $serial & "');")

    [/autoit]


    Dann wird das ganze performant, SQL-Injections werden verhindert

    Sicher? Wer hindert mich daran SQL Code über deine "UserSerial" IN Variable in die Prozedur einzuschleusen?

    Haben Prozeduren in MySQL überhaupt einen Rückgabewert oder sollte das nicht eher eine stored function sein?

  • Autoit sendet befehle nicht

    • misterspeed
    • 4. September 2013 um 18:19

    Und wo ist dein Script? Wo ist ggf. die summary von au3info des betreffenden Installers? Gibt es wirklich keine Alternative zur Fensterautomatisierung? Die meisten Installer besitzen silent Parameter für automatisierte Installationen...

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™