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

  • Timer starten und ab der 0.40 Sekunde weiteren Code ausführen

    • misterspeed
    • 12. August 2011 um 20:44

    Mich würde mal viel mehr interessieren warum du nachwievor deinen echten Code unkenntlich machst... siehe auch hier: https://autoit.de/index.php?page…&highlight=
    Selbes Script andere nichtsagende Variablennamen.

    [autoit]


    timerinit()
    timerdiff()
    ; oder einfach sleep... keine Ahnung was du eigentlich erreichen willst

    [/autoit]
  • Rückgabewerte auswerten

    • misterspeed
    • 12. August 2011 um 17:56

    Oder auch so, dann haste auch gleich den Errorcode, dessen Bedeutung du bei msdn nachschlagen kannst.

    [autoit]

    If TCPStartup()=0 Then MsgBox(16, "Error", @error)

    [/autoit]

    http://msdn.microsoft.com/en-us/library/ms742213.aspx

  • Mit Shellexecute Dinge wie Arbeitsplatz öffnen

    • misterspeed
    • 12. August 2011 um 16:00
    Zitat von Nachid

    call nen Explorer mit "Arbeitsplatz" als pfad ?

    Das geht unter Vista jedenfalls nicht, auch nicht mit "Computer" anstelle von "Arbeitsplatz".

  • Office 2010 Installationsschlüssel auslesen

    • misterspeed
    • 12. August 2011 um 13:44

    Dir auch vielen Dank, dass du uns allen deine Musterlösung vorenthältst. :rolleyes:

  • Mit Shellexecute Dinge wie Arbeitsplatz öffnen

    • misterspeed
    • 12. August 2011 um 13:40
    [autoit]

    ShellExecute("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")

    [/autoit]

    Öffnet bei mir sowohl unter Vista als auch unter Win7 den Arbeitsplatz. Alternativen gibt es in Form von einigen Makros, jedoch nicht für den Arbeitsplatz...

    Spoiler anzeigen
    Zitat von Hilfe Makro Referenz


    Macro Reference - Directory
    Below is a list of Directory macros. Note that paths do not contain a trailing backslash.

    The full list of macros can be found here.


    Macro Description
    Macros for "All Users" data.
    @AppDataCommonDir path to Application Data
    @DesktopCommonDir path to Desktop
    @DocumentsCommonDir path to Documents
    @FavoritesCommonDir path to Favorites
    @ProgramsCommonDir path to Start Menu's Programs folder
    @StartMenuCommonDir path to Start Menu folder
    @StartupCommonDir path to Startup folder

    Macros for Current User data.
    @AppDataDir path to current user's Application Data
    @DesktopDir path to current user's Desktop
    @MyDocumentsDir path to My Documents target
    @FavoritesDir path to current user's Favorites
    @ProgramsDir path to current user's Programs (folder on Start Menu)
    @StartMenuDir path to current user's Start Menu
    @StartupDir current user's Startup folder
    @UserProfileDir Path to current user's Profile folder.

    Other macros for the computer system:
    @HomeDrive Drive letter of drive containing current user's home directory.
    @HomePath Directory part of current user's home directory. To get the full path, use in conjunction with @HomeDrive.
    @HomeShare Server and share name containing current user's home directory.
    @LogonDNSDomain Logon DNS Domain.
    @LogonDomain Logon Domain.
    @LogonServer Logon server.
    @ProgramFilesDir path to Program Files folder
    @CommonFilesDir path to Common Files folder
    @WindowsDir path to Windows folder
    @SystemDir path to Windows' System (or System32) folder
    @TempDir path to the temporary files folder
    @ComSpec value of %comspec%, the SPECified secondary COMmand interpreter;
    primarly for command line uses, e.g. Run(@ComSpec & " /k help | more")

    Alles anzeigen
  • Serviceaccount - Interaktion mit User (Softwareverteilung)

    • misterspeed
    • 12. August 2011 um 13:08

    Vielleicht solltest du nochmal genauer erklären mit wievielen Teilscripten / seperaten Programmen wir es hier zutun haben. Ich hab das exit aus deinem anderen Thread sowieso nie verstanden.
    So wie ich dich verstehe läuft das so bei dir ab:

    main.exe als service
    main.exe startet user.exe welche die Prüfung auf laufende Prozesse durchführt und dann den User mit msgboxen "belästigt". Die User.exe läuft im usercontext oder läuft die auch als service?

    Wenn das so sein sollte sehe ich kein Problem. Du müsstest doch den Rückgabewert der gestarteten user.exe problemlos in der main.exe bekommen.

    [autoit]


    $pid = run("user.exe")
    processwaitclose($pid)
    $errorcode=@extended ; hier sollte dann deine 1 erscheinen oder wenn das Programm normal beendet wurde eine 0

    [/autoit]

    Oder aber ich hab dich total falsch verstanden und es gibt garkeine user.exe, sondern nur die main.exe.

    In dem Fall macht dein exit keinen Sinn. Stattdessen solltest du die Prozessprüfung in eine Funktion auslagern und die Funktion je nach Userantwort mit einem return $fehlercode verlassen. Danach kehrt dein Programm wieder in den Hauptteil zurück und kann entscheiden was zutun ist, zum Beispiel 4h nix tun und dann die Prüffunktion erneut aufrufen um den User zu nerven...

    Beispiel:

    [autoit]


    while 1
    $ergebnis = checkprocess()
    if $ergebnis = 0 then exit ; alles erledigt
    if $ergebnis = -1 then informadmin() ; per email oder logfile oder was weiss ich, danach wohl am ehesten noch ein exit
    if $ergebnis = 1 then sleep(300000) ; 5min warten und erneut prüfung starten...
    wend

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

    func checkprocess()
    ; hier halt deine Prüfung und die msgbox sache...
    if $cancelbutton then return 1 ; später installieren
    $success = install() ; startet die installation...
    if $success = 1 then return 0 ; alles lief gut und wurde intalliert
    if $sucess = -1 then return -1 ; programme wurden zwar geschlossen aber beim installieren gab es fehler...
    endfunc

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

    func install()
    ; programme installieren....
    if $allesgut = True then return 1
    if $allesgut = False then return -1
    endfunc

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

    func informadmin()
    ;lass dir was einfallen wie du auf fehlgeschlagene installationen reagieren willst
    exit
    endfunc

    [/autoit]

    Aber vielleicht hab ich dich immernoch nicht verstanden und liege mit meinen Vorschlägen total daneben...

  • Chat?

    • misterspeed
    • 12. August 2011 um 08:56

    Kannst dir auch mal diesen Thread ansehen, da habe ich versucht das ein wenig zu erklären:

    https://autoit.de/index.php?page…;highlight=#top

    Solange du das Prinzip einer Client Server Kommunikation via TCP nicht verstehst wird das nichts.

  • Dateien aus einem Array filtern und in ein Verzeichnis kopieren

    • misterspeed
    • 12. August 2011 um 08:40

    Welches Array? Ich nehme mal an du hast bereits _filelisttoarray verwendet... danach verwendest du _arrayfindall und kopierst die Treffer dann in einer Schleife...:

    [autoit]


    $sucharray = _filelisttoarray(....siehe Hilfe....)
    $trefferIndexArray = _arrayFindAll($sucharray,"Kurth",.....siehe Hilfe....) ; liefert alle Treffer Indizes aus dem Sucharray

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

    for $i=0 to ubound($trefferindexArray)-1
    filecopy($sucharray[$trefferIndexArray[$i]],...Zielpfad....,...siehe Hilfe...)
    next

    [/autoit]

    oder Alternativ:


    [autoit]


    $sucharray = _filelisttoarray(....siehe Hilfe....)

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

    for $i=1 to $sucharray[0]
    if stringinstr($sucharray[$i],"Kurth",...siehe Hilfe...) then
    filecopy($sucharray[$i],...Zielpfad....,...siehe Hilfe...)
    endif
    next

    [/autoit]
  • Office 2010 Installationsschlüssel auslesen

    • misterspeed
    • 11. August 2011 um 10:09
    Zitat von hightower

    Glaube nicht das du die Hintergründe kennst und beurteilen kannst das es "sinnvoller" ist jetzt mal eben durch den Schrank zu toben und die Keys manuell in die DB einzutragen.
    Dafür könnt ich auch meine Excel-Datei nehmen.

    Jetzt versteh ichs aber auch nicht mehr. :P
    Du hast die Keys bereits alle in einer Excel Datei? Dann verwende doch einfach die excel UDF um an die Daten zu kommen oder exportiere die relvanten Datensätze von Hand in eine CSV Datei um sie dann problemlos in Autoit weiterverarbeiten zu können.

  • FTP Server Datenvergleich möglich?

    • misterspeed
    • 10. August 2011 um 23:37
    [autoit]


    ;Zu 1:
    _filelisttoarray()
    filegettime()
    filegetsize()
    ;Zu 2:
    stringcompare($datumLokal,$datumFTP) ; oder stinknormale Vergleichs Operatoren wie = oder <>

    [/autoit]

    Beispielscripte findest du in der Autoit Hilfe und sicher auch über die Forensuche. Du hast absolut garnichts davon wenn man dir jetzt hier eine Musterlösung präsentiert. Lies dich in die Funktionen ein und versuchs selbst. Wenn sich dabei weitere Probleme oder Fragen ergeben poste deine Script Versuche.

  • Wert in Verknüpfungen ändern

    • misterspeed
    • 10. August 2011 um 23:27

    Ein direktes Edititieren der Verknüpfungen ist scheinbar nicht möglich, aber du kannst die vorhandenen Attribute auslesen und die alte Verknüpfung dann durch Neuerstellen überschreiben.
    Schau dir mal die Hilfe zu diesen beiden Funktionen an:

    [autoit]


    filegetshortcut()
    filecreateshortcut()

    [/autoit]

    Sofern du die Namen der Verknüpfungen nicht kennst brauchst du noch _filelisttoarray() oder in deinem Fall (Unterverzeichnisse) evtl eine rekursive Dateisuche als Alternative. Dazu siehe Suchfunktion oder auch die beiden Threads von Heute zum selben Thema.
    Wie Arrays und Schleifen zu handhaben sind solltest du ebenfalls wissen, deinem Reg Datum nach sollte das ja kein Problem sein.

  • FTP Server Datenvergleich möglich?

    • misterspeed
    • 10. August 2011 um 22:39

    Datum und Size kannste darüber bekommen:

    [autoit]

    _FTP_ListToArrayEx

    [/autoit]
  • Aktien

    • misterspeed
    • 10. August 2011 um 17:27

    Zum Beispiel so:

    Spoiler anzeigen
    [autoit]


    #include <IE.au3>
    #include <array.au3>

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

    Local $url = "http://www.comdirect.de/inf/aktien/detail/uebersicht.html?SEARCH_REDIRECT=true&REDIRECT_TYPE=WHITELISTED&REFERER=search.general&SEARCH_VALUE=COMMERZBANK&ID_NOTATION=180039"
    Local $oIE = _IECreate($url)

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

    ; Analyse der Webseite... das kannste später alles auskommentieren:

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

    ;#cs
    _IETableGetCollection($oIe) ; wieviele Tabellen gibts auf der Webseite?
    $iNumTables = @extended ; hier steht das Ergebnis der Abfrage...
    MsgBox(0, "Table Info", "There are " & $iNumTables & " tables on the page")

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

    For $i=0 to $iNumTables-1 ; für alle Tabellen die es auf der Seite gibt...
    $oTable = _IETableGetCollection($oIe,$i) ; objekt für die i-te Tabelle
    $aErgebnis = _IETableWriteToArray($oTable) ; objekt der i-ten Tabelle wird in Array gewandelt
    _ArrayDisplay($aErgebnis,"Tabelle Nummer: " & $i) ; Ausgabe der Tabelle...
    Next
    ;#ce

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

    ; Aus den Tabellen kannst du dir nun die, die dich interessiert, und die für dich relevanten Arrayindexe raussuchen...
    ; Deiner aussage nach dürfte Tabelle 0 für dich in Frage kommen, also:

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

    $oTable = _IETableGetCollection($oIe,0) ; Objekt für Tabelle 0
    $aErgebnis = _IETableWriteToArray($oTable) ; Umwandlung zum Array
    MsgBox(0,"Mein Aktienwert:","Aktueller Wert: " & $aErgebnis[1][1] & @CRLF & "Veränderung zum Vortag: " & $aErgebnis[1][3])

    [/autoit]
  • Offene Prozesse abfragen, MSGBox zum schliessen einblenden OK /Cancel - Errorlevel übergeben

    • misterspeed
    • 10. August 2011 um 16:00

    Liefert wohl den selben Wert wie cancel zurück, also eine 2.

  • Aktien

    • misterspeed
    • 10. August 2011 um 15:41

    Gibt doch zig Möglichkeiten das auszulesen.

    - Du kannst sowohl die ie.au3 als auch die ff.au3 benutzen um die untere "Table" auszulesen. z.B.: _IETableWriteToArray() oder _FFTableWriteToArray()
    - Du kannst ohne spezielle Browser den Quellcode mit inetread() oder inetget() erhalten und dann mit zahlreichen string und oder array Funktionen auswerten / durchsuchen
    - Du kannst dich nach Alternativen Webseiten umsehen die dir eine API zur Verfügung stellen um aktuelle Börsendaten zu erhalten

  • Adressdaten von Ebay nach Wawi

    • misterspeed
    • 10. August 2011 um 15:08
    Zitat von joerg8051

    Eigentlich möchte ich folgendes
    Kundendaten halbautomatisch von Ebay in meine Warenwirtschaft kopieren, mit Vergleich ob der Kunde schon angelegt ist.
    Später soll eine Rückmeldung an Ebay erfolgen wenn das Paket abgeschickt wurde.

    Schau dir da doch am besten die zahlreichen von ebay bereitgestellten API's an.

    http://developer.ebay.com/quickstartguide/

    Damit wirst du sehr viel schneller und zuverlässiger Daten von der Webseite erhalten können.

  • Office 2010 Installationsschlüssel auslesen

    • misterspeed
    • 10. August 2011 um 14:07

    Oder einfach den MS support danach fragen. Als Firmenkunde mit mehreren Lizenzen solltest du da ja Anspruch drauf haben ;)

  • Offene Prozesse abfragen, MSGBox zum schliessen einblenden OK /Cancel - Errorlevel übergeben

    • misterspeed
    • 10. August 2011 um 13:53

    Hier mal 2 Varianten, die letzte ist vorzuziehen...

    Spoiler anzeigen
    [autoit]


    #cs
    Test.ini:

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

    [prozesse]
    notepad.exe="Microsoft Notepad undso"
    mspaint.exe="Microsoft N00b Grafikprogramm"
    #ce

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

    #include <array.au3> ; kann entfernt werden wird nur für debug zwecke benötigt
    Global $abfrage = 0 ; ????????
    Global $ini = @ScriptDir & "\test.ini"
    Global $aToCheck = IniReadSection($ini,"prozesse")
    _ArrayDisplay($aToCheck) ; debug
    Global $found = True ; Abbruchbedingung für while Schleife

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

    While $found = True
    $found = False ; wird zu Beginn auf false gesetzt, also wenn er keine laufenden problematischen Prozesse findet verlässt er die Schleife nach einem Durchlauf
    $list = ProcessList()
    For $i = 1 To $list[0][0] ; geht liste aller Prozesse durch
    For $j = 1 to $aToCheck[0][0] ; gleicht den aktuellen Prozess mit allen Prozessen die in der ini vermerkt sind ab
    if $list[$i][0] = $aToCheck[$j][0] Then ; der Prozess ist in der ini vorhanden und läuft noch
    $found = True ; sorgt dafür, dass die while Schleife mindestens noch einmal durchläuft um sicherzustellen, dass keine prozesse mehr laufen
    $Msgbox = MsgBox(8192+65,"Installer","Please close " & $aToCheck[$j][0] & " to install an update or new version of " & $aToCheck[$j][1])
    If $Msgbox = 2 Then
    Exit(1)
    Endif
    $abfrage = $abfrage + 1 ; wozu brauchst du diesen Zähler ?
    EndIf
    Next
    Next
    Sleep(1000)
    WEnd

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

    MsgBox(0,"Fertig","Es laufen keine Prozesse mehr, die Installation kann nun starten...")
    ; installmytools()

    [/autoit]

    Oder du machs das so, ist deutlich kürzer und schneller:

    Spoiler anzeigen
    [autoit]


    #cs
    Test.ini:

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

    [prozesse]
    notepad.exe="Microsoft Notepad undso"
    mspaint.exe="Microsoft N00b Grafikprogramm"
    #ce

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

    #include <array.au3> ; kann entfernt werden wird nur für debug zwecke benötigt
    Global $ini = @ScriptDir & "\test.ini"
    Global $aToCheck = IniReadSection($ini,"prozesse")
    _ArrayDisplay($aToCheck) ; debug
    Global $found = True ; Abbruchbedingung für while Schleife

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

    While $found = True
    $found = False ; wird zu Beginn auf false gesetzt, also wenn er keine laufenden problematischen Prozesse findet verlässt er die Schleife nach einem Durchlauf
    For $i = 1 to $aToCheck[0][0]
    if ProcessExists($aToCheck[$i][0]) Then
    $found = True ; sorgt dafür, dass die while Schleife mindestens noch einmal durchläuft um sicherzustellen, dass keine prozesse mehr laufen
    $Msgbox = MsgBox(8192+65,"Installer","Please close " & $aToCheck[$i][0] & " to install an update or new version of " & $aToCheck[$i][1])
    If $Msgbox = 2 Then Exit(1)
    EndIf
    Next
    WEnd
    MsgBox(0,"Fertig","Es laufen keine Prozesse mehr, die Installation kann nun starten...")
    ; installmytools()

    [/autoit]
  • Offene Prozesse abfragen, MSGBox zum schliessen einblenden OK /Cancel - Errorlevel übergeben

    • misterspeed
    • 10. August 2011 um 12:20

    Naja arbeite halt mit einem 2d Array (machst du ja bereits...) oder ggf mit einer ini Datei in der es Zuordnungen zwischen Prozessname und verständlichem Klartextnamen gibt.


    Bsp:

    ini:

    Code
    [names]
    acroRD32.exe=Acrobat Reader
    MSACCESS.exe=Microsoft Office Access
    [autoit]


    $PnameToGoodName=iniread($ini, "names",$list[$i][0],$list[$i][0]) ; wenn in der ini nichts gefunden wird wird der Prozessname benutzt...

    [/autoit]

    Die ganzen ini Teile könntest du natürlich auch schon vorab in einer weiteren Arrayspalte speichern, dann kannst du die Klarnamen direkt per Arrayindex ansprechen.
    Als Alternative zu einer Art Übersetzungsdatenbank kannst du auch mal das hier anschauen:

    [autoit]

    FileGetVersion()

    [/autoit]

    Damit kann man nicht nur die Version auslesen wie der Name vermuten lässt sondern auch weitere Metadaten der exe, wie z.B den Produktnamen.

  • Dialogfenster eines interaktiven Dienstes in die Userebene hollen

    • misterspeed
    • 10. August 2011 um 11:30

    Schau dir das mal an:
    http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx
    http://msdn.microsoft.com/en-us/library/…v=VS.85%29.aspx

    Oder alternativ auch per externem Tool: http://home.fnal.gov/~jklemenc/tslistusers.html

    EDIT:

    "qwinsta" als Windows eigenes cmdline Tool sollte dir auch ausreichen.
    http://www.techtalkz.com/blog/tips-n-tr…ommandline.html

    Direkte DLL Calls haben zu den cmdline Varianten natürlich den Vorteil, dass du stdout nicht auslesen und parsen musst.

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™