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

Beiträge von Oscar

  • Warum ist AutoIT "langsam" ?

    • Oscar
    • 1. April 2017 um 19:57
    Zitat von Lanealine

    allerdings benötigt das Script nur max. 8% von der CPU Auslastung.

    Die 8% lassen mich vermuten (das belegende Script fehlt), dass Dein Script im MessageLoop-Modus (Du verwendest GUIGetMsg) läuft?!
    Hierzu möchte ich aus der Hilfe zitieren:

    Zitat

    This function automatically idles the CPU when required so that it can be safely used in tight loops without hogging all the CPU.

    In der Praxis bedeutet das, dass Dein Script langsamer läuft, wenn Du weder die Maus bewegst noch etwas auf der Tastatur tippst bzw. solange keine Window-Events eintreffen.
    Abhilfe schafft hier das benutzen des OnEvent-Modus. Dort läuft die Endlos-Schleife immer mit voller Auslastung (von einem Prozessor-Kern), weswegen man in diesem Modus auch ein Sleep in die Endlos-Schleife packen sollte.
    In dieser Schleife könnte man aber auch Berechnungen durchführen, die dann einen Kern voll auslasten.

  • maximale Stringlaenge oder Laufzeit fuer Starten in _INetMail() fuer body ?

    • Oscar
    • 28. März 2017 um 18:18

    Die Beschränkung dürfte in der maximalen Länge der Befehlszeile liegen.
    Ab Windows XP aufwärts beträgt diese 8191 Zeichen.
    Wenn Du Dir jetzt mal in der "Inet.au3" den Aufruf zu "_INetMail" anschaust, dann wird diese Befehlszeile schon ziemlich strapaziert: Empfänger, Subjekt, Mailtext und dazu der Pfad (aus der Registry) zum Mailprogramm.

  • Textdatei einlesen und bestimmte Zeilennummer samt Inhalt löschen

    • Oscar
    • 22. März 2017 um 11:50

    Oder rückwärts löschen. Wenn Du Zeile 3, 4 und 5 löschen willst, dann erst Zeile 5 löschen, dann 4 und dann 3.

    Aber die Variante von alpines ist eh besser, weil dabei kein ReDim gemacht werden muss. Sie ist also wesentlich schneller.

  • GDI+ Rotating Earth build 2017-03-17

    • Oscar
    • 22. März 2017 um 09:49

    Oh, gerade erst gesehen, dass es eine neue Version gibt.
    Die v1.7 ist jetzt viel schneller: 23-24 FPS.
    Und die Enterprise ist auch nicht schlecht, allerdings ruckelt sie etwas beim Vorbeiflug.
    Klasse wäre es natürlich, wenn sie in der Animation dann auf Warp-Geschwindigkeit gehen würde. :)

  • Das Ende der InputBox

    • Oscar
    • 21. März 2017 um 16:05

    Wenn Du einen anderen Style setzt, musst Du die Standard-Styles mit übernehmen: BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_PASSWORD)
    Gerade das fehlende AUTOHSCROLL verhindert das horizontale scrollen und begrenzt die Eingabe somit auf die Breite des Input-Controls.

  • AutoIt Gartenplanungs-Projekt

    • Oscar
    • 21. März 2017 um 08:51
    Zitat von Sonderbaar

    Er will es doch später kommerziell Vermarkten, wenn er älter als 14 ist

    Es geht ja nicht darum, sein späteres Projekt zur Verfügung zu stellen. Damit soll er machen, was er will.
    Mir geht es darum, dass er die Lösung auf sein Problem hier zur Verfügung stellt, damit andere (mit dem gleichen oder ähnlichem Problem) auch davon profitieren können.
    Auf diese Weise funktionieren solche Foren.

  • AutoIt Gartenplanungs-Projekt

    • Oscar
    • 20. März 2017 um 19:42

    Du stellst Deine Lösung dem Forum aber nicht zur Verfügung. Eigentlich ist das ziemlich unfair.

    Und die Beispiele in der Hilfe sind meist ohne Backbuffer. Nimm mal das zweite Beispiel zum Befehl _GDIPlus_GraphicsDrawRect, minimiere das Fenster und mache dann ein Restore. Und schon ist das gezeichnete Rechteck weg. Mit meinem Beispiel (oben) passiert das nicht.

  • AutoIt Gartenplanungs-Projekt

    • Oscar
    • 20. März 2017 um 18:38

    Beim arbeiten mit GDI+ sollte man nicht direkt auf die GUI-Grafik zeichnen, sondern einen Backbuffer verwenden. Wenn es auf Geschwindigkeit ankommt, kann man auch einen Doublebuffer verwenden.
    Jedenfalls ist das arbeiten mit einem Buffer sinnvoll, weil man so die Bitmap schnell mal neuzeichnen lassen kann (bei WM_PAINT oder beim Restore des Fensters). Außerdem wird die Bitmap erst dann
    gezeichnet, wenn alle Graphic-Befehle abgeschlossen sind. So vermeidet man beim EInsatz vieler Graphic-Befehle, dass man das einzelne zeichnen sehen kann.
    Hier mal ein Beispiel:

    AutoIt
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    _GDIPlus_Startup()
    OnAutoItExitRegister('_CleanUp')
    Global $iWidth = 640, $iHeight = 480
    
    
    Global $hGui = GUICreate('Test',  $iWidth, $iHeight)
    
    
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND ($hGui) ; Graphic vom Fenster erstellen
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics) ; Backgroundbuffer erstellen
    Global $hGfxContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; GrafikContext vom Backgroundbuffer
    Global $hPen = _GDIPlus_PenCreate(0xFF000000, 2) ; Stiftfarbe in ARGB und Stiftbreite in Pixel
    _GDIPlus_GraphicsDrawRect($hGfxContext, 20, 20, 40, 40, $hPen) ; Rechteck zeichnen
    GUIRegisterMsg($WM_PAINT, '_WM_PAINT') ; WM_Paint registrieren, damit die Grafik beim verschieben neu gezeichnet wird
    GUISetState(@SW_SHOW, $hGui) ; Fenster anzeigen
    While True
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $GUI_EVENT_RESTORE
    			_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight) ; beim Fenster-Restore, die Bitmap neu zeichnen
    	EndSwitch
    WEnd
    
    
    Func _CleanUp() ; aufraeumen nicht vergessen
    	_GDIPlus_PenDispose($hPen)
    	_GDIPlus_GraphicsDispose($hGfxContext)
    	_GDIPlus_BitmapDispose($hBitmap)
    	_GDIPlus_GraphicsDispose($hGraphics)
    	_GDIPlus_Shutdown()
    EndFunc
    
    
    Func _WM_PAINT($hWnd, $iMsg, $wParam, $lParam) ; wenn das Fenster außerhalb des Desktopbereichs war
    	_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight) ; die Bitmap neu zeichnen
    	Return $GUI_RUNDEFMSG
    EndFunc
    Alles anzeigen
  • Wenn ordner nicht vorhanden, zum nächstern springen

    • Oscar
    • 20. März 2017 um 10:15

    Du musst die Funktion etwas abändern:

    AutoIt
    Func zurueck()
    	Local $knummer = GUICtrlRead($input_sknummer)
    	Local $ordnerpfad
    	Do
    		$knummer -= 1
    		$ordnerpfad = "\\Brzg.local\shares\PIV\KONF\BRZ\PAR\" & $knummer
    	Until FileExists($ordnerpfad)
    	GUICtrlSetData($input_sknummer,$knummer)
    	read()
    EndFunc

    Edit: Eventuell noch eine Abbruchbedingung, wenn es kein weiteres Zurück mehr gibt. Die hängt dann von der Ordnerstruktur ab.

  • Wenn ordner nicht vorhanden, zum nächstern springen

    • Oscar
    • 20. März 2017 um 09:51
    Zitat von DerSchatten

    Das Script funktioniert soweit, jedoch springt er nicht direkt zu dem existierenden Ordner.

    Das Script funktioniert garantiert nicht! Also bitte das ganze Script posten.
    Und "jedoch springt er nicht direkt zu dem existierenden Ordner" ist keine Fehlerbeschreibung! Wer springt da wohin und warum? ?(

  • GUISetonEvent, Close clicked bei GUI

    • Oscar
    • 20. März 2017 um 09:46
    Zitat von Mikki

    Ich bekomme es leider nicht hin. Kannst du mir ein Beispiel zeigen oder mir zeigen was ich genau machen kann?

    LG Mikki

    Es ist nie so gut, Fenster derart dynamisch zu erzeugen. Im allgemeinen braucht man ja nicht unendlich viele dieser Fenster.
    Wenn Du nur zwei oder drei Client-GUIs benötigst, dann wäre es besser diese im Voraus zu erstellen und nur bei Bedarf anzuzeigen.
    Hier aber mal ein Beispiel, wie man "unendlich" viele Fenster erstellen kann:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    
    
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus
    
    
    Global $Window_Auswahl_System, $Pic_Eingabehilfe
    
    
    Global $Button_Traeger_auf_zwei_Stuetzen_Linienlast
    
    
    Global $Window_System_1
    
    
    Global $Button_Berechnung_System_1
    
    
    Global $Inputbox_Window_System_1_L, $Inputbox_Window_System_1_q
    
    
    Global $Radio_I_System_1, $Radio_U_System_1, $Radio_L_System_1, $Radio_O_System_1, $Radio_QR_System_1, $Radio_RR_System_1
    Global $Radio_Werkstoff_S235_System_1, $Radio_Werkstoff_S355_System_1, $Radio_Werkstoff_S460_System_1
    
    
    Global $Combobox_I_Profil_System_1, $Combobox_U_Profil_System_1, $Combobox_Achse_Durchbiegung_System_1, $Combobox_Durchbiegung_System_1, $Combobox_Werkstoff_System_1
    
    
    Global $iClientCount = 0, $ahClientGui[$iClientCount + 1][13]
    
    
    $Window_Auswahl_System = GUICreate("Statiktool - Systemauswahl", 900, 600)
    GUISetBkColor(0xffffff)
    
    
    
    
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked_Systemauswahl")
    GUISetState(@SW_SHOW)
    
    
    $Button_Traeger_auf_zwei_Stuetzen_Linienlast = GUICtrlCreateButton("System 1", 100, 220, 100, 30)
    GUICtrlSetOnEvent($Button_Traeger_auf_zwei_Stuetzen_Linienlast, "System_1")
    GUISetState(@SW_SHOW)
    
    
    
    
    
    
    ;Leerlauf und auf Event warten
    While 1
    	Sleep(1000)
    WEnd
    
    
    
    
    
    
    
    
    Func System_1()
    	$ahClientGui[$iClientCount][0] = GUICreate("Systemdaten Träger auf zwei Stützen mit Linienlast", 800, 600)
    	GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked_System_1")
    
    
    	GUICtrlCreateLabel("Länge L [m]", 10, 20, 100)
    	$ahClientGui[$iClientCount][1] = GUICtrlCreateInput("", 10, 40, 80)
    
    
    	GUICtrlCreateLabel("Last q [kN/m]", 10, 80, 100)
    	$ahClientGui[$iClientCount][2] = GUICtrlCreateInput("", 10, 100, 80)
    
    
    	GUICtrlCreateGroup("Trägerprofil", 120, 20, 180, 160)
    
    
    	$ahClientGui[$iClientCount][3] = GUICtrlCreateRadio(" I ", 130, 50, 50)
    ;~ 	GUICtrlSetOnEvent($Radio_I_System_1, "Combobox_I")
    	$ahClientGui[$iClientCount][4] = GUICtrlCreateRadio(" U ", 130, 70, 50)
    ;~ 	GUICtrlSetOnEvent($Radio_U_System_1, "Combobox_U")
    	$ahClientGui[$iClientCount][5] = GUICtrlCreateRadio(" L ", 130, 90, 50)
    	$ahClientGui[$iClientCount][6] = GUICtrlCreateRadio(" I ", 130, 110, 50)
    	$ahClientGui[$iClientCount][7] = GUICtrlCreateRadio(" QR ", 130, 130, 50)
    	$ahClientGui[$iClientCount][8] = GUICtrlCreateRadio(" RR ", 130, 150, 50)
    
    
    	GUICtrlCreateGroup("Biegung um welche Achse?", 320, 20, 150, 160)
    	$ahClientGui[$iClientCount][9] = GUICtrlCreateCombo(" ", 330, 50, 120)
    
    
    
    
    	GUICtrlCreateGroup("max. zul. Durchbiegung", 490, 20, 130, 160)
    	$ahClientGui[$iClientCount][10] = GUICtrlCreateCombo(" ", 500, 50, 100)
    
    
    
    
    	GUICtrlCreateGroup("Werkstoff", 640, 20, 130, 160)
    	$ahClientGui[$iClientCount][11] = GUICtrlCreateCombo(" ", 650, 50, 75)
    
    
    
    
    	$ahClientGui[$iClientCount][12] = GUICtrlCreateButton("Berechnen", 250, 560, 100, 30)
    ;~ 	GUICtrlSetOnEvent($Button_Berechnung_System_1, "Berechnung_System_1")
    	GUISetState(@SW_SHOW, $ahClientGui[$iClientCount][0])
    	$iClientCount += 1
    	ReDim $ahClientGui[$iClientCount + 1][13]
    EndFunc   ;==>System_1
    
    
    
    
    Func CLOSEClicked_Systemauswahl()
    	Exit
    EndFunc   ;==>CLOSEClicked_Systemauswahl
    
    
    Func CLOSEClicked_System_1()
    	GUIDelete(@GUI_WinHandle)
    	GUISwitch($Window_Auswahl_System)
    EndFunc   ;==>CLOSEClicked_System_1
    Alles anzeigen

    Da ich den übrigen Code nicht kenne, kann ich Dir auch keine Hilfe dazu geben, wie Du die einzelnen GUI-Controls ansprechen kannst.
    Nur soviel:
    @GUI_WinHandle enthält das Handle zum zuletzt angeklickten Fenster
    @GUI_CtrlId enthält die Control-ID zum angeklickten Control-Element


    Damit kannst Du dann in Deinen Event-Funktionen die Fenster/Control-Elemente auseinanderhalten.

  • GUISetonEvent, Close clicked bei GUI

    • Oscar
    • 19. März 2017 um 15:35

    Was ja auch kein Wunder ist, denn Du überschreibst ja die Variable "$Window_System_1" beim zweiten Aufruf.
    Wenn Du mehrere Fenster öffnen willst, dann musst Du ein Array für die Fenster-Handle anlegen und den Index jedes Mal erhöhen.

  • Timer, Klappe die Zweite

    • Oscar
    • 18. März 2017 um 12:07

    Und für die nächste Version:
    - eine nicht blockierende Zähl-Schleife
    - Möglichkeit zum abbrechen
    - Möglichkeit zum pausieren
    - Countdown nicht nur in Sekunden anzeigen (HH:MM:SS wäre sinnvoll)

  • GUI | Variable Anzahl an Buttons... Wie Funktion zuweisen?

    • Oscar
    • 16. März 2017 um 05:07

    Nur zur Ergänzung: @GUI_CtrlId gibt es nur im OnEventMode Opt("GUIOnEventMode", 1)

    Im MessageLoop-Modus müsste man das, wie Du beschrieben hast, mit dem "Case..." machen.

  • Kleines Programm zum XML einlesen und Werte ändern

    • Oscar
    • 14. März 2017 um 15:24
    Zitat von d2n1r

    Ich möchte nun, dass die "ButtonDef" ausgelesen werden, grafisch als Button dargestellt,

    In Deiner XML-Datei stehen keine Größenangaben für die Button, nur die X-/Y-Position und die sind "nur" 61 Pixel auseinander.
    Ein 60 Pixel-Button ist aber sehr knapp für das Label. Soll das wirklich so klein sein?

  • Automatische Installation einer Grafikkarte

    • Oscar
    • 14. März 2017 um 14:38

    Was erwartest Du?
    Das installieren neuer Hardware erfordert nun mal Admin-Rechte.

  • GDI+ Rotating Earth build 2017-03-17

    • Oscar
    • 14. März 2017 um 08:01

    Erstmal: wieder mal eine tolle GDI+-Animation von Dir! Erde, Wolken, Mond sieht toll aus und läuft bei mir mit ca. 17 FPS. :thumbup:

    Aber astronomisch nicht ganz korrekt. Zum einen besitzt der Mond eine Eigenrotation (man sieht von der Erde aus immer den gleichen Teil des Mondes) und zum anderen dreht er sich anders herum um die Erde (in die Richtung, wie sich die Erde um sich selbst dreht). Gut vom Abstand (Erde <-> Mond) wollen wir mal absehen, das lässt sich in den Größen nicht auf dem Monitor darstellen.

  • Variable in Dateiname

    • Oscar
    • 13. März 2017 um 14:04

    Ich habe Dir Dein Script mal angepasst. Das zwischenspeichern der Teilstrings auf Festplatte ist völlig überflüssig, wenn man die Funktion "_Txt2PDF" etwas anpasst.
    Hier mal meine Version:

    AutoIt
    #include <Date.au3>
    #include <MPDF_UDF.au3>
    #include <File.au3>
    
    
    $dir = "C:\logs\"
    
    
    If Not FileExists($dir) Then DirCreate($dir)
    
    
    Global $sData = ""
    $sData &= "                                                                          BPCS Checkliste" & @CRLF
    $sData &= "                     ================================================================" & @CRLF
    $sData &= "                      Current Date:                                                                                            " & _NowDate() & @CRLF
    $sData &= "                      Current Time:				                                                                                           " & _NowTime() & @CRLF & @CRLF
    
    
    $sData &= "                      **************************************Computer Data***************************************" & @CRLF
    $sData &= "                      Serial number:" & @CRLF
    
    
    
    
    
    
    Global $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Global $colAdapters = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")
    
    
    $str = ""
    $sMacAddress = ""
    For $objAdapter In $colAdapters
    	If $objAdapter.MacAddress <> Null Then
    		$sMacAddress = $objAdapter.MacAddress
    		$sData &= "                      Physicaladdress:                                                                         " & $sMacAddress & @CRLF
    	EndIf
    Next
    $sMacAddress = StringReplace($sMacAddress, ":", "_") ; Doppelpunkte sind im Dateinamen nicht zugelassen, deshalb austauschen gegen den Unterstrich
    
    
    
    
    #cs
    	======================================================================================================================================================================================================
    	;Einstellungen für die PDF Erstellung
    	======================================================================================================================================================================================================
    #ce
    _SetTitle("BPCS Checkliste")
    _SetSubject("BPCS Checkliste to pdf")
    _SetKeywords("pdf, AutoIt")
    _OpenAfter(True);PDF nach Erstellung öffnen
    _SetUnit($PDF_UNIT_CM)
    _SetPaperSize("A4")
    _SetZoomMode($PDF_ZOOM_CUSTOM, 70)
    _SetOrientation($PDF_ORIENTATION_PORTRAIT)
    _SetLayoutMode($PDF_LAYOUT_CONTINOUS)
    
    
    ;initialize the pdf
    _InitPDF("C:\logs\BPCS Checkliste_" & $sMacAddress & ".pdf")
    _LoadFontTT("F1", $PDF_FONT_NORMAL)
    _Txt2PDF($sData, "F1")
    
    
    ;write the buffer to disk
    _ClosePDFFile()
    
    
    #cs
    	#FUNCTION# ===========================================================================================================================================================================================
    	Name ..........: _Txt2PDF
    	Description ...: Convert a text file to pdf
    	======================================================================================================================================================================================================
    #ce
    Func _Txt2PDF($sFile, $sFontAlias)
    	If $sFile = "" Then Return SetError(1, 0, 0)
    	Local $sText = ""
    	If FileExists($sFile) Then ; wenn $sFile eine Datei ist, dann...
    		$sText = FileRead($sFile) ; Datei laden
    	Else ; ansonsten...
    		$sText = $sFile ; $sFile als Text interpretieren
    	EndIf
    	Local $iUnit = Ceiling(_GetUnit())
    	Local $iX = 2
    	Local $iY = Ceiling(_GetPageHeight() / _GetUnit()) - 1.5
    	Local $iPagina = Ceiling(_GetPageWidth() / $iUnit) - $iX
    	Local $iWidth = Ceiling($iPagina - $iX)
    	Local $lScale
    	Local $iRanduri = StringSplit($sText & @CRLF & @CRLF & @CRLF & @CRLF, @CRLF, 3)
    	Local $iHR = 0.5 * Ceiling($iY / (10 * $iUnit))
    	Local $iPages = Ceiling((UBound($iRanduri)) * $iHR / $iY)
    	Local $iNrRanduri = Ceiling(UBound($iRanduri) / $iPages - 2)
    	Local $nrp
    	For $j = 0 To $iPages + 2
    		$nrp = _BeginPage()
    		_DrawText(_GetPageWidth() / _GetUnit() - 1, 1, $nrp, "F1", 10, $PDF_ALIGN_CENTER)
    		For $i = 0 To $iNrRanduri - 1
    			Local $sLength = Round(_GetTextLength($iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10))
    			Local $iH = $iY - $iHR * ($i + 1)
    			Select
    				Case $iH < 1
    					_EndPage()
    				Case $i + $j * $iNrRanduri = UBound($iRanduri) - 1
    					_EndPage()
    					Return
    				Case $sLength > $iWidth - 1
    					$lScale = Ceiling($iWidth * 100 / $sLength)
    					_SetTextHorizontalScaling($lScale)
    					_DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0)
    					_SetTextHorizontalScaling(100)
    				Case Else
    					_DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0)
    			EndSelect
    		Next
    		_EndPage()
    	Next
    EndFunc   ;==>_Txt2PDF
    Alles anzeigen
  • AutoIt - Das Multitalent

    • Oscar
    • 13. März 2017 um 10:49

    Das ist lustig! Genau das Gleiche habe ich gedacht, als ich mir das Video angesehen habe.
    Liegt vielleicht daran, dass wir ähnlich alt sind. Ich könnte AutoIt auch nicht mit einem Video lernen. Geschriebenes ist für mich auch das einzig Wahre.
    Und das obwohl ich noch die Worte meiner Eltern im Ohr habe, dass ich ja zur "Video"-Generation gehören würde.
    Das war damals aber anders gemeint: "Video killed the radio star". ;)
    Solche YouTube-Videos sind in meinen Augen eher ein "Interessen-Wecker", aber nicht wirklich eine Methode etwas zu lernen.
    Aber möglicherweise sieht die heutige Generation das anders. Also weitermachen... ^^

  • Mit IF funktion Bilder Wechseln

    • Oscar
    • 9. März 2017 um 19:40
    Zitat von McRau

    Die Rechner sind im lokalen Netzwerk, was wäre den die Alternative zu Ping?

    Die Alternative ist NetServerEnum (listet alle aktiven Rechner im Netzwerk auf):

    AutoIt
    #include <Array.au3>
    
    
    Global Const $SV_TYPE_WORKSTATION = 0x1
    Global Const $SV_TYPE_SERVER = 0x2
    Global Const $SV_TYPE_SQLSERVER = 0x4
    Global Const $SV_TYPE_DOMAIN_CTRL = 0x8
    Global Const $SV_TYPE_DOMAIN_BAKCTRL = 0x10
    Global Const $SV_TYPE_TIME_SOURCE = 0x20
    Global Const $SV_TYPE_AFP = 0x40
    Global Const $SV_TYPE_NOVELL = 0x80
    Global Const $SV_TYPE_DOMAIN_MEMBER = 0x100
    Global Const $SV_TYPE_PRINTQ_SERVER = 0x200
    Global Const $SV_TYPE_DIALIN_SERVER = 0x400
    Global Const $SV_TYPE_XENIX_SERVER = 0x800
    Global Const $SV_TYPE_NT = 0x1000
    Global Const $SV_TYPE_WFW = 0x2000
    Global Const $SV_TYPE_SERVER_MFPN = 0x4000
    Global Const $SV_TYPE_SERVER_NT = 0x8000
    Global Const $SV_TYPE_POTENTIAL_BROWSER = 0x10000
    Global Const $SV_TYPE_BACKUP_BROWSER = 0x20000
    Global Const $SV_TYPE_MASTER_BROWSER = 0x40000
    Global Const $SV_TYPE_DOMAIN_MASTER = 0x80000
    Global Const $SV_TYPE_WINDOWS = 0x400000
    Global Const $SV_TYPE_CLUSTER_NT = 0x1000000
    Global Const $SV_TYPE_TERMINALSERVER = 0x2000000
    Global Const $SV_TYPE_CLUSTER_VS_NT = 0x4000000
    Global Const $SV_TYPE_LOCAL_LIST_ONLY = 0x40000000
    Global Const $SV_TYPE_DOMAIN_ENUM = 0x80000000
    Global Const $SV_TYPE_ALL = 0xFFFFFFFF
    
    
    $aCompList = _NetServerEnum($SV_TYPE_WORKSTATION)
    
    
    _ArrayDisplay($aCompList)
    
    
    Func _NetServerEnum($iSrvType = -1, $sDomain = '')
    	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
    Alles anzeigen

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™