Wo genau hängt es denn?
Das Skript ist eigentlich sehr einfach gehalten.
Beiträge von Yjuq
-
-
Es gibt genug Möglichkeiten irgendetwas irgendwie umzusetzen.

Es kommt eigentlich immer auf’s Vorhaben an.Um mal deine Frage bezüglich der *.ini Datei zu beantworten:
Natürlich lässt sich dies mit *.ini Dateien realisieren. Dafür brauchst du im Grunde nur die Funktion IniReadSection(). Du legst die *.ini Datei an und speicherst alle Namen beispielweise unter den Sektionsnamen „Name“. Die Key’s (Schlüssel) kannst du dir dann aussuchen. Im Nachhinein kannst du dann ganz einfach in einer Schleife überprüfen ob der gewünschte Name dabei ist:Spoiler anzeigen
[autoit]$sINI = 'example.ini'
[/autoit] [autoit][/autoit] [autoit]
$avName = IniReadSection($sINI, 'Name')$bIsName = False
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To $avName[0][0]
If Not (GUICtrlRead($id) = $avName[$i][1]) Then $bIsName = True
NextIf $bIsName Then
[/autoit]
; Wenn Name drinne ist dann diesen Code ausführen...
EndIf -
Um dich einmal auf deinen Fehler aufmerksam zu machen:
Das Schüsselwort Not wird noch vor dem Vergleich interpretiert.
Das bedeutet, dass zuerst Not GUICtrlRead($Name) ausgeführt wird (was entweder True oder False ergibt) und das Ergebnis mit "Ralf" verglichen wird.
Folgende beide Möglichkeiten existieren demnach:
True = "Ralf"
False = "Ralf"Dies lässt sich ganz leicht mit Klammern umgehen:
Not (GUICtrlRead($Name) = "Ralf") -
Sollen alle Sektionen in das ListView eingebunden werden oder nur bestimmte?
Wenn alle Sektionen eingebunden werden sollen, siehe Post #2.Wenn nur bestimmte, dann wird's schon schwieriger.
[autoit]
Dann wäre vielleicht einige INI's die das Tool erstellt interessant.
Vielleicht gibt es da möglichkeiten die einzelnen Sektionen zu unterscheiden.#include <Array.au3>
[/autoit][autoit][/autoit][autoit]$sINI = 'example.ini'
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]$asSection = IniReadSectionNames($sINI)
[/autoit][autoit][/autoit][autoit]
_ArrayDisplay($asSection)For $i = 1 To $asSection[0]
[/autoit]
$asElement = IniReadSection($sINI, $asSection[$i])
_ArrayDisplay($asElement)
Next -
Wie gesagt, mit IniReadSectionNames() kannst du alle Sektionsnamen in der INI Datei auslesen.
Aber ich frage mich woher weißt du dann weißt welche Sektion du dann benötigst...Am einfachsten wäre es, wenn du einmal schilderst was du genau vor hast.
Eventuell gibt es alternativen welche einen einfacheren Lösungsweg versprechen. -
Mit IniReadSectionNames() kannst du die einzelnen Sektionsnamen auslesen.
So kannst du dann später auf die Sektionen via IniReadSection() oder IniRead() zugreifen. -
Andy:
Naja,... Mir ist schon klar dass ich direkt in die GUI zeichnen könnte.
Allerdings ist das für mein Vorhaben nicht von Vorteil...@Name:
Dankeschön für das Beispiel
-
Hi, ich versuche schon eine ganze Weile eine Bitmap in eine GUI zu laden.
[autoit]
In diese Bitmap zeichne ich eine Linie (will mal hoffen,... Nachürfen kann ich's nichts weil mir nichts anzeigt ^^) und möchte diese Bitmap dann ausgeben.
Hier mal mein Versuch:#include <WinAPI.au3>
[/autoit][autoit][/autoit][autoit]
#include <WindowsConstants.au3>$hGUI = GUICreate('', 800, 600)
[/autoit][autoit][/autoit][autoit]
GUISetState()$hDC = _WinAPI_GetDC($hGUI)
[/autoit][autoit][/autoit][autoit]
$hBitmap = _WinAPI_CreateBitmap(800, 600)
_WinAPI_DrawLine($hBitmap, 0, 0, 800, 600)
_WinAPI_BitBlt($hDC, 0, 0, 800, 600, $hBitmap, 0, 0, $SRCCOPY)While GUIGetMsg() <> -3
[/autoit][autoit][/autoit][autoit]
WEnd_WinAPI_DeleteObject($hBitmap)
[/autoit]
_WinAPI_ReleaseDC($hGUI, $hDC)Kann mir evtl. jemand sagen was ich hier falsch mache? Ich steig da leider nicht ganz hinter

(Abgesehen davon dass ich eigentlich ein Gerätekontext für BitBlt benötige, allerdings weiß ich nicht wie man diesen aus einer Bitmap bezieht) -
Doch klar,...
[autoit]
Chess seine Variante müsste so funktionieren:Global Const $tagDDA = 'ULONG snr; CHAR name[256]; INT dhcp; CHAR netmask[24]; CHAR gatewar[24]; INT signature'
[/autoit][autoit][/autoit][autoit]
Global Const $iIndex = 4Global $tStruct = DllStructCreate('STRUCT pointer[' & $iIndex & ']')
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
Global $atStruct[$iIndex]
Global $i, $pStruct, $avRetFor $i = 0 To $iIndex -1
[/autoit][autoit][/autoit][autoit]
$atStruct[$i] = DllStructCreate($tagDDA)
$pStruct = DllStructGetPtr($atStruct[$i])DllStructSetData($tStruct, 'pointer', $pStruct, $i +1) ;// Struktur füllen
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
Next$pStruct = DllStructGetPtr($tStruct)
[/autoit][autoit][/autoit][autoit]$avRet = DllCall('ChipControl.dll', 'int', 'CCGetAllDevsInArray', _
[/autoit]
'ptr*', $pStruct, _ ;// Das hier ist jetzt Tricky
;// Der Übergebene Pointer zeigt zwar auf eine Struktur,
;// aber du willst ja die Strukturen die sich hinter den Pointer verstecken.
;// Demnach musst du angeben dass der Pointer auf weitere Pointer verweist.
;// Also: ptr*
'int', $iIndex) -
Tweaky:
Du hast recht,...
Ich hatte die Deutsche Hilfe wohl noch falsch in Errinnerung...
Naja, verwende sie ja auch nicht so häufig...Aber dennoch gibt es minimale Unterschiede in der Schriftgröße die aber eigentlich nicht weiter störend sind.
(€dit: Sorry, hab mir angewöhnt in die Beta Hilfe zu schauen. Zu den beiden Stable Hilfen gibt's keine Unterschiede...)
Streich mal den Punkt wo's um's Design geht... -
Als ich noch die Basic’s des Programmierens lernte, war die deutsche Hilfe für mich ein Muss weil ich überhaupt kein Wort aus der englischen verstand. Mittlerweile ist mein Englisch nun schon so „gut“ geworden, dass ich den Größten Teil aus der englischen Hilfe verstehe. Nun nutze ich nur noch die Englische Hilfe aus folgenden 3 Gründen:
- Erst einmal um mein Englisch allgemein zu verbessern
- Mir gefällt das Design einfach besser als von der Deutschen Hilfe
- Die englische Hilfe ist halt immer aktuell (muss ja ^^) und passt sich den Beta Versionen anDennoch gibt es einige Situationen wo ich gerne auf die deutsche Online Hilfe zugreife. Das sind meist dann so Situationen wo ich das Englische in der englischen Hilfe nicht verstehe. Aber diese Situationen gibt es bei mir nur noch selten. Zudem nutze ich die Hilfe auch nur noch als Nachschlagwerk wenn mir die Funktionsweise eines Parameters entfallen ist...
LG. Make

-
Naja, da gibts Abhilfe:
[autoit]_StringBetween($sVar, '', Chr(92))
[/autoit]Einfach einmal das hier durch jedes Skript rattern lassen xD
[autoit]StringReplace($sSource, Chr(92), '" & Chr(92)')
[/autoit] -
Sehr schönes Skript Andy.

Wie lange hast du gebraucht?
-
Um Gottes willen! Nein,... Auf keinen Fall so xD
Du musst die Struktur glücklicherweise nur ein einziges mal eintippen (glück gehabt ^^)
Das sieht in etwa dann so aus:Spoiler anzeigen
[autoit]Global $tagDDA = 'ULONG snr;' & _
[/autoit]
'CHAR name[256];' & _
'int dhcp;' & _
'CHAR ip[24];' & _
'CHAR netmask[24];' & _
'CHAR gateway[24];' & _
'int signature'
Global $tDDA = DllStructCreate($tagDDA)Wenn du nun 5 Strukturen brauchst, kannst du diese einfach kopieren.
Ich schlage vor Du schreibst die Kopien in ein Array:Spoiler anzeigen
[autoit]Global $atDDA[5], $i
[/autoit]
For $i = 0 To UBound($atDDA) -1
$atDDA[$i] = $tDDA
NextDen Zugriff auf die einzelnen Strukturelemente mit dem Punkt Operator ist seit der AutoIt Version 3.3.9.6 (Beta) möglich.
In allen älteren Versionen nur mit den Funktionen „DllStructSetData“ sowie „DllStructGetData“.Mit Punkt Operator (Dafür den Präprozessor Befehl „#AutoIt3Wrapper_Version = B“ setzen):
Spoiler anzeigen
[autoit]$atDDa[0].snr = 1
[/autoit]
$atDDa[1].snr = 2
$atDDa[2].snr = 3
$atDDa[3].snr = 4
$atDDa[4].snr = 5Mit den DLL-Funktionen:
Spoiler anzeigen
[autoit]DllStructSetData($atDDA[0], 'snr', 1)
[/autoit]
DllStructSetData($atDDA[1], 'snr', 2)
DllStructSetData($atDDA[2], 'snr', 3)
DllStructSetData($atDDA[3], 'snr', 4)
DllStructSetData($atDDA[4], 'snr', 5)Danach nur noch die DLL Aufrufe

Spoiler anzeigen
[autoit]Global $aiRet[5], $avRet, $pStruct
[/autoit]
For $i = 0 To UBound($atDDA) -1
$pStruct = DllStructGetPtr($atDDA[$i])
$avRet = DllCall('ChipControl.dll', 'int', 'CCGetAllDevsInArray', 'ptr', $pStruct, 'int', 4)
$aiRet[$i] = $avRet[0]
NextHier noch der ganze Code mit Ausgabe der Rückgabewerte:
Spoiler anzeigen
[autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]Global $i, $atDDA[5], $pStruct, $avRet, $aiRet[5]
[/autoit] [autoit][/autoit] [autoit]
Global $tagDDA = 'ULONG snr;' & _
'CHAR name[256];' & _
'int dhcp;' & _
'CHAR ip[24];' & _
'CHAR netmask[24];' & _
'CHAR gateway[24];' & _
'int signature'
Global $tDDA = DllStructCreate($tagDDA); ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To UBound($atDDA) -1
[/autoit] [autoit][/autoit] [autoit]
$atDDA[$i] = $tDDA
Next; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]DllStructSetData($atDDA[0], 'snr', 1)
[/autoit] [autoit][/autoit] [autoit]
DllStructSetData($atDDA[1], 'snr', 2)
DllStructSetData($atDDA[2], 'snr', 3)
DllStructSetData($atDDA[3], 'snr', 4)
DllStructSetData($atDDA[4], 'snr', 5); ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To UBound($atDDA) -1
[/autoit] [autoit][/autoit] [autoit]
$pStruct = DllStructGetPtr($atDDA[$i])
$avRet = DllCall('ChipControl.dll', 'int', 'CCGetAllDevsInArray', 'ptr', $pStruct, 'int', 4)
$aiRet[$i] = $avRet[0]
Next; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit] [autoit][/autoit] [autoit]_ArrayDisplay($aiRet)
[/autoit] [autoit][/autoit] [autoit]; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
[/autoit]Zu deiner Frage:
„ptr“ nimmt jeden Pointer (egal welcher Datentyp) an.
„struct*“ dagegen nur Pointer von DLL Strukturen.
Wenn ich mich nicht irre ist beides in deinem Fall verwendbar. -
Daran ist nur Koda schuld!
Hätte man dieses Input Control per Hand schön säuberlich getippt,...Bei mir tritt dieses Phänomen nicht auf

-
Auch von mir gibt es wieder eine Kleinigkeit die es zu lösen gilt.
Auf dem ersten Blick scheint dies doch ein wenig rätselhaft,
jedoch sollte genau auf die Farbwahl geachtet werden!
Ich wünsche viel Erfolg! [Blockierte Grafik: http://make.square7.ch/hackit/3.bmp] -
Tut's nicht auch was einfaches?
[autoit]#include <Array.au3>
[/autoit][autoit][/autoit][autoit]$sRead = '<xs:complexType name="cmplx1">' & @CRLF & _
[/autoit][autoit][/autoit][autoit]
'<xs:sequence>' & @CRLF & _
'<xs:element name="name1" type="type1"/>' & @CRLF & _
'<xs:element name="nameN" type="typeN"/>' & @CRLF & _
'</xs:sequence>' & @CRLF & _
'</xs:complexType>' & @CRLF & _
'<xs:complexType name="cmplxN">' & @CRLF & _
'<xs:sequence>' & @CRLF & _
'<xs:element name="name1" type="type1"/>' & @CRLF & _
'<xs:element name="nameN" type="typeN"/>' & @CRLF & _
'</xs:sequence>' & @CRLF & _
'</xs:complexType>'$sPattern = '"(.*?)"' ; einfache Version
[/autoit][autoit][/autoit][autoit]
;~ $sPattern = '(?:name|type)="(.*?)"' ; ein wenig spezifischer
;~ $sPattern = '(?:xs:complexType name="(.*?)"|xs:element name="(.*?)" type="(.*?)")' ; naja
--- Warum die Lücken im Array entstehen, keine Ahnung... 
$aRegEx = StringRegExp($sRead, $sPattern, 3)
[/autoit]
_ArrayDisplay($aRegEx) -
Sehr schön chess

Da bin ich aber gar nicht drauf gekommen
Hier übrigens die Lösung zu meinem Hackit:Spoiler anzeigen
Code
Alles anzeigen> _ _ v x > . v _ . _ _ . _ _ > _ . _ . x . > . _ . ^ > _ . _ . v > . ^ . x . . . _ . ^ . <Zuerst müssen die Zeichen sortiert werden. Die Pfeile (<, >, v und ^) trennen dabei die einzelnen "Codeblöcke". In der ersten Spalte ist jeweils der Anfang zu sehen. Das x markiert dabei das Ende:
Dabei handelt es sich um Morsezeichen. Hintereinander gelesen bedeutet dies: "Morsezeichen".

-
@chess:
Sorry, ich blicke bei deinem Hackit überhaubt nicht mehr durch...
Ich kann keinen sinnvollen Zusammenhang erschließen
Awesome:
Deines habe ich auch noch nicht gelöst, dafür weiß ich inzwischen dass du das mit "Visual Studio 2012" kompilliert hast.
Zudem ist der Orginalname der exe "WindowsFormsApplication3.exe"
Zudem kenne ich inzwischen auch deinen Vornamen
--> Ich arbeite noch dran...
Echt krass was ein Programm alles an Informationen speichert o.o
-
Bevor hier jetzt ne Bahnbrechenende Diskussion anfängt: BugFix hat sich geäußert und sein Wort ist Gesetz

Bleibt bitte beim eigentlichen Sinn des Threads...@chess: Nagut, ich gebe zu dass dies wohl zu einfach war

Aber hier dürft ihr garantiert rätseln
Code
Alles anzeigen> _ _ v x > . v _ . _ _ . _ _ > _ . _ . x . > . _ . ^ > _ . _ . v > . ^ . x . . . _ . ^ . <Als Hinweis: Es kommt ein existierendes Wort (und kein kryptischer Kleinmist ^^) heraus
