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

Beiträge von TJF

  • ShellExecuteWait - öffnet cmd.exe / soll Fenstertitel ändern

    • TJF
    • 29. Januar 2011 um 16:20

    Hi,

    danke! Beinahe :)

    So geht's:

    [autoit]


    ShellExecuteWait("cmd" ," /k title Neuer Titel")

    [/autoit]

    Viele Grüße
    Thomas

  • ShellExecuteWait - öffnet cmd.exe / soll Fenstertitel ändern

    • TJF
    • 29. Januar 2011 um 16:03

    Hi,

    ich will mit sowas z.B.

    [autoit]


    ShellExecuteWait("cmd")

    [/autoit]

    ein Kommandozeilenprogramm starten und den Titel ändern. Dort steht im o.g. Fall z.B. C:\Windows\system32\cmd.exe

    Womit geht das?

    Dank und Gruß
    Thomas

  • Konvertierung zu UTF-8 ohne BOM

    • TJF
    • 27. Januar 2011 um 00:28

    Hi,

    danke, leider auch nicht... Ist vielleicht zu speziell. Ich habe es einfach durchgetestet, welche Variante der Linux-OpenLDAP vom Win-Rechner in Sachen Umlaute korrekt abbildet. Das war eben genau die o.g. Variante - mit Notepad++ geöffnet und konvertiert. Ist ja kein großer Umstand, wenn man das weiter so macht. Wäre halt schön gewesen, wenn man das gleich mit dem Script hätte richtig konvertieren können...

    Dank und Gruß
    Thomas

  • Konvertierung zu UTF-8 ohne BOM

    • TJF
    • 25. Januar 2011 um 21:22

    Hi Andy,

    danke für den Tipp. FileOpen mit 256 "verwendet" zwar das richtige. Ich brauche aber eine Konvertierung. Da hatte ich in Notepad++ schon etwas gesucht ... BinarytoString und umgekehrt kann nur UTF-8 (rein)...

    Gruß
    Thomas

  • Konvertierung zu UTF-8 ohne BOM

    • TJF
    • 25. Januar 2011 um 16:04

    Hi,

    ich generiere für OpenLDAP und ein Mozilla-Schema aus einem *.csv ein *.ldif für den Datenimport. Funktioniert alles bestens - mit Ausnahme der Umlaute beim LDAP-Import. Perfekt geht es, wenn ich das generierte *.ldif in Notepad++ öffne und unter "Kodierung -> Konvertiere UTF-8 ohne BOM" die Datei ändere und dann abspeichere.

    Gibt es einen Weg, das in AutoIt zu machen? Z.B. aus der fertigen *.ldif? Im wesentlichen ist FileWrite für die Generierung des *.ldif zuständig.

    Dank und Gruß
    Thomas

  • WM_Notify per Funktion

    • TJF
    • 1. November 2010 um 08:03

    Danke Raupi :P

  • WM_Notify per Funktion

    • TJF
    • 31. Oktober 2010 um 18:26

    Hallo Raupi,

    ich hatte letzte Nacht noch spät dran rumgemacht. Da hat sich wohl der Fehler in Z. 60 eingeschlichen. Aber auch diese Version funktioniert nicht. Das LV rechts geht einwandfrei. Wenn Du dann unter Datei->Öffnen ein oder mehrere Bilder aussuchst, davon eines dann im linken LV doppelklickst, passiert nichts...

    Wenn man anschließend nochmal auf das LV rechts klickt, gibt es bei mir ein schwarzes Popup-Feld

    Gruß
    Thomas

  • WM_Notify per Funktion

    • TJF
    • 31. Oktober 2010 um 09:40

    Bei dieser Version geht der Viewer (mit Deiner UDF - ohne das BugFix-Script):

    Spoiler anzeigen
    [autoit]


    #cs -----------------------------------------------------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: AutoBert: http://www.autoit.de/index.php?page=Thread&threadID=21667

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

    Skriptbeispiel für den Umgang mit FileOpenDialog, GUICtrlCreateListView, GUICtrlCreateListViewItem,
    GUIRegisterMsg speziell für das Event $GUI_EVENT_DROPPED
    #ce -------------------------------------------------------------------------------------------------------------------------
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <GuiListView.au3>
    #include <File.au3>
    #include <array.au3>
    #include <GDIPlus.au3>
    #include <GUIListBox.au3>
    #include <GuiConstantsEx.au3>
    #include <RegisterNotify_UDF.au3>

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

    ;Opt('MustDeclareVars', 1)

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

    Global $msg, $message, $var, $aFiles, $idfrmMain, $sSourcePath, $aItem
    Global $szDrive, $szDir, $szFName, $szExt, $hPic = -99
    Global $aDropFiles[1], $WM_DROPFILES = 0x233
    Global $currentItem[2], $title, $currentOpt[2] = ["none"]

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

    ;$idfrmMain = GUICreate("BMP-, GIF- & JPG-Viewer", 824, 550, -1, -1, -1, $WS_EX_ACCEPTFILES)
    $idfrmMain = GUICreate("", 1150, 550, -1, -1, -1, $WS_EX_ACCEPTFILES)
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2|Spalte3', 830, 10, 300, 200, $LVS_REPORT)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 70)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 60)
    _GUICtrlListView_SetColumnWidth($hListView, 2, $LVSCW_AUTOSIZE_USEHEADER )
    For $i = 1 To 9
    GUICtrlCreateListViewItem('Z. ' & $i & ' - Sp. 1|Z. ' & $i & ' - Sp. 2|Z. ' & $i & ' - Sp. 3', $hListView)
    Next
    Local $idfilemenu = GUICtrlCreateMenu("&Datei")
    Local $idfileitem = GUICtrlCreateMenuItem("Öffnen", $idfilemenu)
    GUICtrlSetState(-1, $GUI_DEFBUTTON)
    Local $idexititem = GUICtrlCreateMenuItem("Beenden", $idfilemenu)
    Local $idLV_Files = GUICtrlCreateListView("Name: |Pfad", 519, 5, 300, 490, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    Local $idbtnShow = GUICtrlCreateButton("&Zeige Bild", 519, 500, 140, 25)
    Local $idClearLV = GUICtrlCreateButton("&Listview &leeren", 669, 500, 140, 25)
    ;GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")
    GUISetState()

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

    ;------------------------------------------

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

    _Notify_SetHandletoFunc($idLV_Files, "_LV_Viewer")
    ;_Notify_SetHandletoFunc($idLV_Files, "_LV")
    _StartUp_Notify(True)

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

    ;------------------------------------------

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_DROPPED
    _FilesDropped()
    Case $idfileitem

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

    $message = "Um mehrere Dateien auszuwählen die Strg-Taste, Strg-A oder die Shift-Taste drücken."

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

    $var = FileOpenDialog($message, @ScriptDir & "", "Bilder (*.jpg;*.bmp)", 1 + 4)
    If @error Then
    MsgBox(4096, "", "Keine Datei(en) ausgewählt")
    Else
    _GUICtrlListView_BeginUpdate($idLV_Files)
    $aFiles = StringSplit($var, "|")
    If $aFiles[0] > 1 Then ;trifft nur bei Mehrfachauwal zu
    ;$aFiles[0] enthält Anzahl der Strings
    ;$aFiles[1] enthält den Pfad für alle ausgewählten Bilder
    ;$aFiles[2] enthält 1. Bild
    ;$aFiles[n+1] enthält n. Bild

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

    ;Rückgabe des Fileopenialogs in einzzenlne Strings für Array splitten
    ;_ArrayDisplay($aFiles) ;Array anzeigen nur zu Verständnisuwecken evtl. aktivieren

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

    For $i = 2 To $aFiles[0]
    GUICtrlCreateListViewItem($aFiles[$i] & "|" & $aFiles[1], $idLV_Files)
    Next
    Else ;nur eine Datei ausgewählt
    ConsoleWrite($aFiles[1] & @CRLF)
    _PathSplit($aFiles[1], $szDrive, $szDir, $szFName, $szExt)
    GUICtrlCreateListViewItem($szFName & $szExt & "|" & $szDrive & $szDir, $idLV_Files)
    EndIf
    _GUICtrlListView_SetColumnWidth($idLV_Files, 0, $LVSCW_AUTOSIZE)
    ;setzt die 1 Spalte auf die benötigte Breite des längsten Eintrags
    _GUICtrlListView_SetColumnWidth($idLV_Files, 1, 0) ;zweite Spalte versteckt
    _GUICtrlListView_EndUpdate($idLV_Files)
    EndIf
    Case $idClearLV
    _GUICtrlListView_DeleteAllItems($idLV_Files)
    Case $idbtnShow
    $aItem = _GUICtrlListView_GetItemTextArray($idLV_Files)
    _ShowPic($aItem)
    Case $GUI_EVENT_CLOSE, $idexititem
    Exit
    EndSwitch
    WEnd

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

    Func _ShowPic($aItem)
    Local $sImageName = $aItem[2] & "\" & $aItem[1]
    ;$aItem[0] enthält Anzahl der Spalten [$aIem[1] die 1. Spalte usw.
    ;_ArrayDisplay($aItem) ; nur zu Verständnisuwecken evtl. aktivieren
    ConsoleWrite("Pfad zur Datei:" & $aItem[2] & "\" & $aItem[1] & @CRLF) ;nur zu Verständnisuwecken evtl. deaktivieren
    _GDIPlus_Startup()
    Local $hImage = _GDIPlus_ImageLoadFromFile($sImageName)
    Local $iX = _GDIPlus_ImageGetWidth($hImage)
    Local $iY = _GDIPlus_ImageGetHeight($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Local $iRatio = $iX / $iY
    ConsoleWrite("Orig.: " & $iX & " " & $iY & " " & $iRatio & @CRLF)
    If $iRatio >= 1 Then
    $iX = 500
    $iY = $iX / $iRatio
    Else
    $iY = 300
    $iX = $iY * $iRatio
    EndIf
    ConsoleWrite("Neu: " & $iX & " " & $iY & " " & $iRatio & @CRLF)
    If $hPic <> -99 Then GUICtrlDelete($hPic)
    $hPic = GUICtrlCreatePic($sImageName, 5, 5, $iX, $iY)
    EndFunc ;==>_ShowPic

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

    #region ;Drag and Drop und Doppelklick
    Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
    ConsoleWrite("WM_DropFiles_Func " & @CRLF)
    Local $nSize, $pFileName
    Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
    For $i = 0 To $nAmt[0] - 1
    $nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
    $nSize = $nSize[0] + 1
    $pFileName = DllStructCreate("char[" & $nSize & "]")
    DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize)
    ReDim $aDropFiles[$i + 1]
    $aDropFiles[$i] = DllStructGetData($pFileName, 1)
    $pFileName = 0
    Next
    EndFunc ;==>WM_DROPFILES_FUNC

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

    Func _FilesDropped()
    ConsoleWrite("Bin da " & @CRLF)
    Local $szDrive, $szDir, $szFName, $szExt, $split
    _GUICtrlListView_BeginUpdate($idLV_Files)
    For $i = 0 To UBound($aDropFiles) - 1
    $split = _PathSplit($aDropFiles[$i], $szDrive, $szDir, $szFName, $szExt)
    $szExt = StringUpper($szExt)
    ;;consolewrite($aDropFiles[$i] & ", " & $szExt & @CRLF)
    Switch $szExt
    Case ".JPG", ".BMP", ".GIF"
    GUICtrlCreateListViewItem($szFName & $szExt & "|" & $szDrive & $szDir, $idLV_Files)
    EndSwitch
    Next
    _GUICtrlListView_SetColumnWidth($idLV_Files, 0, $LVSCW_AUTOSIZE)
    ;setzt die 1 Spalte auf die benötigte Breite des längsten Eintrags
    _GUICtrlListView_SetColumnWidth($idLV_Files, 1, 0) ;zweite Spalte versteckt
    _GUICtrlListView_EndUpdate($idLV_Files)
    EndFunc ;==>_FilesDropped

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

    ; ------------------------ WM_Notify ---------------------------------------------------------------

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

    Func _LV_Viewer($hWndFrom, $iIDFrom, $iNotifyCode, $wParam, $lParam)
    Local $tagNMHDR, $event, $code, $aItem
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $idLV_Files And $code = -3 And _GUICtrlListView_GetSelectedCount($idLV_Files) > 0 Then
    $aItem = _GUICtrlListView_GetItemTextArray($idLV_Files)
    ;;consolewrite($aItem[1] & ", " & $aItem[3] & @CRLF)
    _ShowPic($aItem)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Diese Version mit beiden Scripten geht nicht. Hier kommt ein Fehler der UDF:

    Spoiler anzeigen
    [autoit]


    #cs -----------------------------------------------------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: AutoBert: http://www.autoit.de/index.php?page=Thread&threadID=21667

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

    Skriptbeispiel für den Umgang mit FileOpenDialog, GUICtrlCreateListView, GUICtrlCreateListViewItem,
    GUIRegisterMsg speziell für das Event $GUI_EVENT_DROPPED
    #ce -------------------------------------------------------------------------------------------------------------------------
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <GuiListView.au3>
    #include <File.au3>
    #include <array.au3>
    #include <GDIPlus.au3>
    #include <GUIListBox.au3>
    #include <GuiConstantsEx.au3>
    #include <RegisterNotify_UDF.au3>

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

    ;Opt('MustDeclareVars', 1)

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

    Global $msg, $message, $var, $aFiles, $idfrmMain, $sSourcePath, $aItem
    Global $szDrive, $szDir, $szFName, $szExt, $hPic = -99
    Global $aDropFiles[1], $WM_DROPFILES = 0x233
    Global $currentItem[2], $title, $currentOpt[2] = ["none"]

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

    ;$idfrmMain = GUICreate("BMP-, GIF- & JPG-Viewer", 824, 550, -1, -1, -1, $WS_EX_ACCEPTFILES)
    $idfrmMain = GUICreate("", 1150, 550, -1, -1, -1, $WS_EX_ACCEPTFILES)
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2|Spalte3', 830, 10, 300, 200, $LVS_REPORT)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 70)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 60)
    _GUICtrlListView_SetColumnWidth($hListView, 2, $LVSCW_AUTOSIZE_USEHEADER )
    For $i = 1 To 9
    GUICtrlCreateListViewItem('Z. ' & $i & ' - Sp. 1|Z. ' & $i & ' - Sp. 2|Z. ' & $i & ' - Sp. 3', $hListView)
    Next
    Local $idfilemenu = GUICtrlCreateMenu("&Datei")
    Local $idfileitem = GUICtrlCreateMenuItem("Öffnen", $idfilemenu)
    GUICtrlSetState(-1, $GUI_DEFBUTTON)
    Local $idexititem = GUICtrlCreateMenuItem("Beenden", $idfilemenu)
    Local $idLV_Files = GUICtrlCreateListView("Name: |Pfad", 519, 5, 300, 490, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    Local $idbtnShow = GUICtrlCreateButton("&Zeige Bild", 519, 500, 140, 25)
    Local $idClearLV = GUICtrlCreateButton("&Listview &leeren", 669, 500, 140, 25)
    ;GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")
    GUISetState()

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

    ;------------------------------------------

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

    $EditBox = GUICreate('', 200, 30, -1, -1, BitOR($WS_POPUP,$WS_BORDER), $WS_EX_TOPMOST)
    $dummy = GUICtrlCreateDummy()
    $hEdit = GUICtrlCreateInput('', 5, 5, 190, 20, $SS_CENTER)
    HotKeySet('{ESC}', '_EscEdit')
    Global $AccelKeys[1][2]=[["{ENTER}", $dummy]]
    GUICtrlSetOnEvent($dummy, "_EditEnter")
    GUISetAccelerators($AccelKeys)
    _Notify_SetHandletoFunc($idLV_Files, "_LV_Viewer")
    _Notify_SetHandletoFunc($idLV_Files, "_LV")
    _StartUp_Notify(True)

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

    ;------------------------------------------

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_DROPPED
    _FilesDropped()
    Case $idfileitem

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

    $message = "Um mehrere Dateien auszuwählen die Strg-Taste, Strg-A oder die Shift-Taste drücken."

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

    $var = FileOpenDialog($message, @ScriptDir & "", "Bilder (*.jpg;*.bmp)", 1 + 4)
    If @error Then
    MsgBox(4096, "", "Keine Datei(en) ausgewählt")
    Else
    _GUICtrlListView_BeginUpdate($idLV_Files)
    $aFiles = StringSplit($var, "|")
    If $aFiles[0] > 1 Then ;trifft nur bei Mehrfachauwal zu
    ;$aFiles[0] enthält Anzahl der Strings
    ;$aFiles[1] enthält den Pfad für alle ausgewählten Bilder
    ;$aFiles[2] enthält 1. Bild
    ;$aFiles[n+1] enthält n. Bild

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

    ;Rückgabe des Fileopenialogs in einzzenlne Strings für Array splitten
    ;_ArrayDisplay($aFiles) ;Array anzeigen nur zu Verständnisuwecken evtl. aktivieren

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

    For $i = 2 To $aFiles[0]
    GUICtrlCreateListViewItem($aFiles[$i] & "|" & $aFiles[1], $idLV_Files)
    Next
    Else ;nur eine Datei ausgewählt
    ConsoleWrite($aFiles[1] & @CRLF)
    _PathSplit($aFiles[1], $szDrive, $szDir, $szFName, $szExt)
    GUICtrlCreateListViewItem($szFName & $szExt & "|" & $szDrive & $szDir, $idLV_Files)
    EndIf
    _GUICtrlListView_SetColumnWidth($idLV_Files, 0, $LVSCW_AUTOSIZE)
    ;setzt die 1 Spalte auf die benötigte Breite des längsten Eintrags
    _GUICtrlListView_SetColumnWidth($idLV_Files, 1, 0) ;zweite Spalte versteckt
    _GUICtrlListView_EndUpdate($idLV_Files)
    EndIf
    Case $idClearLV
    _GUICtrlListView_DeleteAllItems($idLV_Files)
    Case $idbtnShow
    $aItem = _GUICtrlListView_GetItemTextArray($idLV_Files)
    _ShowPic($aItem)
    Case $GUI_EVENT_CLOSE, $idexititem
    Exit
    EndSwitch
    WEnd

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

    Func _ShowPic($aItem)
    Local $sImageName = $aItem[2] & "\" & $aItem[1]
    ;$aItem[0] enthält Anzahl der Spalten [$aIem[1] die 1. Spalte usw.
    ;_ArrayDisplay($aItem) ; nur zu Verständnisuwecken evtl. aktivieren
    ConsoleWrite("Pfad zur Datei:" & $aItem[2] & "\" & $aItem[1] & @CRLF) ;nur zu Verständnisuwecken evtl. deaktivieren
    _GDIPlus_Startup()
    Local $hImage = _GDIPlus_ImageLoadFromFile($sImageName)
    Local $iX = _GDIPlus_ImageGetWidth($hImage)
    Local $iY = _GDIPlus_ImageGetHeight($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Local $iRatio = $iX / $iY
    ConsoleWrite("Orig.: " & $iX & " " & $iY & " " & $iRatio & @CRLF)
    If $iRatio >= 1 Then
    $iX = 500
    $iY = $iX / $iRatio
    Else
    $iY = 300
    $iX = $iY * $iRatio
    EndIf
    ConsoleWrite("Neu: " & $iX & " " & $iY & " " & $iRatio & @CRLF)
    If $hPic <> -99 Then GUICtrlDelete($hPic)
    $hPic = GUICtrlCreatePic($sImageName, 5, 5, $iX, $iY)
    EndFunc ;==>_ShowPic

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

    #region ;Drag and Drop und Doppelklick
    Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
    ConsoleWrite("WM_DropFiles_Func " & @CRLF)
    Local $nSize, $pFileName
    Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
    For $i = 0 To $nAmt[0] - 1
    $nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
    $nSize = $nSize[0] + 1
    $pFileName = DllStructCreate("char[" & $nSize & "]")
    DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize)
    ReDim $aDropFiles[$i + 1]
    $aDropFiles[$i] = DllStructGetData($pFileName, 1)
    $pFileName = 0
    Next
    EndFunc ;==>WM_DROPFILES_FUNC

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

    Func _FilesDropped()
    ConsoleWrite("Bin da " & @CRLF)
    Local $szDrive, $szDir, $szFName, $szExt, $split
    _GUICtrlListView_BeginUpdate($idLV_Files)
    For $i = 0 To UBound($aDropFiles) - 1
    $split = _PathSplit($aDropFiles[$i], $szDrive, $szDir, $szFName, $szExt)
    $szExt = StringUpper($szExt)
    ;;consolewrite($aDropFiles[$i] & ", " & $szExt & @CRLF)
    Switch $szExt
    Case ".JPG", ".BMP", ".GIF"
    GUICtrlCreateListViewItem($szFName & $szExt & "|" & $szDrive & $szDir, $idLV_Files)
    EndSwitch
    Next
    _GUICtrlListView_SetColumnWidth($idLV_Files, 0, $LVSCW_AUTOSIZE)
    ;setzt die 1 Spalte auf die benötigte Breite des längsten Eintrags
    _GUICtrlListView_SetColumnWidth($idLV_Files, 1, 0) ;zweite Spalte versteckt
    _GUICtrlListView_EndUpdate($idLV_Files)
    EndFunc ;==>_FilesDropped

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

    ;---------------------------------------Mod ----------------------------------------------------------

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

    Func _LeftDblClick($Info)
    If $Info[3] = -1 Then Return
    If $currentOpt[0] = "none" Then
    $currentOpt[0] = Opt('GUICoordMode', 1)
    $currentOpt[1] = Opt("GUIOnEventMode", 1)
    EndIf
    GUICtrlSetOnEvent($hEdit, '_EditEnter')
    _GUICtrlListView_SetSelectedColumn($Info[1], $Info[4])
    $title = WinGetTitle($idfrmMain)
    Local $mouse = MouseGetPos(), $posEdit = WinGetPos($EditBox)
    Local $posGUI = WinGetPos($idfrmMain), $posLV = ControlGetPos($idfrmMain, '', $hListView)
    Local $colInfo = _GUICtrlListView_GetColumn($Info[1], $Info[4]), $sumWidth = 0, $tmp
    WinSetTitle($idfrmMain, '', 'Editiere: Zeile ' & $Info[3]+1 & ', ' & $colInfo[5])
    For $i = 0 To $Info[4]
    $tmp = _GUICtrlListView_GetColumn($Info[1], $i)
    $sumWidth += $tmp[4]
    Next
    $sumWidth -= $colInfo[4]
    Local $xPos = $posGUI[0]+$posLV[0]+$sumWidth
    If $xPos+$colInfo[4]+10 > @DesktopWidth Then $xPos = @DesktopWidth - ($colInfo[4] + 10)
    If $xPos < 0 Then $xPos = 0
    WinMove($EditBox, '', $xPos, $mouse[1]-$posEdit[3], $colInfo[4]+10)
    GUICtrlSetData($hEdit, _GUICtrlListView_GetItemText($Info[1], $Info[3], $Info[4]))
    $currentItem[0] = $Info[3]
    $currentItem[1] = $Info[4]
    GUISetState(@SW_SHOW, $EditBox)
    EndFunc

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

    Func _EscEdit()
    WinSetTitle($idfrmMain, '', $title)
    Opt('GUICoordMode', $currentOpt[0])
    Opt("GUIOnEventMode", $currentOpt[1])
    $currentOpt[0] = "none"
    GUISetState(@SW_HIDE, $EditBox)
    EndFunc

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

    Func _EditEnter()
    WinSetTitle($idfrmMain, '', $title)
    Opt('GUICoordMode', $currentOpt[0])
    Opt("GUIOnEventMode", $currentOpt[1])
    $currentOpt[0] = "none"
    _GUICtrlListView_SetItemText($hListView, $currentItem[0], GUICtrlRead($hEdit), $currentItem[1])
    GUISetState(@SW_HIDE, $EditBox)
    EndFunc

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

    ; ------------------------ WM_Notify ---------------------------------------------------------------

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

    Func _LV_Viewer($hWndFrom, $iIDFrom, $iNotifyCode, $wParam, $lParam)
    Local $tagNMHDR, $event, $code, $aItem
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $idLV_Files And $code = -3 And _GUICtrlListView_GetSelectedCount($idLV_Files) > 0 Then
    $aItem = _GUICtrlListView_GetItemTextArray($idLV_Files)
    ;;consolewrite($aItem[1] & ", " & $aItem[3] & @CRLF)
    _ShowPic($aItem)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func _LV($hWndFrom, $iIDFrom, $iNotifyCode, $wParam, $lParam)
    Local $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView ; ID des LV
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView) ; ID des LV
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
    Local $aInfo[5] = [$hWndFrom, $iIDFrom, $iCode, DllStructGetData($tInfo, "Index"), _
    DllStructGetData($tInfo, "SubItem")]
    _LeftDblClick($aInfo)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Mußt unter Datei -> Öffnen Bilder auswählen und dann den Itemeintrag Doppelklicken um das Bild zu sehen.

    Viele Grüße
    Thomas

  • WM_Notify per Funktion

    • TJF
    • 31. Oktober 2010 um 07:20

    Hallo Raupi,

    ich wollte gestern mal zum Test Dein vielversprechendes Script einsetzen und habe 2 WM_Notify Funktionen versucht damit zusammenzuführen. Dabei habe ich auf die Schnelle diese beiden Scripten genommen: [Beispiel] BMP-, GIF- & JPG-Viewer und https://autoit.de/index.php?page…49074#post49074

    Aus diesen beiden

    Spoiler anzeigen
    [autoit]


    Func WM_NOTIFY($hWnd, $msgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code, $aItem
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $idLV_Files And $code = -3 And _GUICtrlListView_GetSelectedCount($idLV_Files) > 0 Then
    $aItem = _GUICtrlListView_GetItemTextArray($idLV_Files)
    ;;consolewrite($aItem[1] & ", " & $aItem[3] & @CRLF)
    _ShowPic($aItem)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView ; ID des LV
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView) ; ID des LV
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    Local $aInfo[5] = [$hWndFrom, $iIDFrom, $iCode, DllStructGetData($tInfo, "Index"), _
    DllStructGetData($tInfo, "SubItem")]
    _LeftDblClick($aInfo)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    habe ich das hier gemacht:

    Spoiler anzeigen
    [autoit]


    _Notify_SetHandletoFunc($idLV_Files, "_LV_Viewer")
    _Notify_SetHandletoFunc($hListV, "_LV")
    _StartUp_Notify(True)

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

    Func _LV_Viewer($hWndFrom, $iIDFrom, $iNotifyCode, $wParam, $lParam)
    Local $tagNMHDR, $event, $code, $aItem
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return 0
    $code = DllStructGetData($tagNMHDR, 3)
    If $wParam = $idLV_Files And $code = -3 And _GUICtrlListView_GetSelectedCount($idLV_Files) > 0 Then
    $aItem = _GUICtrlListView_GetItemTextArray($idLV_Files)
    ;;consolewrite($aItem[1] & ", " & $aItem[3] & @CRLF)
    _ShowPic($aItem)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func _LV($hWndFrom, $iIDFrom, $iNotifyCode, $wParam, $lParam)
    Local $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListV ; ID des LV
    If Not IsHWnd($hListV) Then $hWndListView = GUICtrlGetHandle($hListV) ; ID des LV
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
    Local $aInfo[5] = [$hWndFrom, $iIDFrom, $iCode, DllStructGetData($tInfo, "Index"), _
    DllStructGetData($tInfo, "SubItem")]
    _LeftDblClick($aInfo)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]

    Das zweite Script von BugFix ging immer. Das erste dagegen nur in Abwesenheit des zweiten (auch immer mit Deiner UDF). Siehst Du als Vertrauter "WM_Notifier" hier einen Fehler? Sind 2 Listviews im Spiel.

    Dank und Gruß
    Thomas

  • CD Infomationen (Artist, Name, Titel und noch vieles mehr) von FreeDB.org empfangen

    • TJF
    • 27. Oktober 2010 um 10:54

    Die Lösung (anstatt "Local"):

    [autoit]


    Global $hSocket

    [/autoit]

    Viele Grüße
    Thomas

  • CD Infomationen (Artist, Name, Titel und noch vieles mehr) von FreeDB.org empfangen

    • TJF
    • 26. Oktober 2010 um 19:55

    Hallo,

    vieleicht steh' ich grade auf dem Schlauch: Warum funktioniert die Sache nicht mehr, wenn das Programm in eine Funktion gesetzt wird? Also einfach:

    [autoit]


    _Test()

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

    Func _Test()
    ; bekannter Quelltext
    EndFunc

    [/autoit]

    Viele Grüße
    Thomas

  • CD Infomationen (Artist, Name, Titel und noch vieles mehr) von FreeDB.org empfangen

    • TJF
    • 16. Oktober 2010 um 20:06

    Ich auch nicht - bis Heute :) Das ist der Fall, wenn es nur eine einzige DiscID für einen einzigen Titel in FreeDB.org gibt. Übrigens habe ich jetzt gesehen, dass das auch EAC genauso "handelt". Wenn es mehrere Einträge gibt, erscheint zuerst eine Auflistung. Wenn der o.g. eindeutige Fall vorliegt, wird alles sofort in die Felder eingetragen. Meine heutige Ergänzung ist also unbedingt notwendig, sonst gibt es einen Laufzeitfehler...

    Viele Grüße
    Thomas

  • CD Infomationen (Artist, Name, Titel und noch vieles mehr) von FreeDB.org empfangen

    • TJF
    • 16. Oktober 2010 um 14:21

    So sollte es passen. Die If-Anweisung durch diese ersetzen:

    Spoiler anzeigen
    [autoit]


    If StringInStr($sDatabase, "211 Found inexact matches") Or StringInStr($sDatabase, "210 Found exact matches") Then
    GUICreate("Found", 520, 485)
    $hListV = GUICtrlCreateListView("Founded matches", 10, 10, 500, 450)
    GUICtrlSendMsg(-1, 0x101E, 0, 180)
    $aSS = StringSplit($sDatabase, @CRLF, 1)
    For $i = 2 To $aSS[0] - 2
    GUICtrlCreateListViewItem($aSS[$i], $hListV)
    If $i = 2 Then GUICtrlSetState(-1,256);$GUI_FOCUS
    Next
    $hBut_OK = GUICtrlCreateButton("OK", 10, 463, 500, 20,1)
    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $hBut_OK
    $aRead = StringSplit(StringTrimRight(GUICtrlRead(GUICtrlRead($hListV)), 1), " ")
    GUIDelete()
    $read = "cddb read " & $aRead[1] & " " & $aRead[2]
    Local $hSocket
    TCPSend($hSocket, $read & @CRLF)
    $sDatabase = __TCPRecv2($hSocket)
    If @error Or (Not $sDatabase) Then Exit MsgBox(16, "Error", "2errorcode " & @error & @CRLF & $sDatabase)
    ExitLoop
    Case - 3 ;$GUI_EVENT_CLOSE = -3
    Exit
    EndSwitch
    WEnd
    ElseIf StringInStr($sDatabase, "200") Then
    $aSS = StringSplit($sDatabase, @CRLF, 1)
    $aRead = StringSplit($ass[1], " ")
    $read = "cddb read " & $aRead[2] & " " & $aRead[3]
    Local $hSocket
    TCPSend($hSocket, $read & @CRLF)
    $sDatabase = __TCPRecv2($hSocket)
    If @error Or (Not $sDatabase) Then Exit MsgBox(16, "Error", "2errorcode " & @error & @CRLF & $sDatabase)
    EndIf

    [/autoit]

    Viele Grüße
    Thomas

  • CD Infomationen (Artist, Name, Titel und noch vieles mehr) von FreeDB.org empfangen

    • TJF
    • 16. Oktober 2010 um 12:24

    Hi,

    doch noch nicht perfekt. Nach der x-ten CD kommt der Fall "200" - ohne Auflistung. Lösung folgt in Kürze, wenn ich (oder jemand anders Zeit hat... :) ).

    Das ist die Serverkommunikation im Fall 210:

    Code
    cddb query 270e2d04 4 150 23715 126335 174815 3631
    210 Found exact matches, list follows (until terminating `.')
    misc 270e2d04 Carl Orff / Carmina Burana
    classical 270e2d04 Orff - Robert Shaw, Atlanta Symphony Orch / Carmina Burana
    .
    cddb read misc 270e2d04

    Das passiert im Falle 200:

    Code
    cddb query a911560b 11 150 35920 64065 102007 129775 159565 188485 217245 244237 274870 299050 4440
    200 blues a911560b Reinhard Mey / Lebenszeichen Live (CD1)
    cddb read blues a911560b

    Viele Grüße
    Thomas

  • CD Infomationen (Artist, Name, Titel und noch vieles mehr) von FreeDB.org empfangen

    • TJF
    • 6. Oktober 2010 um 19:25

    Hi,

    habe ich gar nicht mehr daran gedacht. Anliegend die ganze aktuelle Lösung. Mußte noch einiges geändert werden. Ist aber kommentiert. So sollte es perfekt sein :)

    Gruß
    Thomas

    Dateien

    CDDB.zip 4,61 kB – 397 Downloads
  • CD Infomationen (Artist, Name, Titel und noch vieles mehr) von FreeDB.org empfangen

    • TJF
    • 16. September 2010 um 13:37

    Ok. Lösung gefunden:

    example.au3 Änderung der Zeile 47

    [autoit]


    If StringInStr($sDatabase, "211 Found inexact matches") Then

    [/autoit]

    in:

    [autoit]


    If StringInStr($sDatabase, "211 Found inexact matches") Or StringInStr($sDatabase, "210 Found exact matches") Then

    [/autoit]

    CDDB.au3 Änderung der modifizierten Version, Zeile 90

    [autoit]


    If StringInStr($sRecv, "211 Found inexact matches") And $fSecTry = False Then

    [/autoit]

    in

    [autoit]


    If StringInStr($sRecv, "211 Found inexact matches") Or StringInStr($sRecv, "210 Found exact matches") And $fSecTry = False Then

    [/autoit]

    und Zeile 94

    [autoit]


    ElseIf StringInStr($sRecv, "211 Found inexact matches") And $fSecTry Then

    [/autoit]

    in:

    [autoit]


    ElseIf StringInStr($sRecv, "211 Found inexact matches") Or StringInStr($sRecv, "210 Found exact matches") And $fSecTry Then

    [/autoit]

    Gruß
    Thomas

  • CD Infomationen (Artist, Name, Titel und noch vieles mehr) von FreeDB.org empfangen

    • TJF
    • 16. September 2010 um 13:02

    Wenn man mal testweise aus dem example.au3 die folgenden beiden Zeilen (Zeile 45 und 47) ändert (testweise auch den @error rausnimmt), also diese beiden Zeilen

    [autoit]


    If @error Or (Not $sDatabase) Then Exit MsgBox(16, "Errorcode", "_FreeDBRecvDB: " & @error & @CRLF & $sDatabase)
    If StringInStr($sDatabase, "211 Found inexact matches") Then

    [/autoit]

    durch diese ersetzt

    [autoit]


    If Not $sDatabase Then Exit MsgBox(16, "Errorcode", "_FreeDBRecvDB: " & @error & @CRLF & $sDatabase)
    If StringInStr($sDatabase, "211 Found inexact matches") Or StringInStr($sDatabase, "210 Found exact matches") Then

    [/autoit]

    dann wird immerhin "Found" richtig, d.h. mit mehreren Zeilen angezeigt. Allerdings bleibt dann das Fenster mit den Infos leer. Der @error wird also auf jeden Fall fehlerhaft generiert...

  • CD Infomationen (Artist, Name, Titel und noch vieles mehr) von FreeDB.org empfangen

    • TJF
    • 16. September 2010 um 10:22

    Hi,

    ich habe mal die modifizierte Version (mit Code von progandy) getestet (inkl. Anpassung von "AdlibRegister" und "AdlibUnregister"). Scheint zunächst perfekt zu funktionieren. Allerdings - wenn es mehrere "found matches" gibt - kommt ein errorcode 7. Bezogen auf "_FreeDBRecvDB". Das dürfte daran liegen, dass in diesem Code-Teil in "_FreeDBRecvDB" (CDDB.au3)

    [autoit]


    TCPSend($hSocket, $sQuery & @CRLF)
    $sRecv = __TCPRecv($hSocket) ; genre CDID Artist / CDName, z.B. 200 rock b009520e Green Day / Dookie
    If StringInStr($sRecv, "211 Found inexact matches") And $fSecTry = False Then
    TCPCloseSocket($hSocket)
    TCPShutdown()
    Return _FreeDBRecvDB(StringReplace($sQuery, $sCDChcksum, StringLower(Hex(Number("0x" & $sCDChcksum) - 0x200, 8))), True)
    ElseIf StringInStr($sRecv, "211 Found inexact matches") And $fSecTry Then
    Return $sRecv
    EndIf
    If Not StringInStr($sRecv, "200") Then Return SetError(7, 0, $sRecv)
    $aSS = StringSplit($sRecv, " ")

    [/autoit]

    oder in dem folgenden modif. Code von progandy der Fall "210 Found exact matches" (also mehrere "matches") nicht behandelt ist. Allerdings steige ich hier noch nicht so ganz durch.

    Hat jemand eine Idee?

    Unten noch ein Bildschirmfoto einer solchen CD (Dire Straits - Love over Gold). Trifft wahrscheinlich auf die meisten weitverbreiteten CDs zu.

    Dank und Gruß
    Thomas

    Bilder

    • errorcode_210_direstraits_love_over_gold.jpg
      • 14,95 kB
      • 394 × 149
  • Listbox - alle gewählten Items abwählen

    • TJF
    • 1. September 2010 um 21:08

    Dreht bei mir nur die Markierung um (erst ein Item markiert, danach alle - ausser diesem einen)...

  • Listbox - alle gewählten Items abwählen

    • TJF
    • 1. September 2010 um 19:36

    Wow! Funktioniert!

    Tausend Dank!

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™