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. Andy

Beiträge von Andy

  • TCP Verbindung

    • Andy
    • 5. November 2009 um 23:42
    Zitat

    Du bist ein Super Märchenonkel Andy

    Wenns anders nicht geht, dann eben so :rock:

  • TCP Verbindung

    • Andy
    • 5. November 2009 um 23:38

    Was macht denn der Untertan im Königreich wenn er bei dem KING eine Audienz haben möchte?

    Zuerst notiert er sich die Adresse des KINGS (!!!!!!!!!!!!!!!!!!!!!!!!!) und die Portnummer.....

    Um überhaupt mit dem KING zu kommunizieren, benötigt man ..........TCPStartup()

    Der Untertan braucht einen Anschluß(Socket) zum KING
    Nun möchte sich der Untertan mit dem König VERBINDEN ( na, wie heisst das auf englisch?).... Er bekommt diesen Anschluß von ...........TCPConnect()

    Der King hat die Verbindung akzeptiert, der Herold gibt das bekannt!....(Messagebox vom King!)

    Der Untertan möchte dem KING einiges erzählen, er ist aber so erfürchtig, dass er vor jeder Nachricht in Ohnmacht fällt (ca 2,5-3 Sekunden ^^ so lange, bis der Herold die Nachricht an alle verteilt hat (Dauer der Msgbog beim Server))

    Nun schreibt der Untertan einen TEXT, den er dem KING schicken möchte (na wo kommt der Text her....aus einer INPUTBOX!)

    ...und SENDET (TCPsend() ) diesen Text an die Verbindung (Socket)....also TCPSend($socket,$text)

    Der King empfängt die Nachricht und schickt den Herold ins Land.....der Untertan ist vor Erfurcht Ohnmächtig geworden und sendet, als er wieder erwacht, die nächste Nachricht......


    Das macht der Untertan! SONST NICHTS! Wenn du die wichtigsten Stichpunkte aufgeschrieben hast, dann kannst du das Script des Untertanen(CLIENT) schreiben......VERSUCHS!
    CLIENT:

    Spoiler anzeigen
    [autoit]

    $Empfaenger_IP = @IPAddress1 ;IP-Adresse des Servers!
    $Port = 33891 ;PORT, auf dem der Server lauscht!

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

    TCPStartup()

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

    $Socket = TCPConnect($Empfaenger_IP, $Port)
    While 1
    Sleep(2500)
    $text = InputBox("Client", "Bitte Nachricht an den Server eingeben:")
    If $text = "" Or @error Then ExitLoop
    TCPSend($Socket, $text)
    WEnd

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

    TCPShutdown()

    [/autoit]

    /*EDIT*/ Du kannst testweise den Client und den Server auf einem Rechner laufen lassen! Also erst das SERVER-Script kompilieren und starten (ggf meckert hier schon die Firewall, also erlauben!), danach das CLIENT-Script starten (z.B. direkt aus Scite). Wenn die Firewall wieder meckert, auch diese Verbindung erlauben!

    Wenn du eine etwas bessere Lösung (ggf incl. Protokoll) suchst, dann schau mal HIER. Anhand der Kommentare in den Scripten sollte klar werden, warum der Client erst nach Freigabe durch den Server sendet uvm....

  • TCP Verbindung

    • Andy
    • 5. November 2009 um 23:18

    Hi,
    gaaaaaannnnnzzz ruuuuhhhhiiiiggggg^^

    Zunächst einmal solltest du dir überlegen, was du machen möchtest. Hört sich jetzt vielleicht bescheuert an, aber genau daran hapert es m.E. bei dir!
    Nimm 2 Blätter Papier (ja, dazu braucht man keinen Computer^^) und schreib auf das eine SERVER und auf das andere CLIENT.
    Jetzt hast du dein Problem schon in 2 Einzelteile zerlegt, also ist jedes nur noch halb so schlimm^^

    Der SERVER ist ein Programm, welches auf eine Verbindung wartet, schreib das auf das Blatt Papier.
    Ok, was braucht man für eine (einfache) TCP-Verbindung? IP-Adresse, und Portnummer....AUFSCHREIBEN (untereinander)!

    Wo bekommt der Server seine IP-Adresse her? Na die hat er schon, das ist die IP-Adresse der Netzwerkkarte mit der er verbunden ist. In AutoIt z.B. mit @IPAddress1 zu bekommen. Aufschreiben !(hinter IP-Adresse)

    Wo bekommt der Server seinen Port her? Der Server ist der Meister aller Klassen, gewissermassen der King und als KING fragt man nicht, man LEGT FEST! Einige Ports sind schon belegt, aber andere (>50000) sind nicht belegt, da wählt man einfach einen aus z.b. 55438
    (Aufschreiben hinter "Port"....aber das kennst du ja nun....)

    Weiter gehts. Damit überhaupt irgendetwas mit TCP gemacht werden kann, muss man das vorbereiten mittels TCPStartup() (aufschreiben....das spare ich mir ab jetzt, wenn zum Schluss dein Script nicht läuft, dann liegts daran!)

    Der SERVER "hört" (na, wie heisst "hören" auf englisch?) auf auf einem Anschluss (Socket), und diesen Anschluss erstellt man mit $Socket=TCPlisten().

    So, jetzt kommts! Der Server ist wie gesagt der KING und es bekommt nur der eine Audienz beim KINg, der auch AKZEPTIERT wird (wie heisst akzeptieren auf englisch??). Na also, der King "hört" nun SO LANGE, bis er einen ihm genehmen Teilnehmer AKZEPTIERT! Weil der King etwas vergesslich ist, schreibt er sich die KENNUNG dieser akzeptierten Verbindung auf....
    $connectedsocket=TCPaccept()....(solange warten, bis kein Fehler (-1) mehr auftritt)

    Damit jeder im Königreich auch weiss, dass der KING eine Verbindung aufgebaut hat, jagt der King seinen Herold durchs Land und der bringt diese NACHRICHT in jeden BRIEFKASTEN des Landes....(Kombiniere mal die englischen Wörter von Nachricht und Briefkasten (Kurzwort).... :rofl: )

    Der King ist sehr geduldig mit seinen Untertanen, er sitzt auf seinem Thron und wartet ...und wartet....und wartet...ENDLOS...darauf einen Untertanen mit einer bestimmten Kennung zu EMPFANGEN (wie heisst das Wort auf englisch?) (aufschreiben!) ....TCPRecv()

    Irgendwann fasst sich der verbundene Untertan ein Herz und spricht den KING schüchtern über die Verbindung an! HA! Jetzt wird der King munter, er EMPFÄNGT (wie heisst das Wort auf englisch?) die Nachricht des Untertanen. JUHUUUUU! Endlich erfährt der KING die neuesten Neuigkeiten aus seinem Königreich und schreibt sie auf!!! $empfang=TCPRecv()

    Damit auch jeder im Königreich erfährt, was es neues gibt, schickt der KINg den Herold.....und ....(das war die Sache mit der Messagebox....)

    Der Untertan freut sich über die gute Laune des Kings und möchte nun neue Nachrichten erzählen, ihm fallen aber keine ein, also rennt er schnell weg und sucht neuen Klatsch und Tratsch aus dem Königreich....

    Währendessen bleibt dem KING nichts weiter übrig, als auf die Nachrichten des Untertanen zu warten....und zu warten.... und zu warten, also setzt er sich auf seinen Thron ......(das hatten wir doch schon mal?!)


    Soweit die Geschichte vom KING.....öhm...bei den EDV´lern ist das der "SERVER" also solltest du die Geschichte 1:1 in die EDV-Sprache umsetzen können! Versuchs mal!!!!
    SERVER:

    Spoiler anzeigen
    [autoit]

    ;Serverprozess auf dem Empfangsrechner starten

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

    $IP_adresse=@IPAddress1
    $Port=33891

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

    TCPStartup()

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

    $Socket = TCPListen($IP_adresse, $port, 100)

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

    do ;solange warten, bis ein Client eine Verbindung aufbaut
    $ConnectedSocket = TCPAccept($Socket)
    ToolTip("Server empfangsbereit...")
    until $ConnectedSocket <> -1 ;wenn Verbindung akzeptiert, dann weitermachen

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

    MsgBox(0, "TCP-Server", "Server hat Verbindung zum Client aufgebaut", 1)

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

    While 1 ;der KING hat endlos Zeit.......
    Do ;warten auf die Nachricht vom Client
    $recv = TCPRecv($ConnectedSocket, 2048) ;nachricht empfangen
    Sleep(10) ;Prozessor entlasten^^
    Until $recv <> "" ;...solange warten, bis eine Nachricht eingetroffen ist

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

    MsgBox(0, "Server hat empfangen:", $recv, 2)
    WEnd

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

    TCPShutdown()

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


    .....oha...du hast ja noch ein zweites Blatt Papier........

  • Hilfefenster öffnen / schließen

    • Andy
    • 5. November 2009 um 21:46

    Wenn man das Hilfefenster per parent-Parameter (s.

    [autoit]

    GuiCreate()

    [/autoit]

    ) als "Child" einbindet, muss man sich über Öffnen/Schliessen keine Gedanken mehr machen. Und spätestens bei der Verwendung von mehreren Child-Fenstern wird auch der OnEvent-Modus interessant, bzw zeigt die Vorteile gegenüber dem Msgmode....

  • 2 Funktionen gleichzeitig machen.

    • Andy
    • 5. November 2009 um 21:33

    Wenn es um rechenintensive Anwendungen geht, dann kann man das "Pseudo-MultiThreating" statt kompliziert im Code direkt von dem machen lassen, der dafür schon alles eingerichtet hat, nämlich Windows!
    Gerade bei Multikernsystemen macht das Sinn, da man Windows veranlassen kann bestimmte Programme an bestimmte Prozessorkerne zu binden. Beispiel AES-Verschlüsselung bzw. Erzeugung der Schlüssel.
    Wenn man 4 Dateien mit 4 unterschiedlichen Schlüsseln verschlüsseln möchte, dann kann man das im Code natürlich irgendwie "parallel" machen, allerdings wird das Programm sowieso nur seriell auf einem Prozessorkern abgearbeitet, und man benötigt 4 (für jede Datei eine) Zeiteinheiten.
    Teilt man das Problem in 4 Programme auf (jedes Programm an einen Prozessorkern gebunden), dann benötigt man nur EINE Zeiteinheit, da auf jedem Prozessorkern die Verschlüsselung nur eine Zeiteinheit dauert. Läppische Geschwindigkeitssteigerung durch paralleles Abarbeiten um den Faktor 4!
    Aber wie peethebee schon geschrieben hat, funktioniert das nur, wenn die einzelnen "Threads" nicht voneinander abhängig sind.

    Und wenn es um richtig "lange" Berechnungen geht, dann wäre auch eine Verteilung an andere Rechner im Netzwerk möglich....CloudComputing ist da wohl das neue Modewort (vgl BOINC), seti@home hat das schon vor Jahren gemacht^^

  • Wort abgleichn und Information widergeben

    • Andy
    • 5. November 2009 um 21:08

    Oscar ,
    wenn Dein Name im Zusammenhang mit Lexika/Wörterbüchern fällt, assoziiere ich das SOFORT mit dem Dictionary-Objekt :thumbup: ...also lass die Jungs nicht hängen und zeig mal wie man so etwas "schnell" löst :D

  • Nicht =

    • Andy
    • 5. November 2009 um 20:50

    Hi,
    man muss unterscheiden zwischen "nicht gleich" (ungleich ist "<>") und dem logischen "Nicht" (NOT).
    Autoit interpretiert alles, was nicht 0 ist als logisches

    [autoit]

    False ;Falsch

    [/autoit]

    . Alles was Null ist, als

    [autoit]

    True ;Wahr

    [/autoit][autoit]

    for $a=-3 to 3
    msgbox(0,$a,"NOT ("&$a&") = "&not($a))
    next

    [/autoit]


    Bei dem IF-Vergleich wird auf True geprüft, daher muss man aufpassen, was eine dort abgefragte Funktion zurückgibt!

  • [Name gesucht] PC von anderen Rechner aus hoch und runterfahren

    • Andy
    • 4. November 2009 um 20:25

    Hi,
    habe etwas ähnliches bei mir am laufen. Die Clients finden "von selbst" heraus, auf welchem der Rechner im Netzwerk die passenden Serverprozesse laufen d.h. man muss keine IP-Adresse des Servers kennen. Auch ist es möglich, mit einem Client Kontakt zu mehreren Servern gleichzeitig zu haben. So ist es eigentlich egal, welcher der "Server" gerade online ist. Fährt einer der Server (oder Clients) runter, dann merkt das die Gegenseite nach einstellbarer Zeit (zzt 500 MilliSekunden). Ein "Miniprotokoll^^" ist auch dabei, der Client/Server sendet erst dann Daten, wen die entsprechende Gegenstelle auch bereit ist.
    Es ist natürlich egal, welcher der Prozesse zuerst gestartet wird.

    PrideRage
    Die beiden Programme laufen sogar zum Testen auf einem Rechner. Datenaustausch zwischen zwei AutoItscripten wäre nur eine der Möglichkeiten.


    Client:

    Spoiler anzeigen
    [autoit]

    ;Kompilieren und auf dem Clientrechner ausführen,
    ;vorher den Serverprozess auf dem Empfängerrechner starten
    ;der Client sucht sich den Server selbstständig aus der Liste der verbundenen Rechner im lokalen Netzwerk
    ;Protokoll: der Client schickt an den Server eine Statusanfrage, erst wenn der Server bereit ist, schickt der Client seine Nachricht
    ; Wenn der Server nicht innerhalb von 500 ms antwortet, wird der nächste Rechner in der Liste angefragt
    ;
    ;Andy @ AutoIt.de

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

    TCPStartup()

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

    Local $rechner = _NetServerEnum() ;alle Rechner im Netz auflisten vgl. http://www.autoit.de/index.php?page…82476#post82476
    Local $Port = 33891 ;Portnummer
    Dim $serverconnect[UBound($rechner)] ;kontrolle, ob Verbindung zum Server besteht
    Dim $connectionenabled[UBound($rechner)] ;Flag, welches von adlibenable/adlibregister benutzt wird um die poll-schleife zu verlassen
    Dim $Empfaenger_IP[UBound($rechner)] ;..wie der name schon sagt, die IP´s der Server
    Dim $ConnectedSocket[UBound($rechner)] ;s.o.
    For $i = 1 To UBound($rechner) - 1 ;Initialisieren...
    $serverconnect[$i] = 0
    $Empfaenger_IP[$i] = 0
    $ConnectedSocket[$i] = 0
    $connectionenabled[$i] = 0
    Next

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

    While 1
    ;alle rechner im netz suchen, auf denen ein serverprozess auf port 33891 läuft und dort die Nachricht hinschicken
    For $i = 1 To UBound($rechner) - 1 ;alle Rechner im Netz
    ;If @ComputerName <> $rechner[$i] Then ;nicht an den eigenen rechner schicken
    If $serverconnect[$i] = 0 Then ;wenn noch nicht zu diesem server verbunden ist,
    $Empfaenger_IP[$i] = TCPNameToIP($rechner[$i]) ;IP-Adresse des Servers rausfinden
    $ConnectedSocket[$i] = TCPConnect($Empfaenger_IP[$i], $Port) ;TCP-Connect zum Server
    EndIf
    If @error <> 1 And $ConnectedSocket[$i] <> -1 Then ;wenn mit dem Server verbunden
    AdlibRegister("_connect", 5000) ;wenn nach 500ms der Server nicht geantwortet hat, Funktion aufrufen, so dass do/until beendet wird (server offline)
    Do ;warten, bis der Server eine Info geschickt hat, daß er bereit ist...
    $recv = TCPRecv($ConnectedSocket[$i], 2048) ;Nachricht vom Server empfangen
    Sleep(10) ;Prozessor entlasten
    Until $recv <> "" Or $connectionenabled[$i] = 1 ;server hat connect bestätigt oder adlib hat nachricht geschickt, dass server offline
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $connectionenabled[$i] = ' & $connectionenabled[$i] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    If $recv <> "" Then ;wenn server eine nachricht geschickt hat, dass er bereit ist, dann Daten an Server schicken
    AdlibUnRegister("_connect"); adlib abschalten
    $text = InputBox("TCP-Client", "Bitte geben sie den Text ein, der zum Serverprozess auf " & $rechner[$i] & " (" & TCPNameToIP($rechner[$i]) & ") gesendet werden soll")
    If $text <> "" Then TCPSend($ConnectedSocket[$i], $text) ;nachricht zum Server schicken
    Sleep(2000);warten bis die msgbox beim server verschwunden ist
    $serverconnect[$i] = 1 ;Daten kamen vom Server, also besteht eine Verbindung
    Else ;keine Daten vom Server bekommen, verbindung zum server abgebrochen
    AdlibUnRegister("_connect"); adlib abschalten
    MsgBox(0, 0, "Server offline, nächsten Server suchen")
    $connectionenabled[$i] = 0 ;flag für do/until setzen
    $serverconnect[$i] = 0 ;verbindung zum server abgebrochen
    Sleep(2000) ;zwei Sekunden warten, dann nochmal Connectversuch zum Server (Server stellt in 0,5 sec fest, ob ein Connect mit dem client besteht)
    EndIf
    EndIf
    Next
    WEnd
    TCPShutdown()

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

    Func _NetServerEnum($iSrvType = -1, $sDomain = '') ;http://www.autoit.de/index.php?page…82476#post82476
    Local $uBufPtr = DllStructCreate("ptr;int;int"), $res[1] = [0], $i
    Local $uRecord = DllStructCreate("dword;ptr"), $iRecLen = DllStructGetSize($uRecord)
    Local $uString = DllStructCreate("char[16]")
    Local $uDomain = DllStructCreate("byte[32]"), $pDomain = 0
    If Not ($sDomain = '' Or $sDomain = '*') Then
    DllStructSetData($uDomain, 1, StringToBinary($sDomain, 2))
    $pDomain = DllStructGetPtr($uDomain)
    EndIf
    Local $ret = DllCall("netapi32.dll", "int", "NetServerEnum", _
    "ptr", 0, "int", 100, _
    "ptr", DllStructGetPtr($uBufPtr, 1), "int", -1, _
    "ptr", DllStructGetPtr($uBufPtr, 2), _
    "ptr", DllStructGetPtr($uBufPtr, 3), _
    "int", $iSrvType, "ptr", $pDomain, "int", 0)
    If $ret[0] Then Return SetError(1, $ret[0], '')
    Local $res[DllStructGetData($uBufPtr, 3) + 1] = [DllStructGetData($uBufPtr, 3)]
    For $i = 1 To DllStructGetData($uBufPtr, 3)
    Local $uRecord = DllStructCreate("dword;ptr", DllStructGetData($uBufPtr, 1) + ($i - 1) * $iRecLen)
    Local $sNBName = DllStructCreate("byte[32]", DllStructGetData($uRecord, 2))
    DllStructSetData($uString, 1, BinaryToString(DllStructGetData($sNBName, 1), 2))
    $res[$i] = DllStructGetData($uString, 1)
    Next
    $ret = DllCall("netapi32.dll", "int", "NetApiBufferFree", "ptr", DllStructGetData($uBufPtr, 1))
    Return $res
    EndFunc ;==>_NetServerEnum

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

    Func _connect() ;adlib
    If $connectionenabled[$i] = 0 Then $connectionenabled[$i] = 1
    EndFunc ;==>_connect

    [/autoit]


    Server:

    Spoiler anzeigen
    [autoit]

    ;Serverprozess auf dem Empfangsrechner starten

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

    Global $ConnectedSocket

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

    TCPStartup()

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

    $MainSocket = TCPListen(@IPAddress1, 33891, 100)

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

    While 1
    While 1 ;solange warten, bis ein Client eine Verbindung aufbaut
    $ConnectedSocket = TCPAccept($MainSocket)
    ToolTip("Server empfangsbereit...")
    If $ConnectedSocket <> -1 Then ExitLoop ;wenn daten empfangen...
    Sleep(10)
    WEnd
    ConsoleWrite("client online!")
    ToolTip("")
    MsgBox(0, "TCP-Server", "Server hat Verbindung zum Client aufgebaut", 1)
    $connectionenabled = 1
    While 1 ;solange Verbindung zum Client besteht...

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

    $anz = TCPSend($ConnectedSocket, "1") ;info an den client senden, dass der server bereit ist
    If $anz <> 0 Or $connectionenabled = 1 Then ;nur, wenn Daten erfolgreich an den Client gesendet wurden
    AdlibRegister("_connect", 5000) ;nach 5 Sekunden nachschauen, ob der client noch online ist
    Do ;warten auf die Nachricht vom Client
    $recv = TCPRecv($ConnectedSocket, 2048)
    Sleep(10)
    Until $recv <> "" Or $connectionenabled = 0 ;erst weitermachen , wenn eine Nachricht vom Client oder der Adlibfunktion kommt

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

    AdlibUnRegister("_connect") ;adlib ausschalten
    Else ;wenn keine daten an den Client gesendet wurden, dann ist der Client offline
    ConsoleWrite("client offline!")
    ExitLoop ;wieder auf einen Client warten
    EndIf
    If $recv <> "" Then ;wenn daten vom Client eingetroffen sind....
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $recv = ' & $recv & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    MsgBox(0, "server hat empfangen:", $recv, 1) ;Daten ausgeben und weiterverarbeiten, hier kann auch eine längere Datenverarbeitung stehen...Client sendet erst, wenn der Server wieder bereit ist
    endif
    WEnd
    WEnd
    TCPShutdown()

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

    Func _connect() ; alle 5 sekunden nachschauen ob der client noch verbunden ist
    $anz = TCPSend($ConnectedSocket, "1") ;info an den client senden, dass der server bereit ist
    If $anz = 0 Or @error Then $connectionenabled = 0 ;wenn keine daten an den Client gesendet werden konnten ist der client offline
    EndFunc ;==>_connect

    [/autoit]

    Uuups, eins noch! Beta-Compile oder Beta-F5 verwenden oder Adlibregister()/-unregister() in adlibenable() ändern!

  • Fenster öffnen - "Verfügbare Drahtlose Netzwerke anzeigen"

    • Andy
    • 4. November 2009 um 19:09

    Hi, hilft das weiter?

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    Local $msg, $Input1, $Input2, $Beenden
    local $lan_IP="nicht feststellbar"
    local $wlan_IP="nicht feststellbar"

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

    dim $a[1][1]

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

    #Region ### START Koda GUI section ### Form=
    GUICreate("Form1", 263, 187, 390, 114)

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

    $a = _GetAllNetAdapterInfo() ;alle Adapterinfos aus der Registry auslesen und in ein Array schreiben
    if not isarray($a) Then ; wenn es keine Netzwerkadapter gibt, programm beenden
    msgbox(1,"Fehler", "Es können keine Netzwerkadapter festgestellt werden!"&@crlf&"Programm wird beendet!")
    Exit
    endif

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

    _ArrayDisplay($a) ;auskommentieren wenn nicht benötigt!

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

    For $i =1 to $a[0][0] ;alle adapter durchsuchen
    if $a[$i][1]="LAN-Verbindung" then $lan_IP=$a[$i][5] ;wenn in der 2. Spalte der String "LAN-Verbindung" vorkommt, dann die 5. Spalte merken
    if $a[$i][1]="Drahtlose Netzwerkverbindung" then $wlan_IP=$a[$i][5] ;wenn in der 2. Spalte der String "Drahtlose Netzwerkverbindung" vorkommt, dann die 5. Spalte merken
    next

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

    $Input1 = GUICtrlCreateInput($lan_IP, 112, 28, 105, 21) ;hier die gedfundene IP eintragen
    $Input2 = GUICtrlCreateInput($wlan_IP, 112, 69, 105, 21) ;hier die gedfundene IP eintragen
    GUICtrlCreateLabel("LAN IP Adresse", 16, 32, 79, 17)
    GUICtrlCreateLabel("WLAN IP Adresse", 16, 72, 90, 17)
    $Beenden = GUICtrlCreateButton("Beenden", 40, 120, 177, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE Or $msg = $Beenden
    ExitLoop
    EndSelect

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

    WEnd

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

    ;######################################################################################################
    ;# Function Name: _GetAllNetAdapterInfo()
    ;# Description:: Auslesen aller vorhandenen Netzwerkadapter und deren Konfiguration
    ;# Parameter(s): keine
    ;# Requirement(s): keine
    ;# Return Value(s): Erfolg Array[0][0] Anzahl der Adapter
    ;# Array[n][0] Adapter Name (wie in Systemsteuerung ==> Netzwerkverbindungen)
    ;# Array[n][1] Adapter Beschreibung
    ;# Array[n][2] IP-Adresse
    ;# Array[n][3] SubNetMask
    ;# Array[n][4] DHCP-Enabled (0/1)
    ;# Array[n][5] DHCP IP-Adresse
    ;# Array[n][6] DHCP SubNetMask
    ;# Array[n][7] DHCP Default Gateway
    ;# Array[n][8] DHCP Server
    ;# Fehler Array[0][0] Leerstring (kein Adapter vorhanden)
    ;# Author(s): Bitboy, nach einer Idee von BugFix ([email='bugfix@autoit.de'][/email])
    ;######################################################################################################

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

    Func _GetAllNetAdapterInfo()
    Local $infoarr[1][9], $keyarr[1], $i = 0, $x = 0, $counter = 0, $tmp, $tmp2, $short

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

    ;Registrierte Adapter zählen
    While 1
    $i = $i + 1
    $tmp = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services", $i)
    If @error <> 0 Then ExitLoop

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

    ;Adapter sind in den einzigen Schlüsseln die mit "{" beginnen
    If StringInStr($tmp, "{") Then
    $short = 1 ;Merker zum Verkürzen der Schleife da Keys alphabetisch sortiert
    $counter = $counter + 1
    ReDim $keyarr[$counter + 1]
    $keyarr[$counter] = $tmp ;Speichern der Adapterschlüssel
    $keyarr[0] = $counter
    Else
    If $short = 1 Then ExitLoop
    EndIf
    WEnd

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

    ;Funktion verlassen wenn kein Adapter gefunden wurde
    If $counter = 0 Then
    $infoarr[0][0] = 0
    Return $infoarr
    EndIf

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

    ;Rückgabearray an Adapterzahl anpassen
    ReDim $infoarr[$counter + 1][9]
    $infoarr[0][0] = $counter

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

    ; TCP-Informationen auslesen
    For $i = 1 To $counter
    $infoarr[$i][2] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'IPAddress')
    $infoarr[$i][3] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'SubnetMask')
    $infoarr[$i][4] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'EnableDHCP')
    $infoarr[$i][5] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpIPAddress')
    $infoarr[$i][6] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpSubnetMask')
    $infoarr[$i][7] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpDefaultGateway')
    $infoarr[$i][8] = RegRead('HKLM\SYSTEM\CurrentControlSet\Services\' & $keyarr[$i] & '\Parameters\Tcpip', 'DhcpServer')
    Next

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

    ;Adapternamen auslesen
    $i = 1
    $short = 0
    While 1
    $tmp = RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}", $i)
    If @error <> 0 Then ExitLoop

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

    $tmp2 = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $tmp, "NetCfgInstanceId")
    For $x = 1 To $counter

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

    ;Zugeordnete Verbindung auslesen
    $infoarr[$x][1] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\' & $keyarr[$x] & '\Connection', 'Name')
    If $tmp2 = $keyarr[$x] Then
    $infoarr[$x][0] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\" & $tmp, "DriverDesc")
    $short = $short + 1 ;gefundene Namen zählen
    EndIf
    Next

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

    If $short = $counter Then ExitLoop ;Alle Adapternamen gefunden

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

    $i = $i + 1
    WEnd

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

    Return $infoarr
    EndFunc ;==>_GetAllNetAdapterInfo

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

    Func GetIP($AdapterName)
    Local $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2'), $Output = 0
    Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter', 'WQL', 0x30)
    If IsObj($colItems) Then
    For $objItem In $colItems
    Local $colItems2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration', 'WQL', 0x30)
    If IsObj($colItems2) Then
    For $objItem2 In $colItems2
    If $objItem.Caption = $objItem2.Caption Then
    If $objItem.NetConnectionID = $AdapterName Then
    $Output = $objItem2.IPAddress(0)
    EndIf
    EndIf
    Next
    EndIf
    Next
    EndIf
    Return $Output
    EndFunc ;==>GetIP

    [/autoit]
  • Autoit Script vorhanden -- wie einbinden in Kontextmenü des Explorers?

    • Andy
    • 3. November 2009 um 15:29
    [autoit]

    $cmdline[0] ;Anzahl der übergebenen Dateien
    $cmdline[1]....$cmdline[n] ;Dateien
    $cmdlineraw ; string aller übergebener Dateien

    [/autoit]
    Zitat

    d.h. wenn du 20 dateien markiert und im kontextmenü dein script auswählst, dann öffnet sich das script 20 mal und jedes frägt nur eine datei ab.

    mit dragndrop oder einem "Senden an" ist das nicht so, daher habe ich das in einem der oberen Posts beschrieben....

  • Dropdown aus ini datei entnehem mit letzte auswahl speicher

    • Andy
    • 3. November 2009 um 13:44

    Hallo, mach in die ini eine neue Sektion

    Code
    [combogesichert]
    Sicherung=eintragderindercombostehensoll

    lies den beim Starten des scripts aus und setz die Combo dementsprechend. Beim Beenden des Scripts wird dieser Eintrag in der Ini mit dem Eintrag der aktuell in der Combobox steht aktualisiert.

  • GUICtrlCreateListViewItem <- strings verwenden?

    • Andy
    • 3. November 2009 um 13:10

    kjvgf

  • GUICtrlCreateListViewItem <- strings verwenden?

    • Andy
    • 3. November 2009 um 11:22

    was soll da nicht funktionieren?

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Local $listview, $button, $item1, $item2, $item3, $input1, $msg

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

    local $string1="text1"
    local $string2="text2"

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

    GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)

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

    $listview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
    $item1 = GUICtrlCreateListViewItem($string1&"|"&$string2&"|col23", $listview)
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]
  • AutoCloseBrackets.lua für SciTE

    • Andy
    • 2. November 2009 um 22:27

    funzt bei mir einwandfrei, musst allerdings das LuaStartupScript anpassen wie hier im 1. Post beschrieben, XP , Scite 1.79

  • ScreenCapture Fehler

    • Andy
    • 2. November 2009 um 18:17

    Hi,
    zeig einfach mal dein Script....
    ciao
    Andy

  • Autoit Script vorhanden -- wie einbinden in Kontextmenü des Explorers?

    • Andy
    • 2. November 2009 um 18:04

    @rochus....

    Zitat

    Außerdem baut das Script einen großen String.

    Und aus was baut es den? Nur ETWAS eigene Initiative vorrausgesetzt wären mit einer Zeile Code die Pfade in ein Array extrahiert (sie befinden sich genauergesagt schon in einem...).
    $cmdline IST bereits ein Array, was willst du da noch mehr?

    Allerdings blicke ich in deinem Codeschnipsel sowieso nicht durch, ich dachte eigentlich, dass die Pfade der übergebenen Dateien gesucht werden?

  • Autoit Script vorhanden -- wie einbinden in Kontextmenü des Explorers?

    • Andy
    • 2. November 2009 um 16:29

    Schau mal im post Nr. 3 das Beispielscript, hatte ich nachträglich angehängt, könnte übersehen worden sein.

  • Autoit Script vorhanden -- wie einbinden in Kontextmenü des Explorers?

    • Andy
    • 1. November 2009 um 16:01

    Hallo,
    du könntest dein Programm (oder eine Verknüpfung davon) in den SendTo-Ordner legen. Im Explorer-Kkontextmenü ist dann unter "Senden an" dein Programm zu sehen. Die so übergebenen Dateien liest man in AutoIt mittels

    [autoit]

    $cmdline[]

    [/autoit]

    ein.
    ciao
    Andy

    /*EDIT*/ kleines Beispiel, erstellt selbstständig eine Verknüpfung ins "Senden an"-Menü und zeigt die im Explorer ausgewählten oder per drag&drop auf das Programm gezogenen Dateien an:

    Spoiler anzeigen
    [autoit]

    ;script kompilieren und starten,
    ;es erstellt eine Verknüpfung von sich selbst im SendTo-Ordner
    ;
    ;Funktionstest: Dateien im Explorer auswählen und im Kontextmenu an das Script senden

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

    If $cmdline[0] = 0 Then ;es ist kein parameter(datei) übergeben worden
    MsgBox(0, "EasyUpload", "Bitte im Windows-Explorer eine oder bis zu 60 Dateien auswählen und rechtsklicken." & @CRLF & "Im darauf folgendenden Kontextmenü bitte ""Senden an"" anwählen, dann in der folgenden Liste auf Easyupload klicken!" & @CRLF & @CRLF & "Es ist auch möglich, eine oder mehrere Dateien auf das Programmicon zu ziehen (drag&drop)."&@crlf&"Die Verknüpfung ins ""Senden an"" wird nun angelegt...")
    $ret = FileCreateShortcut(@ScriptFullPath, @UserProfileDir & "\sendto\"&@ScriptName) ; sendto-eintrag zeigt jetzt auf easyupload_temp.exe
    If $ret = 0 Then MsgBox(0, "Fehler", "Fehler beim Schreiben der Verknüpfung in den " & @UserProfileDir & "\sendto\ -Ordner")
    Exit
    EndIf

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

    $files=""
    for $i=1 to $cmdline[0]
    $Files&=$cmdline[$i]&@CRLF
    Next
    msgbox(0,"Übergebene Dateien:",$files)

    [/autoit]
  • Mousemove läuft nach ein paar Stunden Scriptlauftzeit zu schnell

    • Andy
    • 1. November 2009 um 12:06
    Zitat

    Das wollte ich eigentlich vermeiden, weil ist ja ni ganz Sinn der Sache

    Doch, genau das ist der Sinn der Sache! Wenn ein Fehler auftritt, dann ist der Sinn der Sachen herauszufinden was den Fehler verursacht.

    Zitat

    Das Problem ist auch erst seit dem ich die aktuelle Autoit Version nutze.
    Vorher hatte ich noch die Version 3.2.0.1

    Wenn du konsequent wärest (im Sinne des Sinns der Sache), dann hättest du den Thread nicht erstellt sondern einfach die (in deinem Script fehlerfrei lauffähige) Version 3.2.0.1. verwendet. Capice?

    Zitat

    Ich werds aber mal probieren.

    Brav.... :D

  • Habe Problem bei Befehl Run

    • Andy
    • 31. Oktober 2009 um 21:41

    Hallo,
    diese Unart, Startposts zu löschen, sollte man mit 4-Wochenban bestrafen! Wenn die Frage so unwichtig ist, dass man sie nach 10 Minuten selbst LÖSCHT, dann gehört m.E. eigentlich der gesamte Thread ins Nulldevice! Mitsamt dem User....
    Andy

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™