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

Beiträge von Yjuq

  • DllStructGetData durch Punkt-Notation ersetzen ein Risiko?

    • Yjuq
    • 18. August 2017 um 08:47

    Hmn, dann hab ich ihn Missverstanden. Durch das Func_liefert_Array ( Wert = (Func_liefert_Array)[Index] ) ging ich davon aus dass es sich dabei um ein Array handelt welches von einer Funktion zurück gegeben wird. Den Array im Array Fall hatte ich dabei nicht im Sinn gehabt und ehrlich gesagt, hab ich diese Syntax Spielerei auch noch nicht gesehen bzw. war mir bekannt.

  • DllStructGetData durch Punkt-Notation ersetzen ein Risiko?

    • Yjuq
    • 18. August 2017 um 02:57
    Zitat von BugFix

    [...] Möchte man dort in einem Atemzug auf einen Wert zugreifen muß man vor dem Zugriff den Aufruf auch extra einklammern und dann den Indexaufruf anhängen: Wert = (Func_liefert_Array)[Index]. [...]

    Das ist wohl nicht so ganz korrekt:

    AutoIt
    ConsoleWrite(GetArray()[0] & @CRLF)
    ConsoleWrite(GetArray()[1] & @CRLF)
    ConsoleWrite(GetArray()[2] & @CRLF)
    
    
    Func GetArray()
    	Local $aRet = [1, 2, 3]
    	Return $aRet
    EndFunc

    Klappt auch ohne die Klammern drum herum wunderbar. Ich gehe eher davon aus dass die intern die Punkt Notation einfach in ein DllStructGetData() umwandeln und dass beim parsen die Variablen da einfach ein wenig Probleme machen. Entweder beheben die das irgendwann oder es bleibt bestehen. ^^

  • USBDMX-Interface von DE mit Autoit ansteuern

    • Yjuq
    • 17. August 2017 um 14:38

    Hmn, vielleicht habe ich mich nicht so ausgedrückt wie ich es wollte. Ich mag es wirklich Leuten zu helfen - Betonung liegt hier aber auf helfen (damit diese es selber verstehen und damit arbeiten können). Jemanden die komplette Arbeit abnehmen mache ich dagegen ungern. Wahrscheinlich hätte ich den Thread auch irgendwann ignoriert wenn du dein Skript da oben nicht gepostet hättest. Das hat mir nämlich gezeigt dass du dich selber schon damit beschäftigt hast und du tatsächlich Probleme dabei hast. Du glaubst gar nicht wie viele Menschen neu in Foren kommen, eine Frage stellen und komplett fertigen Code erwarten. Das bezieht sich nicht nur auf das Forum hier sondern auf etliche andere wo ich gerne mal vorbei schaue. Da bin ich immer etwas zurückhaltender wenn ich keine Eigeninitiative erkennen kann.

    Vielleicht bin ich auch der einzige der sich so verhält, aber so bin ich nun mal. Sorry dafür ^^

    Besonders dieser Satz hat mich etwas zurückgehalten in deinem Startpost:

    Zitat von Norbertttt

    Meine Frage / Bitte ist nun, ob jemand bereits dieses Interface mit Autoit steuern und mir den notwendigen Autoit-Code zur Verfügung stellen kann.

    Klingt doch ein wenig so nach: Macht mal die Arbeit für mich Leute! Zumindest hab ich es beim ersten durchlesen so interpretiert. Präzise Fragestellungen und ggf. (auch gescheiterte) Skript-Versuche zeigen immer was man schon selber ausprobiert hat und vor allem: Dass man auch selber an dem Problem arbeitet.

    Sorry wenn ich zu harsch war. ^^

  • USBDMX-Interface von DE mit Autoit ansteuern

    • Yjuq
    • 17. August 2017 um 13:25

    Ich hasse Error-Handling. Ich hab es schon immer gehasst, wieso kann man nicht davon ausgehen dass der Programmierer es richtig macht? Es reicht doch wenn man User-Fehlerquellen schon ausmerzt... Ich hasse das und Java ebenfalls ;(;(;(;(;(

    Aber hast ja recht, normalerweise sollte es so nicht sein. Aber ich bin nun mal ein wenig faul wenn ich ein wenig herumspiele mit AutoIt Code. Aber sollte es ein @error Code schmeißen dann gibt's kein Array und das Programm stürzt ab. Das reicht doch als Hinweis aus ^^

  • USBDMX-Interface von DE mit Autoit ansteuern

    • Yjuq
    • 17. August 2017 um 13:19

    Hey, ich hab da was. Probier mal folgendes aus:

    AutoIt
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    
    
    #AutoIt3Wrapper_UseX64 = N
    
    
    #include <Array.au3>
    #include <MsgBoxConstants.au3>
    
    
    Global Const $hUSBDMX = DllOpen("usbdmxsi")
    Global $tOutArray, $tInArray, $iResult
    
    
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    
    
    $iResult = _USBDMX_OpenInterface($hUSBDMX, $tOutArray, $tInArray, 2)
    MsgBox($MB_TOPMOST, "Info - Open", "Rückmeldung: " & $iResult)
    
    
    For $i = 1 To 512
    	$tOutArray.data(($i)) = 50
    Next
    
    
    $iResult = _USBDMX_CloseInterface($hUSBDMX)
    MsgBox($MB_TOPMOST, "Info - Open", "Rückmeldung: " & $iResult)
    
    
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    
    
    DllClose($hUSBDMX)
    
    
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    
    
    Func _USBDMX_OpenInterface($hDLL, ByRef $DMXOutArray, ByRef $DMXInArray, $Mode)
    	$DMXOutArray = DllStructCreate("byte data[512]")
    	$DMXInArray  = DllStructCreate("byte data[512]")
    
    
    	Return DllCall($hDLL, "dword", "OpenInterface", _
    		"ptr", DllStructGetPtr($DMXOutArray), _
    		"ptr", DllStructGetPtr($DMXInArray), _
    		"byte", $Mode)[0]
    EndFunc
    
    
    
    
    Func _USBDMX_CloseInterface($hDLL)
    	Return DllCall($hDLL, "dword", "CloseInterface")[0]
    EndFunc
    
    
    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    Alles anzeigen

    Das sollte zumindest die falschen DllCalls beheben. Jetzt musst du nur noch entsprechend ein wenig damit herum spielen und testen. Falls es Probleme gibt sag bescheid!
    Wie gesagt, ich kann es leider nicht selber testen. ^^

  • USBDMX-Interface von DE mit Autoit ansteuern

    • Yjuq
    • 17. August 2017 um 12:17

    Hey! Das ist ja mal was - Und das ohne dich dazu aufzufordern!

    Lass es mich mal erklären: Ich investiere ungern meine Zeit für ein fremdes Problem wenn der Fragestellende nicht auch daran interessiert ist und es tatsächlich selber versucht. Da du hier neu im Forum bist habe ich natürlich kein Bild über dich und dein Startpost hat mich eher vermuten lassen dass du keine Eigeninitiative an dem Problem besitzt. Daher sind die Antworten von mir auch so lieblos "mau" gewesen. Ich bin aber froh dass du uns hier zumindest ein Skript zeigst, wo du es selber einmal versucht hast. Das ist wichtig! Niemand will kostenfrei für andere arbeiten, aber jemanden wirklich Unterstützung zu bieten der es sich selber erarbeiten will ist wieder was anderes.

    Ich wollte eigentlich schauen wie lange es dauert bis du entweder:
    1.: Genervt das Forum verlässt oder
    2.: Ich was sagen muss damit von dir dazu was passendes kommt

    Da aber gleich dein 3ter Beitrag hier schon produktiv war bin ich jetzt Feuer und Flamme für dein Problem und opfere meine Aufmerksamkeit und meine Zeit dafür! :D

    ---

    Also, erst einmal kenne ich die USBDMX Dll nicht. Ich habe keine Ahnung worum es sich dabei handelt noch was sie tut. Ich habe lediglich bisher fix in die Beispielcodes geschaut um mir ein groben Überblick zu verschaffen. Da mir auch die Hardware fehlt um gescheit Skripte testen zu können. Bedeutet also für dich dass du meine Hilfestellungen für mich testen musst - Macht aber nichts, ich kann dir trotz allem dabei helfen die DllCalls korrekt aufzubauen. Ich schau mir mal dein Skript näher an und lese mich ein wenig in die DLL ein. Zudem stöber ich mal etwas genauer durch die ZIP-Datei. Brauche jedoch selber ein wenig Zeit um mir das alles genauer anzuschauen.

    Bis dahin wollte ich dich nur wissen lassen dass es jemanden gibt der sich jetzt ernsthaft damit befasst. ^^

  • Genial einfaches Tool zur Web Recherche - Smartclip

    • Yjuq
    • 17. August 2017 um 00:15
    Zitat von UEZ

    Apropos Englisch, ohne Englisch kommt man heute leider nicht weit, aber gibt ja Google Translate. ^^


    Oder man zwingt sich einfach sich mit der Sprache auseinander zu setzen. Alles was ich so recherchiere (Sei es für die Programmierung / Tutorials / Für die Ausbildung) mache ich nur noch ausnahmslos auf Englisch. Selbst Bücher oder Artikel lese ich auf englisch. Filme und Animes oder YouTube auch nur Englisch. Englisch englisch und noch mehr englisch. Gelegentlich mal ein wenig Denglisch aber das war's auch schon. ^^

  • String auf spezielles Format untersuchen

    • Yjuq
    • 17. August 2017 um 00:06

    @UEZ - Execute bietet immer ein Sicherheitsrisiko. Was ist wenn die Funktion oben Eingaben von Usern entgegen nimmt und auf deren Formation prüft? Ggf. könnten somit Kommandos von außerhalb ausgeführt werden ohne dass dies eigentlich beabsichtigt ist.

    Zudem nimmt Execute auch andere Eingaben an wie z.B. "0x1234" als Zahl oder so etwas in der Richtung. Diese EIngaben müssten also extra vorab heraus gefiltert werden. Da ist es einfacher von selbst auf eine Funktion zu schreiben welche die Formation einfach überprüft anstatt alles andere explizit auszuschließen.

  • String auf spezielles Format untersuchen

    • Yjuq
    • 16. August 2017 um 23:30

    @Andy - Kenne das nur zu gut wenn man an einer Antwort dran ist und diese eben offen lässt im Browser :D
    By the way - Ich habe den Namen Make-Grafik abgelegt. Ist dir das aufgefallen oder hast du mich lediglich am Profilbild erkannt? xD

    €dit: Vergebt mir, ich bin in RegEx wirklich nicht mehr fitt. Ich war es mal aber ich hab das nun seit 3 Jahren nicht mehr gebraucht. Hab mich gerade mal so in AspirinJunkie sein Pattern eingelesen und verstanden. :P

  • String auf spezielles Format untersuchen

    • Yjuq
    • 16. August 2017 um 21:53

    Das schaut mir kompakter und handlicher aus. Danke - Ich hab mich zwar schon an einer RegEx Lösung hingesetzt aber da kam nichts gescheites bei heraus. Daher hab ich das wieder verworfen... ^^

  • String auf spezielles Format untersuchen

    • Yjuq
    • 16. August 2017 um 20:56

    Ich habe hier ein spezielles Zahlenformat worauf ich gerne meine Strings überprüfen möchte. Die Umsetzung ist kein Problem, allerdings bin ich am überlegen wie ich das performant gestalten kann...

    Erst mal zum Problem. Es geht darum eine einfache Zeichenkette auf ein spezielles Format zu untersuchen. Dabei müssen folgende Regeln beachtet werden:
    - Ein String muss mit einem "-" oder einer Zahl von 0 bis 9 beginnen - Leerstrings sind unzulässig
    - Beginnt der String mit einem "-" Zeichen muss eine Ziffer von 0 bis 9 als nächstes Zeichen folgen
    - Beginnt der String mit der Ziffer "0" darf lediglich nur noch ein Dezimalpunkt folgen
    - Beginnt der String mit einer Ziffer von 1 bis 9 dürfen weitere Ziffern sowie ein Dezimalpunkt folgen
    - Nach dem Dezimalpunkt muss eine weitere Ziffer von 0 bis 9 folgen
    - Ein kleines "e" oder großes "E" für die Exponentenschreibweise darf nur einmalig nach einer Ziffer von 0 bis 9 erfolgen
    - Nach einem "e" oder "E" darf ein "+" oder "-" folgen - Danach mindestens eine Ziffer von 0 bis 9. (Ansonsten beliebig viele Ziffern hier nach)

    Einige Beispiele:
    1
    2.3
    -0
    -0.12e-1
    22.123912e+3
    0e12

    Hat hier jemand eine Idee wie man das gescheit umsetzen kann? Momentan gehe ich den String Zeichen für Zeichen durch und prüfe ihn auf die Regeln. Sollte was nicht passen gebe ich "False" zurück - Ansonsten "True". Allerdings bin ich unsicher ob das die beste Möglichkeit ist. :/

    Zudem hoffe ich auch dass ich alle Regeln korrekt genannt habe. xD

    Mein bisheriger Lösungsvorschlag:

    [autoit]

    Func _IsNumber($sParam)
    Local $aParam = StringToASCIIArray($sParam)
    Local $iCase

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

    For $i = 0 To UBound($aParam) -1
    Switch $iCase
    Case 0 ; Minus-Zeichen?
    If $aParam[$i] <> AscW("-") Then $i -= 1
    If $i = UBound($aParam) -1 Then Return False
    $iCase = 1
    Case 1 ; 1 bis 9 oder 0?
    If $aParam[$i] >= AscW("1") And $aParam[$i] <= AscW("9") Then
    $iCase = 2
    ElseIf $aParam[$i] == AscW("0") Then
    $iCase = 3
    Else
    Return False
    EndIf
    Case 2 ; Ziffer?
    If $aParam[$i] < AscW("0") And $aParam[$i] > AscW("9") Then
    $i -= 1
    $iCase = 3
    EndIf
    Case 3 ; Punkt-Zeichen oder Potenz?
    If $aParam[$i] = AscW(".") Then
    $iCase = 4
    If $i = UBound($aParam) -1 Then Return False
    ElseIf $aParam[$i] = AscW("e") Or $aParam[$i] = AscW("E") Then
    $iCase = 5
    If $i = UBound($aParam) -1 Then Return False
    Else
    Return False
    EndIf
    Case 4 ; Ziffer oder Potenz?
    If $aParam[$i] < AscW("0") And $aParam[$i] > AscW("9") Then
    If $aParam[$i] <> AscW("e") Or $aParam <> AscW("E") Then Return False
    If $i = UBound($aParam) -1 Then Return False
    $iCase = 5
    EndIf
    Case 5 ; Plus oder Minus?
    If $aParam[$i] <> AscW("+") Or $aParam[$i] <> AscW("-") Then $i -= 1
    $iCase = 6
    Case 6 ; Ziffer?
    If $aParam[$i] < AscW("0") And $aParam[$i] > AscW("9") Then Return False
    EndSwitch
    Next

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

    Return True
    EndFunc

    [/autoit]
  • USBDMX-Interface von DE mit Autoit ansteuern

    • Yjuq
    • 16. August 2017 um 16:48

    Ich wollte es nur erwähnt haben, da du das Wort "musst" genannt hast. ;)

  • USBDMX-Interface von DE mit Autoit ansteuern

    • Yjuq
    • 16. August 2017 um 16:37
    Zitat von alpines

    Du musst schauen um was es sich genau handelt. Ist es ein TypeDef, so kannst du einfach den originalen Typen nehmen.
    Bei Strukturen musst du die Struktur in AutoIt mit den DLL-Funktionen nachbauen und dann übergeben.


    Im Prinzip brauchst du das gar nicht mal. Du musst nur sichergehen dass du genug Speicher im Arbeitsspeicher reservierst und diese mit sinnvollen Werten für die Funktionen an der richtigen Stelle befüllst. Wie die Struktur letztendlich aussieht (ob es nur ein byte Array ist) ist komplett irrelevant.

  • USBDMX-Interface von DE mit Autoit ansteuern

    • Yjuq
    • 16. August 2017 um 16:13
    Zitat von NO1 :-)

    Yjug, was ist denn TSERIAL für ein Typ (Objektinstanz?). Kann man den Typ überhaupt mit AutoIt aufrufen?

    Ein "Objekt" und die daraus resultierenden "Objektinstanzen" sind auch nur Strukturen im Arbeitsspeicher. Solche lassen sich IMMER ansprechen, egal um welche Programmiersprache es sich dabei handelt. Du kannst in AutoIt auch mit Objektinstanzen arbeiten, habe dies schon getan.

    Die Typedefinitionen sind in der usbdmx_example.cpp hinterlegt. Diese sehen folgendermaßen aus:

    Code
    typedef unsigned char TDMXArray[512];
    typedef char TSERIAL[16];
    typedef TSERIAL TSERIALLIST[32];
    typedef void (STDCALL* THOSTDEVICECHANGEPROC) (void);

    Ich hoffe dies beantwortet deine Frage. :)

    €dit: By the way, der letzte Buchstabe ist ein kleines "Q" - kein "G".

  • USBDMX-Interface von DE mit Autoit ansteuern

    • Yjuq
    • 16. August 2017 um 15:28

    https://www.autoitscript.com/autoit3/docs/functions/DllCall.htm
    https://www.autoitscript.com/forum/topic/93…all-dllstructs/
    http://bug-fix.info/dll/dll_tut.html
    https://www.vanstechelman.eu/content/autoit-dllcall-examples
    Forensuche: DllCall

  • USBDMX-Interface von DE mit Autoit ansteuern

    • Yjuq
    • 16. August 2017 um 13:14

    Die usbdmx.dll lässt sich mit einfachen DllCalls ansprechen. Da liegen doch sogar Beispiele bei, einfach mal ein wenig ausprobieren!

  • Genial einfaches Tool zur Web Recherche - Smartclip

    • Yjuq
    • 14. August 2017 um 21:30

    Dann meinetwegen eben so:

    [autoit]

    If StringLeft(ClipGet(), 4) <> "http" Then
    Local $Bild = FileOpen(ClipGet(), 16)
    $Clip[$Cstep] = FileRead($Bild)
    FileClose($Bild)
    Else

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

    $Url = ClipGet()

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

    #Region BildladeBlock
    RunWait(@ComSpec & " /c """ & '"' & @ScriptDir & '"' & "\curl.exe " & $Url & " >> " & '"' & @ScriptDir & '"' & "\Bild""", "", @SW_HIDE)

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

    $hFile = FileOpen(@ScriptDir & "\Bild", 16)
    $Clip[$Cstep] = FileRead($hFile)
    FileClose($hFile)
    Sleep(200)
    FileDelete(@ScriptDir & "\Bild")
    EndIf
    #EndRegion BildladeBlock

    [/autoit]

    Das Problem hier ist das FileRead was sich jedoch mit einem FileOpen entsprechend beheben lässt...
    Die Datei wird nicht korrekt eingelesen. Warum das so ist müsste ich dann erst noch recherchieren. Aber da hab ich gerade keine Lust zu.

  • Genial einfaches Tool zur Web Recherche - Smartclip

    • Yjuq
    • 14. August 2017 um 19:52

    Wusste ich's doch. Das Problem liegt nämlich gar nicht an deinen geposteten Codeabschnitt. Es liegt ganz woanders...
    Das Bild wird erst gar nicht korrekt kopiert, so sieht es aus. Wenn es nicht korrekt kopiert wird kannst du es auch gar nicht einfügen. Aber mal der Reihe nach :)

    [Blockierte Grafik: http://i.imgur.com/85YQtZe.png]

    Ich habe mal als Beispiel das Twitch Bild genommen welches du auf der oberen genannten Seite angesprochen hast. Ich hab das Bild einmal heruntergeladen und in einem Hex-Editor geöffnet. Rechts die Daten stammen von deinem Skript wenn ich das Bild kopiere. Wie du siehst wird erst gar nicht korrekt das Bild übernommen. Das Bedeutet dass der Fehler irgendwo in deiner Kopierfunktion liegt. Es scheint so, als ob du das Bild mit der curl.exe downloadest, kann das sein?


    Deine Funktion F_BildCopy() - Änder mal bei Zeile 115 die If-Abfrage folgendermaßen:

    [autoit]


    If StringLeft(ClipGet(), 4) <> "http" Then
    Local $Bild = FileOpen(ClipGet(), 16)
    $Clip[$Cstep] = FileRead($Bild)
    FileClose($Bild)
    Else
    $Clip[$Cstep] = InetRead(ClipGet())
    EndIf

    [/autoit]

    Das müsste dein Problem lösen.

  • Genial einfaches Tool zur Web Recherche - Smartclip

    • Yjuq
    • 14. August 2017 um 03:17

    Es wäre hilfreich wenn du ein vollständiges AutoIt Script lieferst welches dein Problem veranschaulicht. Und mit vollständig meine ich auch ausführbar. Ich bin leider immer etwas faul mir den Rest zusammen zu suchen und dann irgendwo zu erahnen was da jetzt genau Probleme macht. Hast du das Problem denn lösen können? Sonst sehe ich es mir mal an.

  • Hilfe Videos

    • Yjuq
    • 14. August 2017 um 03:11

    Servus, ich würde auch gerne nochmal darauf hinweisen dass der Thread nicht mehr angepinnt sein sollte. Siehe den Beitrag über mir.

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™