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

Beiträge von Bitnugger

  • _IsPressed in einer Schleife bei vielen Tasten langsam

    • Bitnugger
    • 8. Dezember 2016 um 21:05

    Die Funktion _WinAPI_GetKeyboardState() kopiert den Status der 256 Virtual Keys in einen Buffer, den du dann in einer Schleife auslesen kannst.

  • Checkboxen /IF /Else

    • Bitnugger
    • 5. Dezember 2016 um 01:55

    Ich würde das so machen...

    Loop
    AutoIt
    ;-- TIME_STAMP   2016-12-05 01:53:33
    
    
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    _Example1()
    _Example2()
    
    
    Func _Example1()
    	#Region ### START Koda GUI section ### Form=
    	Local $hForm1, $idButton, $idCheck, $iCheck, $nMsg, $sMsg
    	$hForm1 = GUICreate("Form1", 615, 168, 192, 124)
    	$idButton = GUICtrlCreateButton("adssada", 264, 56, 110, 25)
    	$idCheck = GUICtrlCreateCheckbox("Test", 268, 92, 97, 17)
    	GUISetState(@SW_SHOW)
    	#EndRegion ### END Koda GUI section ###
    	While 1
    		Switch GUIGetMsg()
    			Case $GUI_EVENT_CLOSE
    				GUIDelete()
    				ExitLoop	; kein Exit, weil wir nun 2. Example starten
    			Case $idButton
    				$sMsg = (_IsChecked($idCheck) = $GUI_CHECKED) ? "Geht" : "GEHT NED"
    				MsgBox(1, "_Example1()", $sMsg)
    		EndSwitch
    	WEnd
    EndFunc  ;==>_Example1
    
    
    Func _Example2()
    	#Region ### START Koda GUI section ### Form=
    	Local $hForm1, $idButton, $idCheck, $iCheck, $nMsg, $sMsg
    	$hForm1 = GUICreate("Form1", 615, 168, 192, 124)
    	$idButton = GUICtrlCreateButton("adssada", 264, 56, 110, 25)
    	$idCheck = GUICtrlCreateCheckbox("Test", 268, 92, 97, 17)
    	GUISetState(@SW_SHOW)
    	#EndRegion ### END Koda GUI section ###
    	While 1
    		$nMsg = GUIGetMsg()
    		Select
    			Case $nMsg = $GUI_EVENT_CLOSE
    				Exit
    			Case $nMsg = $idButton
    				$sMsg = (_IsChecked($idCheck) = $GUI_CHECKED) ? "Geht" : "GEHT NED"
    				MsgBox(1, "_Example2()", $sMsg)
    		EndSelect
    	WEnd
    EndFunc  ;==>_Example2
    
    
    Func _IsChecked($idControlID)
    	Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
    EndFunc  ;==>_IsChecked
    Alles anzeigen
  • Drag und Drop von Outlook

    • Bitnugger
    • 4. Dezember 2016 um 17:47

    Und schau mal hier... vielleicht bringt dich dieses Beispiel ja auf eine Idee, wie du dass umsetzen kannst.

    Hier habe ich ein paar Mails aus Thunderbird in meine GUI gezogen und bekomme dann die Namen der Files im Memo angezeigt.

    Nachtrag: Du kannst auch gleich mehrere oder alle Mails aus einem Postfach in einem Rutsch auf deine GUI ziehen...

    Thunderbird_DragAcceptFiles
    AutoIt
    ;-- TIME_STAMP   2016-12-04 17:46:26
    
    
    #include <GUIConstantsEx.au3>
    #include <WinAPISys.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    
    
    OnAutoItExitRegister('OnAutoItExit')
    
    
    ; Create GUI
    Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 400, 422, -1, -1, -1, $WS_EX_TOPMOST)
    Local $idCheck = GUICtrlCreateCheckbox('Enable Drag && Drop', 100, 240, 120, 19)
    Local $idLabel = GUICtrlCreateLabel('', 100, 25, 200, 200)
    Global $g_hLabel = GUICtrlGetHandle($idLabel)
    GUICtrlSetBkColor(-1, 0xD3D8EF)
    ; Create memo control
    $g_idMemo = GUICtrlCreateEdit("", 2, 270, 396, 150, $WS_VSCROLL)
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")
    GUICtrlSendMsg($g_idMemo, $EM_SETREADONLY, True, 0)
    GUICtrlSetBkColor($g_idMemo, 0xFFFFFF)
    
    
    GUICtrlCreateLabel('Drop here', 175, 193, 50, 14)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    
    
    ; Allow WM_DROPFILES to be received from lower privileged processes (Windows Vista or later)
    #cs
    If IsAdmin() Then
    	_WinAPI_ChangeWindowMessageFilterEx($g_hLabel, $WM_COPYGLOBALDATA, $MSGFLT_ALLOW)
    	_WinAPI_ChangeWindowMessageFilterEx($g_hLabel, $WM_DROPFILES, $MSGFLT_ALLOW)
    EndIf
    #ce
    
    
    ; Register label window proc
    Global $g_hDll = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam')
    Global $g_pDll = DllCallbackGetPtr($g_hDll)
    Global $g_hProc = _WinAPI_SetWindowLong($g_hLabel, $GWL_WNDPROC, $g_pDll)
    
    
    GUISetState(@SW_SHOW)
    
    
    While 1
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE
    			ExitLoop
    		Case $idCheck
    			_WinAPI_DragAcceptFiles($g_hLabel, GUICtrlRead($idCheck) = $GUI_CHECKED)
    	EndSwitch
    WEnd
    
    
    Func _WinProc($hWnd, $iMsg, $wParam, $lParam)
    	Switch $iMsg
    		Case $WM_DROPFILES
    			Local $sFileList = _WinAPI_DragQueryFileEx($wParam)
    			If Not @error Then
    				MemoWrite('--------------------------------------------------')
    				For $i = 1 To $sFileList[0]
    					MemoWrite($sFileList[$i])
    				Next
    			EndIf
    			_WinAPI_DragFinish($wParam)
    			Return 0
    	EndSwitch
    	Return _WinAPI_CallWindowProc($g_hProc, $hWnd, $iMsg, $wParam, $lParam)
    EndFunc   ;==>_WinProc
    
    
    ; Write message to memo
    Func MemoWrite($sMessage = "")
        GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)
    EndFunc   ;==>MemoWrite
    
    
    Func OnAutoItExit()
    	_WinAPI_SetWindowLong($g_hLabel, $GWL_WNDPROC, $g_hProc)
    	DllCallbackFree($g_hDll)
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen


    Thunderbird_DragAcceptFiles.jpg

  • Drag und Drop von Outlook

    • Bitnugger
    • 4. Dezember 2016 um 17:12
    Zitat von wuff100

    Wo finde ich diese Funktion?

    In der AutoIt-Hilfe natürlich... und wenn nicht dort, dann bei MSDN.

    DragAcceptFiles

    _WinAPI_DragAcceptFiles.jpg

  • regedit zeigt Unterschlüsselnamen nicht an

    • Bitnugger
    • 4. Dezember 2016 um 14:05
    Zitat von Micha_he

    Compilevorgeng

    @Micha_he
    Hihi.. dieses Wort solltest du unbedingt noch mit in deine Liste aufnehmen... :D

  • Keywort Script für Thumbsplus

    • Bitnugger
    • 2. Dezember 2016 um 22:22

    So in etwa...

    SendThumbsPlus
    AutoIt
    ;-- TIME_STAMP   2016-12-02 22:20:22
    
    
    ; SendThumbsPlus
    
    
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    _Main()
    
    
    Func _Main()
    #region - GUI Create
    ; Größe und Position der eigenen GUI nach Belieben anpassen
    Local $hGUI = GUICreate('SendThumbsPlus', 625, 35, -1, -1, -1, $WS_EX_TOPMOST)
    $idButton_Send0 = GUICtrlCreateButton('Send Keywort xyz',   5, 5, 150, 25)
    $idButton_Send1 = GUICtrlCreateButton('Send Keywort abc', 160, 5, 150, 25)
    $idButton_Send2 = GUICtrlCreateButton('Send Keywort fgh', 315, 5, 150, 25)
    $idButton_Exit  = GUICtrlCreateButton('Exit', 470,5, 150, 25)
    GUISetState()
    #endregion
    
    
    #region - GUI SelectLoop
    While 1
    	$msg = GUIGetMsg()
    	Select
    		Case $msg = $GUI_EVENT_CLOSE Or $msg = $idButton_Exit
    			Exit
    		Case $msg = $idButton_Send0
    			_SendKey(0)
    		Case $msg = $idButton_Send1
    			_SendKey(1)
    		Case $msg = $idButton_Send2
    			_SendKey(2)
    		;Case $msg =
    	EndSelect
    WEnd
    #endregion
    EndFunc
    
    
    Func _SendKey($iKeywortID)
    	; Keyworts hier nach Belieben anpassen
    	Local Static $aKeyworts = ['Keywort_00', 'Keywort_01', 'Keywort_02']
    	If $iKeywortID < 0 Or $iKeywortID > UBound($aKeyworts) Then Return SetError(1)
    
    
    	; Hier die korrekten Werte mit Au3Info holen...
    	Local $hWnd = WinGetHandle('[TITLE:ThumbsPlus; CLASS:ThumbsPlus; INSTANCE:1]')
    	If IsHWnd($hWnd) = 0 Then Exit MsgBox(0, @ScriptName, 'WinGetHandle() konnte das Window von ThumbsPlus nicht finden!') +1
    
    
    	; Das ThumbsPlus-Window aktivieren, bevor wir diesem Keystrokes senden
    	WinActivate($hWnd)
    	; wenn es mit Send() 'hakt', nach jedem Send() noch ein Sleep(500) oder höher einbauen
    	Send('^k')
    	;Sleep(500)
    	Send($aKeyworts[$iKeywortID])
    	Send('{ENTER}')
    	Send('{SPACE}')
    EndFunc
    Alles anzeigen
  • Acronis True Image 2017 (One Year Subscription) zu verschenken

    • Bitnugger
    • 2. Dezember 2016 um 05:48

    Hat sich tatsächlich noch keiner drauf gemeldet? Ok, dann habe ich es hiermit getan. Vielen Dank auch! ;)

  • Spielzeiten von Video-Dateien auslesen

    • Bitnugger
    • 28. November 2016 um 21:08
    Zitat von misterspeed

    Filesharer?

    Wie wo was... sind wir das nicht alle? Welchen primären Grund könnte es sonst noch geben, aus dem das Internet ins Leben gerufen wurde? :D

    Danke für den Tip... via DLL war natürlich schon ein Begriff, aber damals brauchte ich eine schnelle Lösung und zu der Zeit waren meine AutoIt-Kenntnisse noch nahe null. 8)
    Eine kleine Fußnote noch... via DLL ist das Handling zwar weitaus flexibler, wobei dies dann aber auch mehr Arbeit erfordert... und ich wage mal zu behaupten, dass Anfänger mit der (eindeutig besseren) DLL-Lösung evtl. überfordert sein könnten.

    Zitat von autoiter

    Ich werde mich hier aber nicht als Filesharer outen!

    Der Logik folgend hast du es hiermit aber getan... :P

    Und outen... bzw. Auskünfte jeder Art gibt es eh nur gegen Bares! :rofl:

    @autoiter
    Achso... nur mal kurz erwähnt... Arrays vs ByRef - dass bringt bei großen Arrays weitaus weniger, als ich es für möglich gehalten habe... dein Beispiel ist derzeit von etwa 12 Varianten, die ich getestet habe, die zweitschnellste! Ich knabbere noch daran, eine schnellere Lösung zu finden... :rock:

  • ArrayDisplay für 1, 2, 3 Dimensionen und Array in Array

    • Bitnugger
    • 28. November 2016 um 13:36
    Zitat von Tweaky

    Ist dies noch die aktuelle UDF zum darstellen eines 3D-Arrays?

    Schreibt @Kleiner doch hier...

    Zitat von Kleiner

    BugFix ich habe dein _ArrayMultiDisplay umgeschrieben das, alle unsere Funktionen unter einem dach sind, den Namen habe ich beibehalten.

    ; Modified.......: Gary Frost (gafrost), Ultima, Zedna, jpm, BugFix, Kleiner

    @Kleiner
    Sag mal, hast du nicht bemerkt, dass dein 'Copy Selected' Button nicht mehr ins Window passt, nachdem du die Größe an das anzuzeigende Array angepasst hast? Zudem trifft 'Copy Selected' ja nicht wirklich zu, denn du kopierst das komplette Array ja auch in die Zwischenablage, wenn NICHTS selektiert wurde... und schön wäre, wenn man auswählen kann, ob das Array mit/ohne Header/Rows in die Zwischenablage kopiert, oder als *.csv gespeichert werden soll.


    Was definitiv noch fehlt ist ein Exit-Button und wie beim Original die Möglichkeit eine eigene Funktion mit Parametern einzubinden. Sehr aufwertend wäre dann noch, wenn man dein _ArrayMultiDisplay als Child-Window in die eigene GUI einbinden könnte... so dass es mit dieser dann verschoben/minimiert werden kann und sich die Größe dann auch anpasst, falls die Parent-Gui diese ändert - und es sich dann auch beendet, wenn die Parent-GUI geschlossen wurde.

  • Spielzeiten von Video-Dateien auslesen

    • Bitnugger
    • 28. November 2016 um 08:53

    Ich mache das mit MediaInfo... und das Futter besorgt ein von mir geschriebenes AutoIt-Script, dass ich vom Total Commander aus aufrufe...

    _GetExtProperty.au3 - ohohohooo... das ist ja fast noch taufrisch... von 2006!!! :D

    Im Anhang liegt dann noch mein angepasstes InformFile für MediInfo als Muster... NFO.csv (mit RAR gepackt, weil der Dateityp hier nicht erlaubt ist)

    MakeNFO
    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <AutoItConstants.au3>
    
    
    #include <Array.au3>
    #include <File.au3>
    #include <_GetScriptName.au3>
    
    
    ;-- TIME_STAMP   2016-11-28 08:35:06
    
    
    ; Das Script habe ich für die Nutzung mit Total Commander geschrieben, um mir so eine NFO zu erstellen, wie ICH sie haben will.
    ; Welche Eigenschaften MediaInfo in die NFO packt, kann mithilfe eines InformFiles gesteuert werden, das als NFO.csv vorliegen muss.
    ; MediaInfo bringt dazu auch einige Beispiele mit, die man sich dann individuell anpassen kann.
    ;
    ;*************************************************************************************
    ; Derzeit ist das Script so ausgelegt, dass es nur Dateien in einem ListFile erwartet.
    ;*************************************************************************************
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; Mit Total Commander
    ;
    ; MakeNFO "%L"
    ;
    ; %L, %l, %F, %f, %D, %d erzeugt im TEMP-Verzeichnis einen Listendatei mit den Namen der markierten Dateien und Verzeichnisse, und
    ; fügt den Namen der Listendatei in die Kommandozeile ein. Die Liste wird nach Beendigung des Programms von Total Commander gelöscht. Es können 6 verschiedene Arten von Listen erzeugt werden - wir brauchen aber nur die lange Liste mit dem kompletten Pfad!
    ;
    ; %L = Lange Dateinamen inkl. komplettem Pfad, z.B. c:\Eigene Dateien\langer Name.txt
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; Mit der Eingabeaufforderung wäre es auch möglich...
    ;
    ; So in etwa könnte man das dann z. B. machen...
    ; for /L %L IN (1, 1, 2) do if "%L" EQU "1" (for /F "delims=*" %%D IN ('dir /B /Ad /S ["Laufwerk:\Verzeichnis mit Bildern|Filmen|Musik"]') do @echo "%D">>"%ListFile%") else timeout /T 5 >nul & MakeNFO "%ListFile%"
    ; for /L %L IN (1, 1, 2) do if "%L" EQU "1" (for /F "delims=*" %%D IN ('dir /B /A-d /S ["[Laufwerk:\Verzeichnis\[*.*|;*.mkv;*.mp3;*.mp3;...]]"') do @echo "%D">>"%ListFile%") else timeout /T 5 >nul & MakeNFO "%ListFile%"
    ; for /L %L IN (1, 1, 2) do if "%L" EQU "1" (for /F "delims=*" %D IN ('dir /B /A-d /S "k:\_Serien\Supernatural\*.mkv"') do @echo "%D">>"%ListFile%") else timeout /T 5 >nul & MakeNFO "%ListFile%"
    ;
    
    
    ; **********************
    ; Hier Pfade anpassen!!!
    ; **********************
    Global $g_sMediaInfo = 'f:\Progdir\MediaInfo_CLI\MediaInfo.exe', $g_sInformFile = 'f:/_Scripts/Batch/MediaInfo/NFO.csv'
    
    
    _Main()
    
    
    Func _Main()
    	Local $MediaInfo, $InformFile, $LogFile, $p_path, $n_name, $o_name, $Movie, $n = 0, $NFO, $aNFO[0][2], $iPID, $CMD, $siMDB, $sOutput, $aArray
    
    
    	; Inifile lesen/schreiben bzw. Default-Werte für MediaInfo festlegen
    	If FileExists(_GetScriptName(3)) Then
    		Local $aInifile = IniReadSection(_GetScriptName(3), 'Globlal')
    	Else
    		Local $aInifile[3][2] = [[2, ''], ['MediaInfo', $g_sMediaInfo], ['InformFile', $g_sInformFile]]
    		IniWriteSection(_GetScriptName(3), 'Globlal', $aInifile)
    	EndIf
    
    
    	$MediaInfo = $aInifile[1][1]
    	$InformFile = $aInifile[2][1]
    
    
    	; Haben wir eine Liste bekommen?
    	If $CMDLINE[0] <> 1 Then Exit MsgBox(4096, "MakeNFO", 'Usage: MakeNFO "%L"', 3) + 1
    
    
    	; ListFile einlesen
    	Local $aFileList = FileReadToArray($CMDLINE[1])
    	If @error Then Exit MsgBox(4096, "MakeNFO", "FileList nicht gefunden!", "FileReadToArray: #Error = " & @error & @CRLF & @CRLF & $CMDLINE[1], 3) + 1
    
    
    	; Ok, dann mal los...
    	Local $aDirs[UBound($aFileList)]
    	Local $iDirs = 0
    	For $i = UBound($aFileList) - 1 To 0 Step -1
    		If StringInStr(FileGetAttrib($aFileList[$i]), 'D') Then	; ist es ein Verzeichnis?
    			$aDirs[$i] = $aFileList[$i]
    			$iDirs += 1
    			_ArrayDelete($aFileList, $i)
    		EndIf
    	Next
    	If $iDirs <> 0 Then MsgBox(4096, "MakeNFO", "Verzeichnisse werden ignoriert - später evtl. mal..." & @CRLF & @CRLF & _ArrayToString($aDirs, @CRLF), 3)
    	If UBound($aFileList) = 0 Then Exit	 ; nix zu tun?
    
    
    	; Diese Filter-Liste kann man natürlich beliebig anpassen... ich brauche sie nur für Filme und Serien
    	Local $aMovieExt = ['.3gp', '.avi', '.divx', '.flv', '.mpg', '.mpeg', '.mov', '.qt', '.ram', '.ras', '.rm', '.rmvb', '.rp', '.rpl', '.rt', '.asf', '.swf', '.wmv', '.rmvb', '.vob', '.ts', '.m1v', '.m2v', '.mp4', '.mpv', '.fbr', '.mkv', '.webm']
    	Local $sDrive = "", $sDir = "", $sFileName = "", $sExtension = "", $aPathSplit
    	For $w = 0 To 1
    		If $w = 0 Then
    			For $i = 0 To UBound($aFileList) - 1
    				$aPathSplit = _PathSplit($aFileList[$i], $sDrive, $sDir, $sFileName, $sExtension)
    
    
    				For $k = 0 To UBound($aMovieExt) - 1
    					If $sExtension = $aMovieExt[$k] Then
    						$p_path = $sDrive & $sDir
    						$n_name = $sFileName & $sExtension
    						$o_name = $sFileName
    
    
    						$LogFile = $p_path & $o_name & '.nfo'
    
    
    						$Movie = $p_path & $n_name
    						$NFO = $p_path & $o_name & '.nfo'
    
    
    						If FileExists($NFO) Then	; existiert bereits eine NFO?
    							$NFO = ''				; dann erzeugen wir keine *.NFO!
    							$CMD = StringFormat('"%s" --Inform=file://"%s" "%s"', $MediaInfo, $InformFile, $Movie)
    						Else
    							$CMD = StringFormat('"%s" --Inform=file://"%s" --LogFile="%s" "%s"', $MediaInfo, $InformFile, $LogFile, $Movie)
    						EndIf
    
    
    						; MediaInfo starten und als Parameter den Pfad zur Datei und dem InformFile mitgeben... und falls eine NFO erzeugt werden soll, dann diesen auch noch...
    						$iPID = Run($CMD, $p_path, @SW_HIDE, $STDOUT_CHILD)
    
    
    						If $iPID = 0 Then Exit MsgBox(4096, "MakeNFO", "Run MediaInfo ... fehlgeschlagen!" & @CRLF & @CRLF & $CMD, 3) + 1
    						ProcessWaitClose($iPID)
    						; Warten bis MediaInfo fertig ist...
    						$siMDB = 'iMDB LiNK.........: http://www.imdb.com/title/' & @CRLF & 'iMDB Rating.......:  ( votes)' & @CRLF
    						; Stdout auslesen... hier stehen nun die von uns festgelegten Eigenschaften... wie Breite, Höhe und Spielzeit... bei mir allerdings in EN...
    						While 1
    							$sOutput &= StdoutRead($iPID)
    							If @error Then ; Exit the loop if the process closes or StdoutRead returns an error.
    								ExitLoop
    							EndIf
    						WEnd
    						Local $aArray = StringSplit(StringTrimRight($sOutput, 2) & $siMDB, @CRLF, $STR_ENTIRESPLIT)
    						If @error Then
    							MsgBox(4096, "MakeNFO", "Bei StringSplit ist einen Fehler aufgetreten!", 3)	; ja watt nu?
    						Else
    							Local $aRange[6] = [5, 3, 3, 3, 3, 3]
    							; Hier noch ein paar Dinge eintragen, die MediaInfo nicht kennt...
    							Local $sFill = 'AIR/STORE Date....:  (Cine Date )|Language..........: |Genre.............: |FSK...............: |'
    							_ArrayInsert($aArray, $aRange, $sFill)
    							_ArrayDelete($aArray, '0-1') ; Den Counter und die Überschrift 'General' brauchen wir nicht...
    							;_ArrayDisplay($aArray)
    							; Müssen wir eine NFO anlegen?
    							If $NFO <> '' Then	; dann die aktuellen Werte übernehmen...
    								ReDim $aNFO[UBound($aNFO) + 1][2]
    								$aNFO[$n][0] = $NFO
    								$aNFO[$n][1] = $aArray
    								$n += 1
    							EndIf
    							ReDim $aArray[0]
    						EndIf
    					EndIf
    				Next
    			Next
    		EndIf
    
    
    		; NFO schreiben?
    		If UBound($aNFO) > 0 Then
    			Sleep(1000) ; noch etwas warten, bis alle NFOs geschrieben wurden...
    			For $k = 0 To UBound($aNFO) - 1
    				Local $hFile = FileOpen($aNFO[$k][0], $FO_OVERWRITE + $FO_ANSI)
    				$aArray = $aNFO[$k][1]
    				_FileWriteFromArray($hFile, $aArray)
    				FileClose($hFile)
    			Next
    		EndIf
    	Next	; und weiter mit dem nächten File...
    
    
    	; Falls dieses Script NICHT von Total Commander aufgerufen wurde, müssen wir hier nun selbst das ListFile löschen!!!
    	; Das kann man sehr leicht daran festmachen, in welchem Pfad sich das ListFile befindet...
    	; FileDelete... und fertig! ;-)
    EndFunc   ;==>_Main
    
    
    #cs - Die NFO sieht dann beim mir etwa so aus...
    
    
    	Titel.............: sn-s10e01.avi
    	AIR/STORE Date....:  (Cine Date )
    	Language..........: * hier nur bei Filmen...
    	Genre.............: * hier nur bei Filmen...
    	FSK...............: * hier nur bei Filmen...
    
    
    	Format............: AVI at 2 095 kb/s
    	Length............: 632 MiB for 42 min 9 s 988 ms
    
    
    	Video #0..........: MPEG-4 Visual at 1 445 kb/s
    	Aspect............: 720 x 400 (1.800) at 23.976 fps
    
    
    	Audio #0..........: AC-3 at 448 kb/s
    	Infos.............: 6 channels, 48.0 kHz
    
    
    	Audio #1..........: MPEG Audio at 192 kb/s
    	Infos.............: 2 channels, 48.0 kHz
    
    
    	iMDB LiNK.........: http://www.imdb.com/title/
    	iMDB Rating.......:  ( votes)
    #ce
    Alles anzeigen

    Dateien

    NFO.rar 458 Byte – 340 Downloads
  • AutoIt-Script-Zeilennummern anzeigen in kompillierten exe Dateien

    • Bitnugger
    • 27. November 2016 um 18:20

    So mache ich es bei 'wuschigen' Sachen... da sehe ich sofort in welcher Funktion der Fehler aufgetreten ist... und mithilfe von @error und @extended dann auch genau die Stelle, wo es brennt.

    SetError()
    AutoIt
    ;-- TIME_STAMP   2016-11-27 18:10:47
    
    
    #include <Array.au3>
    
    
    Global $sSpacer1 = '! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -' & @CRLF
    Global $sSpacer2 = '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -' & @CRLF
    
    
    _Main()
    
    
    Func _Main()
    	; Hier jetzt mal etwas total schwachmatisches... ;-)
    	Local $aDataSource = [1, 2, 3, 4, 5], $sDataDestination = '1, 2, 3, 4, 5'
    	Local $aResult = _MergeData($aDataSource, $sDataDestination)
    	If @error Then ConsoleWrite($sSpacer1 & $aResult & @CRLF & "!@ " & @TAB & "#Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF & $sSpacer2)
    
    
    	Local $aDataSource2 = [1, 2, 3, 4, 5], $sDataDestination2 = [[1, 2, 3, 4, 5], ['Ops']]
    	Local $aResult = _MergeData($aDataSource2, $sDataDestination2)
    	If @error Then ConsoleWrite($sSpacer1 & $aResult & @CRLF & "!@ " & @TAB & "#Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF & $sSpacer2)
    
    
    	Local $aDataSource3, $sDataDestination3 = [[1, 2, 3, 4, 5], ['Ops']]
    	Local $aResult = _MergeData($aDataSource3, $sDataDestination3)
    ;	...
    
    
    	If @error Then ConsoleWrite($sSpacer1 & $aResult & @CRLF & "!@ " & @TAB & "#Error: " & @error & @TAB & "#Extended: " & @extended & @CRLF & $sSpacer2)
    
    
    EndFunc
    
    
    Func _MergeData($vSource, $vDestination)
    	Local $sSourceType = VarGetType($vSource), $sDestinationType = VarGetType($vDestination), _
    	$sFunc = '_MergeData($vSource, $vDestination)'
    	Switch True
    		Case ($sSourceType <> $sDestinationType)
    			Return SetError(1, 1, StringFormat('! %s\n@\t%s\n>\t%-20s = %-24s\n-\t%-20s = %-14s', $sFunc, 'Daten sind nicht vom selben Typ!', '$vSource', $sSourceType, '$vDestination', $sDestinationType))
    		Case $sSourceType = 'Array'
    			_ArrayConcatenate($vSource, $vDestination)
    			Switch @error
    				Case 0
    					Return $vDestination
    				Case 1	; kann hier nicht der Fall sein...
    					Return SetError(2, 1, StringFormat('! %s\n@\t%s', $sFunc, '$aArrayTarget is not an array'))
    				Case 2	; kann hier nicht der Fall sein...
    					Return SetError(2, 2, StringFormat('! %s\n@\t%s', $sFunc, '$aArraySource is not an array'))
    				Case 3
    					Return SetError(2, 3, StringFormat('! %s\n@\t%s', $sFunc, '$aArrayTarget is not a 1D or 2D array'))
    				Case 4
    					Return SetError(2, 4, StringFormat('! %s\n@\t%s', $sFunc, '$aArrayTarget and $aArraySource 1D/2D mismatch'))
    				Case 5
    					Return SetError(2, 5, StringFormat('! %s\n@\t%s', $sFunc, '$aArrayTarget and $aArraySource column number mismatch (2D only)'))
    				Case 6
    					Return SetError(2, 6, StringFormat('! %s\n@\t%s', $sFunc, '$iStart outside array bounds'))
    			EndSwitch
    		Case $sSourceType = 'String'
    			$vDestination &= $vSource
    			Return $vDestination
    ;		Case ...
    		Case Else
    			$vDestination += $vSource
    			Return $vDestination
    	EndSwitch
    EndFunc
    Alles anzeigen


    SetError.png

  • Listview, Sqlite

    • Bitnugger
    • 27. November 2016 um 16:34

    Das Projekt an sich birgt keine besonderen Schwierigkeiten... es ist/wird nur recht umfangreich... den fettesten Anteil dabei nimmt am Ende dann der SQLite-Teil ein... und hier hast du schon vom Ansatz her arge Probleme gehabt, ebenso mit deiner Child-GUI... weil deine Basics dafür einfach noch nicht ausreichen.

    Zudem würde ich es nicht als pausieren betrachten... sondern als eine intelligente Herangehensweise, wenn du erst noch etwas an deinen Basics arbeitest, was dir am Ende garantiert einen hohen Zeitgewinn einbringt und vor allem aber deine Nerven schont - und du am Ende dann mit Stolz auf ein - dein erstes - wirklich sauber programmiertes Projekt/Kunstwerk blicken kannst. ;)

    Und schau mal hier...SQLite_helper.au3 - evtl. kannst du damit ja was anfangen... habe es mir nicht näher angesehen.

  • Listview, Sqlite

    • Bitnugger
    • 27. November 2016 um 15:59

    So läuft es erstmal... aber da hast du noch viel Arbeit vor dir.

    Wäre ich an deiner Stelle... mit deinem Wissenstand über AutoIt... bevor ich so ein... doch schon recht großes Projekt mit gutem Gewissen anfangen kann, wären vorher erst mal noch ein paar Wochen/Monate Grundlagen üben angesagt!!!

    Zitat von Neight

    Wäre das eine Möglichkeit zum Anklicken

    Ich würde dafür die GUIListViewEx UFD nehmen - damit kannst du jede Zelle direkt inplace im Listview editieren. Ein paar Beispiele gibt es dazu auch auf der Seite bzw. im Download-Archiv.


    Mineralien_DB
    AutoIt
    ;-- TIME_STAMP   2016-11-27 15:47:20
    
    
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <SQLite.au3>
    #include <GuiListView.au3>
    #include <ComboConstants.au3>
    #include <SQLite.dll.au3>
    
    
    Global Const $sDbMineral = @ScriptDir & "\mineraldb.sqlite"
    Global $hDB, $iRval, $aResult, $iRows, $iColumns, $DB, $QLite, $pic
    
    
    
    
    #Region ### START Koda GUI section ### Form=
    $Form1_1 = GUICreate("Mineraliendatenbank", 1181, 736, 214, 142)
    $MenuItem3 = GUICtrlCreateMenu("&File")
    $MenuItem4 = GUICtrlCreateMenuItem("New" & @TAB & "Ctrl+Down", $MenuItem3)
    $MenuItem5 = GUICtrlCreateMenuItem("Open" & @TAB & "", $MenuItem3)
    $MenuItem6 = GUICtrlCreateMenuItem("Save" & @TAB & "Shift+Ctrl+0", $MenuItem3)
    $MenuItem7 = GUICtrlCreateMenuItem("Exit" & @TAB & "", $MenuItem3)
    $MenuItem2 = GUICtrlCreateMenu("&Edit")
    $MenuItem9 = GUICtrlCreateMenuItem("Delete" & @TAB & "", $MenuItem2)
    $MenuItem1 = GUICtrlCreateMenu("&Help")
    $MenuItem8 = GUICtrlCreateMenuItem("About" & @TAB & "", $MenuItem1)
    GUISetBkColor(0xB9D1EA)
    $Group1 = GUICtrlCreateGroup("", 176, 80, 945, 553)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Label1 = GUICtrlCreateLabel("Nummer", 224, 128, 55, 20)
    $Nummer = GUICtrlCreateInput("", 296, 128, 41, 24)
    $Label2 = GUICtrlCreateLabel("Name", 384, 128, 41, 20)
    $Name = GUICtrlCreateInput("", 440, 128, 177, 24)
    $Group2 = GUICtrlCreateGroup("allg. Eigenschaften", 208, 192, 401, 177)
    $Label3 = GUICtrlCreateLabel("Formel", 224, 224, 46, 20)
    $Formel = GUICtrlCreateInput("", 280, 224, 105, 24)
    $Label4 = GUICtrlCreateLabel("Gewicht", 224, 264, 51, 20)
    $Gewicht = GUICtrlCreateInput("", 280, 264, 105, 24)
    $Farbe = GUICtrlCreateLabel("Farbe", 224, 304, 40, 20)
    $Farb = GUICtrlCreateInput("", 280, 304, 105, 24)
    $Label5 = GUICtrlCreateLabel("Radioaktiv", 400, 224, 69, 20)
    $Checkbox1 = GUICtrlCreateCheckbox("Ja", 480, 224, 41, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Nein", 544, 224, 41, 17)
    $Label6 = GUICtrlCreateLabel("Magnetisch", 400, 256, 73, 20)
    $Ja = GUICtrlCreateCheckbox("Ja", 480, 256, 49, 17)
    $Nein = GUICtrlCreateCheckbox("Nein", 544, 256, 49, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $pic = GUICtrlCreatePic("", 640, 112, 441, 305, BitOR($GUI_SS_DEFAULT_PIC, $SS_RIGHTJUST, $WS_BORDER))
    $Group3 = GUICtrlCreateGroup("Funddaten", 208, 416, 409, 153)
    $Fundor = GUICtrlCreateLabel("Fundort", 224, 456, 49, 20)
    $Fundort = GUICtrlCreateInput("", 304, 456, 241, 24)
    $Fundlan = GUICtrlCreateInput("", 304, 504, 241, 24)
    $Fundland = GUICtrlCreateLabel("Fundland", 224, 504, 60, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button1 = GUICtrlCreateButton("Bild öffnen", 744, 424, 97, 33)
    $Button2 = GUICtrlCreateButton("Bild löschen", 880, 424, 97, 33)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateInput("", 312, 24, 465, 21)
    $Suche = GUICtrlCreateLabel("Suche", 256, 24, 55, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $Zurueck = GUICtrlCreateButton("Zurück", 440, 648, 65, 33)
    $Vor = GUICtrlCreateButton("Vor", 696, 648, 65, 33)
    
    
    $ListView1 = GUICtrlCreateListView("", 8, 88, 150, 545)
    _GUICtrlListView_AddColumn($ListView1, "Name", 70)
    _GUICtrlListView_AddColumn($ListView1, "Nummer", 150)
    ;Global $aHeader = StringSplit($ListView1, '|')
    Global $hListView = GUICtrlGetHandle($ListView1)
    $cContextMenue = GUICtrlCreateContextMenu($ListView1)
    GUICtrlCreateListViewItem("", $ListView1)
    ;Dim $Form1_1_AccelTable[2][2] = [["^{DOWN}", $MenuItem4],["^+0", $MenuItem6]]
    ;GUISetAccelerators($Form1_1_AccelTable)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    
    
    _SQLite_Startup()
    
    
    If @error Then Exit MsgBox(16, "SQLite Fehler", "SQLite.dll konnte nicht geladen werden!")
    ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF)
    
    
    Global $hDB = _SQLite_Open($sDbMineral)
    If @error Then Exit MsgBox(16, "SQLite Fehler", "Die Datenbank konnte nicht geöffnet werden!")
    
    
    If FileExists("mineraldb.sqlite") Then
    	$DB = _SQLite_Open("mineraldb.sqlite")
    	If @error Then Exit MsgBox(16, "SQLite Fehler", "Die Datenbank konnte nicht geöffnet werden!")
    
    
    	_SQLite_Exec(-1, "CREATE TABLE IF NOT EXISTS Mineralien (ID INTEGER PRIMARY KEY, Nummer INTEGER, Name TEXT, Formel TEXT, Gewicht TEXT, Farbe TEXT, Fundort TEXT, Fundland TEXT);")
    
    
    	_SQLite_Exec(-1, "INSERT INTO Mineralien(Nummer,Name,Formel,Gewicht,Farbe,Fundort,Fundland) VALUES (1, 'Galvanit','H2OKopF','500','rot','Wien','Italien');")
    	_SQLite_Exec(-1, "INSERT INTO Mineralien(Nummer,Name,Formel,Gewicht,Farbe,Fundort,Fundland) VALUES (2, 'Tritanit','O3H2','300','grün','Rom','Schweiz');")
    EndIf
    
    
    ; Main-Loop
    While True
    	Switch GUIGetMsg()
    		Case -3					; Die DB wird nicht gespeichert???
    			_SQLite_Close($DB)
    			_SQLite_Shutdown()
    			Exit
    		Case $MenuItem5
    			$iRva = _SQLite_GetTable2d(-1, "SELECT Nummer, * FROM Mineralien;", $aResult, $iRows, $iColumns)
    			_SQLite_GetTable2d(-1, "SELECT Name, * FROM Mineralien;", $aResult, $iRows, $iColumns)
    			_ArrayDelete($aResult, 0)
    			_GUICtrlListView_AddArray($ListView1, $aResult)
    		Case $MenuItem4
    			_NeuerDatensatz()
    		Case $Button1
    			$open = FileOpenDialog("Wählen Sie eine Datei aus.", @TempDir, "Bilder (*.jpg;*.bmp;*.png)")
    			If @error Then
    				MsgBox(4096, "", "Keine Datei ausgewählt")
    			EndIf
    			GUICtrlSetImage($pic, $open)
    		Case $MenuItem7
    			Exit
    	EndSwitch
    WEnd
    
    
    Func _NeuerDatensatz()
    	#Region ### START Koda GUI section ### Form=
    	Local $hGUI, $nMsg, $idInput_Nummer, $idInput_Formel, $idInput_Farbe, $idInput_Name, $idInput_Gewicht, $idInput_Fundort, $idInput_Fundland, $idInput_Felder, $idButton_OK, $aData[7], $aDefault = ['Nummer', 'Formel', 'Farbe', 'Name', 'Gewicht', 'Fundort', 'Fundland'], $iError = 0, _
    			$sINSERT = "INSERT INTO Mineralien(Nummer,Name,Formel,Gewicht,Farbe,Fundort,Fundland) VALUES", _
    			$sFORMAT = "%s (%i,'%s','%s','%s','%s','%s','%s');"
    
    
    	$hGUI             = GUICreate("Neuer Datensatz", 530, 241, 192, 131)
    	$idInput_Nummer   = GUICtrlCreateInput("Nummer", 24, 56, 121, 21)
    	$idInput_Formel   = GUICtrlCreateInput("Formel", 24, 104, 121, 21)
    	$idInput_Farbe    = GUICtrlCreateInput("Farbe", 24, 152, 121, 21)
    	$idInput_Name     = GUICtrlCreateInput("Name", 200, 56, 121, 21)
    	$idInput_Gewicht  = GUICtrlCreateInput("Gewicht", 200, 104, 121, 21)
    	$idInput_Fundort  = GUICtrlCreateInput("Fundort", 200, 152, 121, 21)
    	$idInput_Fundland = GUICtrlCreateInput("Fundland", 376, 56, 121, 21)
    	$idInput_Felder   = GUICtrlCreateLabel("Bitte alle Felder korrekt ausfüllen!", 40, 16, 129, 17)
    	$idButton_Add     = GUICtrlCreateButton("Datensatz hinzufügen", 168, 192, 169, 33)
    	GUISetState(@SW_SHOW)
    	#EndRegion ### END Koda GUI section ###
    
    
    	While 1
    		$nMsg = GUIGetMsg()
    		Switch $nMsg
    			Case $GUI_EVENT_CLOSE
    				GUIDelete($hGUI)
    				ExitLoop
    			Case $idButton_Add
    				$aData[0] = GUICtrlRead($idInput_Nummer)
    				$aData[1] = GUICtrlRead($idInput_Formel)
    				$aData[2] = GUICtrlRead($idInput_Farbe)
    				$aData[3] = GUICtrlRead($idInput_Name)
    				$aData[4] = GUICtrlRead($idInput_Gewicht)
    				$aData[5] = GUICtrlRead($idInput_Fundort)
    				$aData[6] = GUICtrlRead($idInput_Fundland)
    				Select
    					Case Int($aData[0]) = 0	; und prüfen ob die Nummer bereits existiert
    						$iError = 1
    					Case $aData[1] = $aDefault[1] Or $aData[1] = ''
    						$iError = 1
    					Case $aData[2] = $aDefault[2] Or $aData[2] = ''
    						$iError = 1
    					Case $aData[3] = $aDefault[3] Or $aData[3] = ''
    						$iError = 1
    					Case $aData[4] = $aDefault[4] Or $aData[4] = ''
    						$iError = 1
    					Case $aData[5] = $aDefault[5] Or $aData[5] = ''
    						$iError = 1
    					Case $aData[6] = $aDefault[6] Or $aData[6] = ''
    						$iError = 1
    				EndSelect
    				If $iError = 1 Then
    					MsgBox(262192, @ScriptName, 'Bitte alle Felder korrekt ausfüllen!')
    					ContinueLoop
    				EndIf
    
    
    				;		_SQLite_Exec(-1, "INSERT INTO Mineralien (Nummer,Name,Formel,Gewicht,Farbe,Fundort,Fundland) VALUES ('"_
    				;		& GUICtrlRead($Nummer[1]) & "','" & GUICtrlRead($Input4[2]) & "','" & GUICtrlRead($Input2[3]) & "','" & GUICtrlRead($Input5[4]) & "','" & GUICtrlRead($Input3[5])& "','" & GUICtrlRead($Input6[6])& "','" & GUICtrlRead($Input1[7]) & "');")
    
    
    				_SQLite_Exec(-1, StringFormat($sFORMAT, $sINSERT, $aData[0], $aData[1], $aData[2], $aData[3], $aData[4], $aData[5], $aData[6]))
    				ConsoleWrite(StringFormat($sFORMAT, $sINSERT, $aData[0], $aData[1], $aData[2], $aData[3], $aData[4], $aData[5], $aData[6]) & @CRLF)
    				;Sleep(5000)
    				;Exit
    		EndSwitch
    	WEnd
    EndFunc   ;==>_NeuerDatensatz
    Alles anzeigen
  • Aus 3 1D-Arrays ein Array mit 3 Spalten erzeugen

    • Bitnugger
    • 22. November 2016 um 21:35

    Sorry, aber das ist keine gute Lösung, denn...

    1.) ...damit kopierst du die Arrays ja zwei Mal: zuerst nach $aArray4, dann nach $ArrayResult - und ignorierst damit zu 100% was ich bezüglich "ByRef" geschrieben habe.
    2.) ...sie ist nicht als Funktion mit variabler Anzahl an Parametern ausgelegt.

    Zitat von autoiter

    Das Ergebnis gefällt mir auch nicht.

    Das Ergebnis ist ja auch speziell auf die Anfrage von @dost0011 ausgerichtet.

  • Funktionen zum Programmieren

    • Bitnugger
    • 22. November 2016 um 20:13
    Zitat von unzo1337

    um es in google ersichtlicher zu machen?

    Richtig zu Suchen ist eine Kunst! :D

    Sooo hättest du es gefunden...

  • Aus 3 1D-Arrays ein Array mit 3 Spalten erzeugen

    • Bitnugger
    • 22. November 2016 um 05:32
    Zitat von Mars

    Hab die Funktion aber nicht getestet

    Ich aber... wie zu erwarten - sie funktioniert. ;)

    Func Foo($a, $b, $c, $d, $e)
    Für wirklich große Arrays ist das so allerdings keine gute Lösung...

    da wäre es angebracht den Parametern das Schlüsselwort ByRef voranzustellen.
    Func Foo(ByRef $a, ByRef $b, ByRef $c, ByRef $d, ByRef $e)

    Warum?

    Hier ein Auszug aus der deutschen Hilfe:
    Das Schlüsselwort ByRef zeigt an, dass der Parameter als Referenz zu dem Originalobjekt behandelt werden soll. Standardmäßig wird der Parameter in eine neue Variable kopiert. Jedoch verknüpft ByRef die neue Varaible auf den Originalparameter. ByRef ist zu bevorzugen wenn eine Funktion große Mengen an Daten beinhaltet, wie zum Beispiel ein großen Array. Wird dies nicht getan, so erweist das kopieren aller Daten als Bremsklotz.

    Wird das Schlüsselwort ByRef angegeben, sind diese Parameter allerdings nicht mehr optional und sie müssen zudem auch als Variable übergeben werden, welche in dem Fall ja als Referenz verwendet werden.

    Mit etwas Tricky kann man diesen Umstand aber umgehen und die Vorteile von ByRef nutzen, indem wir (an beliebiger Stelle) einfach Dummy-Variablen verwenden, um so die geforderte Anzahl an Parametern für unsere Funktion zu liefern.

    Foo
    AutoIt
    ;-- TIME_STAMP   2016-11-22 05:02:01
    
    
    #include <Array.au3>
    
    
    Global $a[100], $b = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    Global $c = [1, ConsoleWrite, Eval, 3.141], $d = [1, 2, 3, 4, 5, 6], $e = [Default, Null]
    
    
    
    
    Global $f, $aDummy = -1, $bDummy = -1, $cDummy = -1, $dDummy = -1, $eDummy = -1
    
    
    $f = DisplayFoo($a, $b, $c, $d, $e)
    $f = DisplayFoo($a, $b, $c, $dDummy, $eDummy)
    $f = DisplayFoo($aDummy, $b, $cDummy, $d, $eDummy)
    $f = DisplayFoo($a, $bDummy, $c, $dDummy, $e)
    $f = DisplayFoo($a, $b, $cDummy, $d, $eDummy)
    ; Hier gibt es natürlich ein Error...
    $f = DisplayFoo($aDummy, $bDummy, $cDummy, $dDummy, $eDummy)
    
    
    Func DisplayFoo(ByRef $a0, ByRef $a1, ByRef $a2, ByRef $a3, ByRef $a4)
    	$f = Foo($a0, $a1, $a2, $a3, $a4)
    	If @error Then ConsoleWrite("! #Error: " & $f & @LF & "!@ " & @TAB & "#Error: " & @error & @LF)
    	_ArrayDisplay($f)
    	Return $f
    EndFunc
    
    
    Func Foo(ByRef $a0, ByRef $a1, ByRef $a2, ByRef $a3, ByRef $a4)
    	Local $aU = [UBound($a0), UBound($a1), UBound($a2), UBound($a3), UBound($a4)], $iMax = $aU[0], $n = @NumParams, $col = $n
    	For $i = 1 To $n - 1 Step 1
    		If $iMax < $aU[$i] Then $iMax = $aU[$i]
    		If $aU[$i] = 0 Then $col -= 1
    	Next
    	If $iMax < 1 Then Return SetError(1, 0, 'Kein Array zum Kopieren gefunden...')
    	Local $aRet[$iMax][$col], $k = 0
    
    
    	For $j = 0 To UBound($aU) - 1 Step 1
    		Select
    			Case $aU[$j] > 0 And $j = 0
    				For $i = 0 To $aU[$j] - 1 Step 1
    					$aRet[$i][$k] = $a0[$i]
    				Next
    				$k += 1
    			Case $aU[$j] > 0 And $j = 1
    				For $i = 0 To $aU[$j] - 1 Step 1
    					$aRet[$i][$k] = $a1[$i]
    				Next
    				$k += 1
    			Case $aU[$j] > 0 And $j = 2
    				For $i = 0 To $aU[$j] - 1 Step 1
    					$aRet[$i][$k] = $a2[$i]
    				Next
    				$k += 1
    			Case $aU[$j] > 0 And $j = 3
    				For $i = 0 To $aU[$j] - 1 Step 1
    					$aRet[$i][$k] = $a3[$i]
    				Next
    				$k += 1
    			Case $aU[$j] > 0 And $j = 4
    				For $i = 0 To $aU[$j] - 1 Step 1
    					$aRet[$i][$k] = $a4[$i]
    				Next
    				$k += 1
    		EndSelect
    	Next
    
    
    	Return $aRet
    EndFunc
    Alles anzeigen
  • Funktionen zum Programmieren

    • Bitnugger
    • 22. November 2016 um 01:01
    Zitat von Kanashius

    sind aber glaub ich auch nicht alle

    Ja, und ich lese gerade auf dieser Seite, welche er da auflistet: Some less common commands with no menu equivalent are:

    Ich muss sagen, ich bin sehr erstaunt, dass es da wohl keine komplette Liste von gibt...

  • Funktionen zum Programmieren

    • Bitnugger
    • 21. November 2016 um 22:52

    Komplett sind die aber nicht... "Shift+F2 - Go to the pevious Bookmark" fehlt z. B.

  • Frage zu Child Windows bzw. Owned Windows

    • Bitnugger
    • 19. November 2016 um 22:11
    Zitat von Kleffer

    Wo ist bei einem Tooltip der Unterschied zwischen Parent und dem Fenster zu dem dem das Control gehört?

    Bei einem ToolTip() gibt es keinen... denn dazu müsste die interne AutoIt-Funktion ein Window-Handle als Parameter anbieten, was aber nicht der Fall ist, weil ein eigenes Window kreiert wird.

    Wäre es anders, würde dies hier nicht funktionieren... tut es aber!

    AutoIt
    ToolTip('Huhu...')


    Edit: Lese jetzt erst, dass es hier um _GUITooltip geht...

    Bei dem _GUITooltip kannst du hingegen ein Window-handle angeben, auf welchem dieser angezeigt werden soll. Hier denke ich, verhält sich das etwa so...
    Wurden die GUITooltips vom Parent-Window erzeugt und wird dieses geschlossen, sind die Tips für das Owner-Window nicht mehr verfügbar. Wurden die GUITooltips vom Owner-Window erzeugt und wird dieses geschlossen, sind sie für das Parent-Window nicht mehr verfügbar.

    Wenn du ein Scrript schreibst und eine GUI kreiert, dann ist diese GUI dein "Owner-Window". Dein Prozess ist dann also analog dazu dein "Owner-Prozess" der von einem anderen Prozess gestartet wurde, dem "Parent-Prozess", von dem wir uns neben dem "Proccess-Handle", der "PID" und zig anderen Infos, auch dessen "Window-Handle" besorgen können... und genau dieses Window-Handle ist dann dein "Parent-Window".

    Ich habe dir mal ein kleines Script getippert, dass du auf unterschiedliche Weise starten solltest, da sich dann das "Parent-Window" entsprechend ändert und du es so besser nachvollziehen kannst.
    Z. B.:

    • Starte das Script direkt aus SciTE heraus, ohne es vorher zu kompilieren.
    • Starte das kompilierte Script (also die EXE) mit dem Windows-Explorer
    • Starte das kompilierte Script in der Eingabeaufforderung
    • Starte das kompilierte Script mit einem anderen Script via Run("WinInfo.exe")
    • Kompiliere das andere Script und starte es nochmals damit.

    Dann schließe mal dein Child-Window... dann dein Owner-Window... was in dem Fall das Parent-Window ist... dann umgekehrt...

    WinInfo.au3
    AutoIt
    ;-- TIME_STAMP   2016-11-19 22:59:03
    ; Constants
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    ; Includes
    #include <Array.au3>
    #include <GuiListView.au3>
    #include <GUIToolTip.au3>
    #include <Process.au3>
    #include <WinAPI.au3>
    #include <WinAPISys.au3>
    #include <WinAPIProc.au3>
    _Main()
    Func _Main()
    	#region - GUI Create
    	Local $x = @DesktopWidth -80, $msg, $hWndOwner, $idLV, $hLV, $idButton_Exit, $hButton_Exit, $aInfo[2][7], $hWndParent, $iPID, _
    	$sSpacer1 = '~~~~~~~~~~~~~~~~~~~~~~~~'
    	$sSpacer2 = '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
    	Local Enum $enPID, $enProcName, $enHW, $enWT, $enCW, $enO, $enP
    	Local Enum $enOwner, $enParent
    	$hWndOwner = GUICreate('Unsere GUI', $x, 145, -1, -1)
    	GUISetFont(8.5, 800, 0, 'Courier New')
    	$idLV = GUICtrlCreateListView('PID|Process-Name|Window-Handle/ClassName|Window-Title|Child-Windows|Owner|Parent', 0, 0, $x, 100)
    	$hLV  = GUICtrlGetHandle($idLV)
    	_GUICtrlListView_SetColumnWidth($idLV, 0, 50)	; PID
    	_GUICtrlListView_SetColumnWidth($idLV, 1, Int($x*0.10))	; Process-Name
    	_GUICtrlListView_SetColumnWidth($idLV, 2, Int($x*0.15))	; Window-Handle/ClassName
    	_GUICtrlListView_SetColumnWidth($idLV, 3, Int($x*0.15))	; Window-Title
    	_GUICtrlListView_SetColumnWidth($idLV, 4, Int($x*0.51))	; Child-Windows
    	_GUICtrlListView_SetColumnWidth($idLV, 5, 50)	; Owner
    	_GUICtrlListView_SetColumnWidth($idLV, 6, 50)	; Parent
    	_GUICtrlListView_JustifyColumn($idLV, 0, 1)
    	$idButton_Exit = GUICtrlCreateButton('Exit', 5, 110, $x -10, 25)
    	$hButton_Exit  = GUICtrlGetHandle($idButton_Exit)
    	Local $hToolTip = _GUIToolTip_Create(0)
    	GUISetState()
    	#endregion
    	; Owner PID - oder mit WinGetProcess($hWnd)
    	$aInfo[$enOwner][$enPID] = @AutoItPID
    	; Owner ProcessName
    	$aInfo[$enOwner][$enProcName] = _ProcessGetName(@AutoItPID)
    	; Owner Window-Handle
    	$aInfo[$enOwner][$enHW] = $hWndOwner & '/' & _WinAPI_GetClassName($hWndOwner)
    	; Owner Window-Title
    	$aInfo[$enOwner][$enWT] = WinGetTitle($hWndOwner)
    	; Owner Child-Window-Handles
    	Local $aOwnerChildWindows = _WinAPI_EnumChildWindows($hWndOwner)
    	$aInfo[$enOwner][$enCW] = _ArrayToString($aOwnerChildWindows, ', ')
    	; Owner
    	$aInfo[$enOwner][$enO] = 'X'
    	_ArrayAdd($aOwnerChildWindows, $sSpacer1 & '|' & $sSpacer2)
    	_ArrayDisplay($aOwnerChildWindows, '$aOwnerChildWindows - ' & $aInfo[$enOwner][$enWT])
    	;  Parent PID
    	$aInfo[$enParent][$enPID] = _WinAPI_GetParentProcess()
    	; Parent ProcessName
    	$aInfo[$enParent][$enProcName] = _ProcessGetName($aInfo[$enParent][$enPID])
    	; Parent Window-Handle
    	Local $aParentProcessWindows = _WinAPI_EnumProcessWindows($aInfo[$enParent][$enPID], False)
    	For $i = 1 To $aParentProcessWindows[0][0] Step 1
    		If WinGetProcess($aParentProcessWindows[$i][0]) = $aInfo[$enParent][$enPID] Then
    			$aInfo[$enParent][$enHW] = $aParentProcessWindows[$i][0]
    			$aInfo[$enParent][$enWT] = WinGetTitle($aInfo[$enParent][$enHW])
    			If $aInfo[$enParent][$enWT] = '' Then ContinueLoop
    			ExitLoop
    		EndIf
    	Next
    	; Parent Child-Window-Handles
    	Local $aParentChildWindows = _WinAPI_EnumChildWindows($aInfo[$enParent][$enHW])
    	_ArrayAdd($aParentChildWindows, $sSpacer1 & '|' & $sSpacer2)
    	$aInfo[$enParent][$enHW] &= '/' & _WinAPI_GetClassName($aInfo[$enParent][$enHW])
    	$aInfo[$enParent][$enCW] = _ArrayToString($aParentChildWindows, ', ')
    	$aInfo[$enParent][$enP] = 'X'
    	_ArrayDisplay($aParentChildWindows, '$aParentChildWindows - ' & $aInfo[$enParent][$enWT])
    	_GUICtrlListView_AddArray($idLV, $aInfo)
    	Local $hWndParent = $aInfo[$enParent][$enHW]
    	; add tools to the tooltip controls
    	_GUIToolTip_AddTool($hToolTip, $hWndOwner, "$hWndOwner - $hLV", $hLV)
    	_GUIToolTip_AddTool($hToolTip, $hWndOwner, "$hWndOwner - $hButton_Exit", $hButton_Exit)
    	#region - ChildGUI Create
    	Local $aWinPos = WinGetPos($hWndOwner)
    	Local $hWndChildOwner = GUICreate('MyChildGUI', 400, 45, -1, $aWinPos[1] + $aWinPos[3] + 20, -1, -1, $hWndOwner)
    	$idChildButton_Exit = GUICtrlCreateButton('Exit', 5, 10, 390, 25)
    	$hChildButton_Exit  = GUICtrlGetHandle($idChildButton_Exit)
    	_GUIToolTip_AddTool($hToolTip, $hWndChildOwner, "$hWndChildOwner - $hChildButton_Exit", $hChildButton_Exit)
    	GUISetState()
    	GUISwitch($hWndOwner)
    	#endregion
    	#region - GUI SelectLoop
    	While 1
    		$msg = GUIGetMsg()
    		Select
    			Case $msg = $GUI_EVENT_CLOSE Or $msg = $idButton_Exit
    				Exit
    			Case $msg = $idChildButton_Exit
    				GUIDelete($hWndChildOwner)
    			;Case $msg =
    			;Case $msg =
    			;Case $msg =
    		EndSelect
    	WEnd
    	#endregion
    	; Destroy the tooltip controls
    	_GUIToolTip_Destroy($hToolTip)
    EndFunc
    Alles anzeigen
  • Drag und Drop von Outlook

    • Bitnugger
    • 19. November 2016 um 07:21

    Du kannst dir dazu ja mal die Funktion _WinAPI_DragAcceptFiles() anschauen und die _FileDragDrop UDF...

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™