Hi,
danke! Beinahe
So geht's:
[autoit]
ShellExecuteWait("cmd" ," /k title Neuer Titel")
Viele Grüße
Thomas
Hi,
danke! Beinahe
So geht's:
[autoit]
ShellExecuteWait("cmd" ," /k title Neuer Titel")
Viele Grüße
Thomas
Hi,
ich will mit sowas z.B.
[autoit]
ShellExecuteWait("cmd")
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
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
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
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
Danke Raupi
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
Bei dieser Version geht der Viewer (mit Deiner UDF - ohne das BugFix-Script):
#cs -----------------------------------------------------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: AutoBert: http://www.autoit.de/index.php?page=Thread&threadID=21667
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>
;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"]
;$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]_Notify_SetHandletoFunc($idLV_Files, "_LV_Viewer")
;_Notify_SetHandletoFunc($idLV_Files, "_LV")
_StartUp_Notify(True)
;------------------------------------------
[/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_DROPPED
_FilesDropped()
Case $idfileitem
$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
;Rückgabe des Fileopenialogs in einzzenlne Strings für Array splitten
;_ArrayDisplay($aFiles) ;Array anzeigen nur zu Verständnisuwecken evtl. aktivieren
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
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
#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
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
; ------------------------ 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
Diese Version mit beiden Scripten geht nicht. Hier kommt ein Fehler der UDF:
#cs -----------------------------------------------------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: AutoBert: http://www.autoit.de/index.php?page=Thread&threadID=21667
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>
;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"]
;$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]$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]While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_DROPPED
_FilesDropped()
Case $idfileitem
$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
;Rückgabe des Fileopenialogs in einzzenlne Strings für Array splitten
;_ArrayDisplay($aFiles) ;Array anzeigen nur zu Verständnisuwecken evtl. aktivieren
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
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
#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
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
;---------------------------------------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
Func _EscEdit()
WinSetTitle($idfrmMain, '', $title)
Opt('GUICoordMode', $currentOpt[0])
Opt("GUIOnEventMode", $currentOpt[1])
$currentOpt[0] = "none"
GUISetState(@SW_HIDE, $EditBox)
EndFunc
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
; ------------------------ 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
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
Mußt unter Datei -> Öffnen Bilder auswählen und dann den Itemeintrag Doppelklicken um das Bild zu sehen.
Viele Grüße
Thomas
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
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
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
habe ich das hier gemacht:
_Notify_SetHandletoFunc($idLV_Files, "_LV_Viewer")
_Notify_SetHandletoFunc($hListV, "_LV")
_StartUp_Notify(True)
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
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
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
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
So sollte es passen. Die If-Anweisung durch diese ersetzen:
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
Viele Grüße
Thomas
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:
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:
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
Ok. Lösung gefunden:
example.au3 Änderung der Zeile 47
[autoit]
If StringInStr($sDatabase, "211 Found inexact matches") Then
in:
[autoit]
If StringInStr($sDatabase, "211 Found inexact matches") Or StringInStr($sDatabase, "210 Found exact matches") Then
CDDB.au3 Änderung der modifizierten Version, Zeile 90
[autoit]
If StringInStr($sRecv, "211 Found inexact matches") And $fSecTry = False Then
in
[autoit]
If StringInStr($sRecv, "211 Found inexact matches") Or StringInStr($sRecv, "210 Found exact matches") And $fSecTry = False Then
und Zeile 94
[autoit]
ElseIf StringInStr($sRecv, "211 Found inexact matches") And $fSecTry Then
in:
[autoit]
ElseIf StringInStr($sRecv, "211 Found inexact matches") Or StringInStr($sRecv, "210 Found exact matches") And $fSecTry Then
Gruß
Thomas
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
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
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...
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, " ")
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
Dreht bei mir nur die Markierung um (erst ein Item markiert, danach alle - ausser diesem einen)...
Wow! Funktioniert!
Tausend Dank!