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

Beiträge von funkey

  • Datentypen

    • funkey
    • 1. Februar 2013 um 12:22

    Lange Rede, kurzer Sinn: Man kann den Datentyp nur interpretieren, wenn man ihn nicht kennt.

    Hier ein kleines Beispiel

    Spoiler anzeigen
    [autoit]

    Global $tTestStruct = DllStructCreate("float") ; 4 Byte groß
    Global $pTestStruct = DllStructGetPtr($tTestStruct)
    DllStructSetData($tTestStruct, 1, -20.7) ; schreibe den Float-Wert -20.7 in den Speicher

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

    Global $tInterpretation1 = DllStructCreate("BYTE[4]", $pTestStruct)
    Global $tInterpretation2 = DllStructCreate("short[2]", $pTestStruct)
    Global $tInterpretation3 = DllStructCreate("USHORT[2]", $pTestStruct)
    Global $tInterpretation4 = DllStructCreate("int", $pTestStruct)
    Global $tInterpretation5 = DllStructCreate("UINT", $pTestStruct)

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

    ConsoleWrite("Interpretation1 - Byte 0: " & DllStructGetData($tInterpretation1, 1, 1) & @CRLF)
    ConsoleWrite("Interpretation1 - Byte 1: " & DllStructGetData($tInterpretation1, 1, 2) & @CRLF)
    ConsoleWrite("Interpretation1 - Byte 2: " & DllStructGetData($tInterpretation1, 1, 3) & @CRLF)
    ConsoleWrite("Interpretation1 - Byte 3: " & DllStructGetData($tInterpretation1, 1, 4) & @CRLF)

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

    ConsoleWrite(@CRLF)

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

    ConsoleWrite("Interpretation2 - short 0: " & DllStructGetData($tInterpretation2, 1, 1) & @CRLF)
    ConsoleWrite("Interpretation2 - short 1: " & DllStructGetData($tInterpretation2, 1, 2) & @CRLF)

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

    ConsoleWrite(@CRLF)

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

    ConsoleWrite("Interpretation3 - USHORT 0: " & DllStructGetData($tInterpretation3, 1, 1) & @CRLF)
    ConsoleWrite("Interpretation3 - USHORT 1: " & DllStructGetData($tInterpretation3, 1, 2) & @CRLF)

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

    ConsoleWrite(@CRLF)

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

    ConsoleWrite("Interpretation4 - int: " & DllStructGetData($tInterpretation4, 1) & @CRLF)

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

    ConsoleWrite(@CRLF)

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

    ConsoleWrite("Interpretation5 - UINT: " & DllStructGetData($tInterpretation5, 1) & @CRLF)

    [/autoit]
  • tab-getrenntes Textfile auslesen?

    • funkey
    • 1. Februar 2013 um 11:41

    Vielleicht hilft dir _StringBetween() schon weiter

  • DLL Call - Dism API DismOpenSession

    • funkey
    • 1. Februar 2013 um 07:20

    Also S_OK entspricht 0 falls du das noch nicht weißt.
    Und beim DismLogLevel kannst du direkt einen Integer verwenden (also 'int') anstelle des sowieso falsch verwendeten DllStructs. Die Enums sind einfach normale Konstante, das passt so. Enum kannst du auch in AutoIt verwenden. Wenn du einen NULL-Pointer übergeben willst, dann solltest du " 'ptr', 0 " verwenden anstelle von " 'wstr', 0 ". Es kann zwar funktionieren, bin mir da aber nicht sicher.

  • DLL Call - Dism API DismOpenSession

    • funkey
    • 31. Januar 2013 um 17:46

    Hab jetzt keine Zeit mir das ganze anzuschauen und die Links zu verfolgen, aber @error = 1 beim DllCall heißt, dass die DLL aus irgendwelchen Gründen nicht verwendet werden kann, z.B. auch wenn der Pfad zur DLL nicht passt.
    Außerdem gibt es beim DllCall kein WCHAR, da musst du wohl USHORT verwenden.

  • DLL Call - Dism API DismOpenSession

    • funkey
    • 31. Januar 2013 um 16:10

    Lass dir mal den Fehler (@error) vom DllCall anzeigen. Was steht da drin?

  • DLL Call - Dism API DismOpenSession

    • funkey
    • 31. Januar 2013 um 15:09

    Du hast keinen DllStruct erzeugt und willst einen DllStructPtr von einem String machen ;)

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • funkey
    • 29. Januar 2013 um 19:54

    So:

    [autoit]

    Global Const $tagWIM_MOUNT_LIST = "WCHAR WimPath[260];WCHAR MountPath[260];DWORD ImageIndex;BOOL MountedForRW"

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

    Global $tagWIM_Temp
    Global $Counter = 4

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

    For $i = 1 To $Counter
    $tagWIM_Temp &= $tagWIM_MOUNT_LIST & ";"
    Next

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

    ConsoleWrite($tagWIM_Temp & @CRLF)

    [/autoit][autoit][/autoit][autoit][/autoit]
  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • funkey
    • 29. Januar 2013 um 15:46

    Besser, mir gefällt nur das Redim nicht und dass man vorher nicht weiß wieviele Images gemountet sind.
    Vielleicht kamm man das mit einem Extra-Aufruf der Funktion herausfinden?

    [autoit]

    Global $aResult = DllCall("wimgapi.dll", "bool", "WIMGetMountedImages", "ptr", 0, "dword*", 0)
    ConsoleWrite($aResult[2] & @CRLF)

    [/autoit]


    Was kommt dabei heraus? Irgendwie muss man ja herausfinden, wieviel Speicher man bereitstellen muss!

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • funkey
    • 29. Januar 2013 um 07:16

    Es gibt ja _WIM_GetImageCount, damit kannst du bestimmt über eine Schleife die benötigte Anzahl von Strukturen zusammenfügen und dann auch wieder über eine Schleife alle Werte daraus auslesen. Sollte kein Problem sein. Du kannst vielleicht auch gleich ein 2D-Array zurückgeben.

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • funkey
    • 28. Januar 2013 um 19:33

    Ich habe doch gesagt, dass du mit dem Index arbeiten musst.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Erste Struktur
    $aReturn[1] = DllStructGetData($tWIM_MOUNT_LIST, 1) ;"WimPath"
    $aReturn[2] = DllStructGetData($tWIM_MOUNT_LIST, 2) ;"MountPath"
    $aReturn[3] = DllStructGetData($tWIM_MOUNT_LIST, 3) ;"ImageIndex"
    $aReturn[4] = DllStructGetData($tWIM_MOUNT_LIST, 4) ;"MountedForRW"

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

    ;Zweite Struktur
    $aReturn[5] = DllStructGetData($tWIM_MOUNT_LIST, 5) ;"WimPath"
    $aReturn[6] = DllStructGetData($tWIM_MOUNT_LIST, 6) ;"MountPath"
    $aReturn[7] = DllStructGetData($tWIM_MOUNT_LIST, 7) ;"ImageIndex"
    $aReturn[8] = DllStructGetData($tWIM_MOUNT_LIST, 8) ;"MountedForRW"

    [/autoit]
  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • funkey
    • 28. Januar 2013 um 17:34

    Super!
    Die Daten bekommst du mit DllStructGetData(). Wenn du mehrere Strukturen hast, dann musst du aber mit dem Index arbeiten, anstelle des Elementnamens.

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • funkey
    • 28. Januar 2013 um 16:53

    Probier mal das:

    [autoit]

    Global $aResult = DllCall("wimgapi.dll", "bool", "WIMGetMountedImages", "ptr", $pWIM_MOUNT_LIST, "dword*", DllStructGetSize($tWIM_MOUNT_LIST))

    [/autoit]

    Und der Hex-Wert (also $aResult[1]) ist für dich total uninteressant.

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • funkey
    • 28. Januar 2013 um 16:12

    Ersetz mal das zweite ptr mit DWORD*. Da habe ich nicht geschalten. Und wahrscheinlich wirst du mehr als nur zwei Strukturen brauchen. Deswegen kommt wahrscheinlich auch die 0 zurück.

  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • funkey
    • 28. Januar 2013 um 15:20

    Ich kann's nicht testen, aber so irgendwie vielleicht:

    Spoiler anzeigen
    [autoit]

    Global Const $tagWIM_MOUNT_LIST = "WCHAR WimPath[260];WCHAR MountPath[260];DWORD ImageIndex;BOOL MountedForRW"

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

    Global $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST & ";" & $tagWIM_MOUNT_LIST)
    Global $pWIM_MOUNT_LIST = DllStructGetPtr($tWIM_MOUNT_LIST)

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

    Global $aResult = DllCall("wimgapi.dll", "bool", "WIMGetMountedImages", "ptr", $pWIM_MOUNT_LIST, "ptr", 0)

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

    ConsoleWrite("Return value: " & $aResult[0] & @CRLF)
    ConsoleWrite("Bytes received: " & $aResult[2] & @CRLF)

    [/autoit]
  • DLL Call - _WIM_GetMountedImageCount und _WIM_GetMountedImages

    • funkey
    • 28. Januar 2013 um 07:35

    Beim Array of Struct sind die Daten einfach hintereinander.

    [autoit]

    Local $tWIM_MOUNT_LIST = DllStructCreate($tagWIM_MOUNT_LIST & ";" & $tagWIM_MOUNT_LIST)

    [/autoit]
  • Beispiel von "#include"

    • funkey
    • 22. Januar 2013 um 12:23

    Und ALT+i in der Include-Zeile öffnet die Include-Datei. ;) Wahrscheinlich aber nur, wenn man SciTE4AutoIt3 installiert hat.

  • Funktion StringReplace ist schrecklich langsam

    • funkey
    • 21. Januar 2013 um 12:01

    Vielleicht ist sowas ja schneller. Hab aber keine Ahnung wie die Ersetzung aussehen soll, also ob nach Zeichen oder Wörtern gesucht werden soll oder einfach bestimmte regelmäßige Positionen ausgetauscht werden sollen.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>

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

    Global $sFileOrig = @ScriptDir & "\Test.txt"
    Global $iFileSize = FileGetSize($sFileOrig)

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

    Global $hFile = _WinAPI_CreateFile($sFileOrig, 2, 2)

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

    Global $tBuffer = DllStructCreate("char[" & $iFileSize + 1 & "]")
    Global $iRead, $iWritten

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

    _WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), $iFileSize, $iRead)
    _WinAPI_CloseHandle($hFile)

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

    Global $iAbstand = 10

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

    For $i = 1 To $iFileSize Step $iAbstand
    DllStructSetData($tBuffer, 1, "a", $i)
    DllStructSetData($tBuffer, 1, "b", $i + 1)
    DllStructSetData($tBuffer, 1, "c", $i + 2)
    Next

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

    Global $sFileNew = @ScriptDir & "\TestNew.txt"
    Global $hFileNew = _WinAPI_CreateFile($sFileNew, 1)
    _WinAPI_WriteFile($hFileNew, DllStructGetPtr($tBuffer), $iRead, $iWritten)
    _WinAPI_CloseHandle($hFileNew)

    [/autoit]
  • Happy Birthday Oscar

    • funkey
    • 18. Januar 2013 um 17:44

    Alles Gute zum Geburtstag, Oscar! Bleib gesund!

  • _GetUniCodeSymbol

    • funkey
    • 17. Januar 2013 um 17:14
    Zitat von CyRoX

    Hi,
    gute Arbeit und Zusammenstellung/Auswahl, mir persönlich reicht aber die integrierte Windows Charmap (vermutlich ab Vista) aus.
    (Windowstaste+R -> charmap oder direkt "Zeichentabelle" in die Suchleiste eingeben.)
    Da kann man auch gut Gruppieren und Suchen, wenn man die "Erweiterte Ansicht" aktiviert.

    Charmap kenne ich schon seit ich Windows kenne. Ich glaube, dass war bei Windows 3.0 schon dabei.

  • Siemens Logo RCE 0BA7

    • funkey
    • 17. Januar 2013 um 17:11

    Ich hab keine neue LOGO zum Testen ich weiß nur, dass '_daveNewConnection($p_di, 2, 2, 0)' mit der S7-300 funktioniert.
    Was aber definitiv unterschiedlich beim C-Programm und AutoIt ist, dass ich in AutoIt 'davePascalNewInterface' anstelle von 'daveNewInterface' vewendet habe.

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™