Beiträge von Bitnugger
-
-
Regular Expressions ist eine Sprache, ...
Ne, ne, ne und ne... Deutsch, Englisch, AutoIt, Python und HTML sind Sprachen, aber Regular Expressions ist definitiv keine!
Ein regulärer Ausdruck (englisch regular expression, Abkürzung RegExp oder Regex) ist in der theoretischen Informatik eine Zeichenkette, die der Beschreibung von Mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient.
Wer die Sprache nicht lernt, sondern nur fertige Ausdrücke kopiert, wird nie weiter kommen, genau wie "dumme" Maschinen, die auch immer nur das können, was ihnen jemand "beigebracht" hat.
Das sehe ich anders. Wenn ich öfters weite Strecken überwinden muss, aber nicht die Lust, Zeit oder Möglichkeit habe, zu erlernen mir selbst ein Auto zu bauen, dann leihe/lease/kaufe ich mir eins. Das bringt mich auch ans Ziel!
Das Sinnvollste wäre es wohl, die Erklärungen in der Hilfe hier zu diskutieren und entspr. Fragen von Laien ausführlicher zu erklären, incl. Beispielen.
Nein, das finde ich gar nicht sinnvoll. Dieser Thread ist dafür da, um Reguläre Ausdrücke zu sammeln, nicht aber um ihn mit endlosen Diskussionen/Fragen zu füllen. Dafür gibt es hier sicher andere Threads oder Seiten im Internet, die einen zu diesem Thema erleuchten können.
-
_Excel_RangeRead($oWorkbook, Default, $c & ":" $z)
_Excel_RangeRead($oWorkbook, Default, $c & ":" & $z)
-
"schade", ich dachte (hatte gehofft) dass der Zugriff einfacher möglich ist...
Hey, also noch einfacher als mit openfiles.exe geht es bald gar nicht!
Hier mal kurz erklärt, wie das mit openfiles.exe funktioniert:
Wichtig: openfiles.exe muss immer in einer Eingabeaufforderung mit erhöhten Rechten (als "Administrator") gestartet werden!
Wenn lokale Dateien angezeigt/berücksichtigt werden sollen, musst openfiles.exe einmalig mit den Parametern /Local ON aufrufen und der PC dann neu gestartet werden.
openfiles.exe /Local ON
openfiles.exe kann nun einfach ohne Parameter aufrufen werden, wenn ein einfache Auflistung der geöffneten Pfade/Dateien reicht...
das sieht dann so aus:
Code
Alles anzeigenLokal geöffnete Dateien: --------------------- Kennu Prozessname Open File (Pfad\ausführbare Datei) ===== ==================== ================================================== 68 sihost.exe C:\Windows\System32 432 sihost.exe C:\Windows\Registration\R000000000015.clb 560 sihost.exe C:\..4ccf1df_5.82.17763.134_none_10e1f93464306f65 1776 sihost.exe C:\..\Windows\System32\de-DE\KernelBase.dll.mui 2736 sihost.exe C:\..44ccf1df_1.1.17763.134_none_369e2a1f61b3942a 64 GroupyCtrl.exe C:\Windows\System32 108 GroupyCtrl.exe C:\..44ccf1df_1.1.17763.134_none_369e2a1f61b3942a ......oder aber (z.B.) mit den Parametern /Query /FO LIST /V, um einer erweiterte Ausgabe zu bekommen...
das sieht dann so aus:
Code
Alles anzeigenKennung: 2564 Zugriff durch: ghost PID: 13684 Prozessname: AutoIt3Help.exe Open File (Pfad\ausführbare Datei): C:\Windows\SysWOW64\stdole2.tlb Kennung: 64 Zugriff durch: ghost PID: 10640 Prozessname: smartscreen.exe Open File (Pfad\ausführbare Datei): C:\Windows\System32Ich möchte für eine genau bestimmte Datei ermitteln, durch welchen Prozess diese "in use" ist.
Du meinst... durch welche Prozesse - denn das können durchaus auch mehrere sein!
Ich schreibe die Tage mal ein kleines Script dafür...
-
Aber was genau bewirkt dies?
Wird länger gewartet, wenn keine Rückmeldung kommt?
Ja, es wird länger gewartet, wenn keine Rückmeldung kommt.
Global $CONNECT_TIMEOUT = 0xFFFFFF, $RECEIVE_TIMEOUT = 0xFFFFFF
Hier habe ich für CONNECT TIMEOUT und RECEIVE TIMEOUT die größtmöglichen Werte gesetzt. Für dich ist sicher $RECEIVE_TIMEOUT der wichtigere Wert.
Du kannst die Werte ja mal schrittweise verringern - z.B.: 0x0FFFFF, 0x00FFFF, 0x000FFF.
Hat diese Funktion Nachteile?
In deinem Fall nein, aber ansonsten wäre es wohl extrem nervig, wenn man bei allen Verbindungen ewig lange auf eine Rückmeldung warten müsste und es am Ende dann doch nicht funktioniert.
Die Änderungen gelten nur für das ausgeführte Script (oder das angegebene Internet-Handle) und auch nur solange dieses läuft.
-
Keine Veränderung wenn ich den Router vom Netzt genommen habe.
Doch... aber das dauert ein paar Minuten, bis der veränderte Status erkannt wird.
-
Global $file = FileOpen("connection.log")
So kannst du aber nicht in die Datei schreiben, sondern nur lesen - du musst als zweiten Parameter den Mode angeben: $FO_APPEND (1) oder $FO_OVERWRITE (2)
Global $file = FileOpen("connection.log", $FO_APPEND)
-
-
Als ich heute von der Arbeit kam, konnte ich autoit.de gar nicht erreichen, dann ging es eine Zeit lang... und nun ist die Shoutbox weg.
Ist das jetzt nur bei mir der Fall?
-
Übrigens: VeraCrypt ist ein Abspaltung von TrueCrypt, dass dessen bekannte Sicherheitslücken schließt und somit auch TrueCrypt-Container öffnen kann.
-
$IsCon = DllCall($hDLL, 'long', 'IsInternetConnected')
Zitathttps://docs.microsoft.com/en-us/previous…ternetconnected
Bemerkungen
Diese API verwendet NCSI und den Network Location Manager (NLM), um eine "beste Einschätzung" hinsichtlich der Internetkonnektivität des aktuellen Benutzers zu ermitteln. Selbst wenn S_OK zurückgegeben wird, kann nicht garantiert werden, dass der Benutzer eine bestimmte Internetadresse erreichen kann.
Hast du eine Fritz!Box?
Wenn ja, dann hätte ich ein Script für dich, dass direkt die Fritz!Box (ohne Passwort) abfragen kann, ob sie mit dem Internet verbunden ist. Dazu benötigst du aber Python 3, weil die eigentliche Abfrage mit einem Python-Script erledigt wird.
-
Evtl. hilft es, die Timeouts (CONNECT TIMEOUT und/oder RECEIVE TIMEOUT) zu ändern...
Kannst ja mal dieses Script testen, ob es damit geht.
AutoIt
Alles anzeigen;-- TIME_STAMP 2018-11-11 19:00:00 v 0.1 Global Const $INTERNET_OPTION_CONNECT_TIMEOUT = 2, $INTERNET_OPTION_RECEIVE_TIMEOUT = 6 Global $CONNECT_TIMEOUT = 0xFFFFFF, $RECEIVE_TIMEOUT = 0xFFFFFF _InternetSetOptionsW() ; ...hier dein Script ;~ InetGet(...) Func _InternetSetOptionsW() Local $hWININET = DllOpen("wininet.dll"), $hInternet = 0, $aRes, $tTime = DllStructCreate("long") DllStructSetData($tTime, 1, $CONNECT_TIMEOUT) $aRes = DllCall($hWININET, 'dword', 'InternetSetOptionW', 'int', $hInternet, 'dword', $INTERNET_OPTION_CONNECT_TIMEOUT, "ptr", DllStructGetPtr($tTime), "dword", DllStructGetSize($tTime)) If @error Or $aRes[0] = 0 Then DllCall($hWININET, 'int', 'InternetCloseHandle', 'int', $hInternet) DllClose($hWININET) ConsoleWrite('! CONNECT_TIMEOUT konnte nicht geändert werden!' & @CRLF) Return SetError(1, 0, "") EndIf ConsoleWrite('+ CONNECT_TIMEOUT wurde geändert!' & @CRLF) DllStructSetData($tTime, 1, $RECEIVE_TIMEOUT) $aRes = DllCall($hWININET, 'int', 'InternetSetOptionW', 'int', $hInternet, 'dword', $INTERNET_OPTION_RECEIVE_TIMEOUT, "ptr", DllStructGetPtr($tTime), "dword", DllStructGetSize($tTime)) If @error Or $aRes[0] = 0 Then DllCall($hWININET, 'int', 'InternetCloseHandle', 'int', $hInternet) DllClose($hWININET) ConsoleWrite('! RECEIVE_TIMEOUT konnte nicht geändert werden!' & @CRLF) Return SetError(1, 0, "") EndIf ConsoleWrite('+ RECEIVE_TIMEOUT wurde geändert!' & @CRLF) Return True EndFunc ;==>__InternetSetOptionsW -
Teste mal das hier...
AutoIt
Alles anzeigen;-- TIME_STAMP 2018-11-11 17:42:09 v 0.1 #NoTrayIcon #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=..\..\..\Icons\ACDSee9pro.ico #AutoIt3Wrapper_Res_Description=Open SpeedCommander #AutoIt3Wrapper_Res_Fileversion=1.0.0.35 #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y #AutoIt3Wrapper_Res_Language=1031 #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y #AutoIt3Wrapper_Run_Tidy=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** Opt('WinTitleMatchMode', 2) _SpeedCommander_Start() Func _SpeedCommander_Start() If Not FileExists('C:\Program Files\SpeedProject\SpeedCommander 15\SpeedCommander.exe') Then Exit MsgBox(64, @ScriptFullPath, 'Das Programm "SpeedCommander 15 Pro" scheint' & @CRLF & 'auf diesem PC nicht installiert zu sein.') EndIf ; Pfade, die Leerzeichen enthalten, solltest du besser in Anführungszeichen übergeben! Hier in diesem Fall werden in $CMDLINE nämlich sonst 3 Parameter übergeben! ;~ Local $iPID = ShellExecute('SpeedCommander.exe', ' /L:C:\x_Alter_PC\Eigene Dateien /R:C:\x_Alter_PC', 'C:\Program Files\SpeedProject\SpeedCommander 15', 'open') ; $CMDLINE[1] = /L:C:\x_Alter_PC\Eigene ; $CMDLINE[2] = Dateien ; $CMDLINE[3] = /R:C:\x_Alter_PC ; Um ausführbare Dateien zu starten, würde ich Run() verwenden! ;~ Local $iPID = ShellExecute('SpeedCommander.exe', ' /L:"C:\x_Alter_PC\Eigene Dateien" /R:"C:\x_Alter_PC"', 'C:\Program Files\SpeedProject\SpeedCommander 15', 'open') Local $iPID = Run('SpeedCommander.exe /L:"C:\x_Alter_PC\Eigene Dateien" /R:"C:\x_Alter_PC"', 'C:\Program Files\SpeedProject\SpeedCommander 15') ConsoleWrite("$iPID --> " & $iPID & @CRLF) If Not $iPID Then Exit MsgBox(64, @ScriptFullPath, 'Fehler bei Run() - SpeedCommander 15 Pro konnte nicht gestartet werden!') Local $hWnd = WinWait('SpeedCommander 15 Pro', '', 10) ConsoleWrite("$hWnd --> " & $hWnd & @CRLF) If IsHWnd($hWnd) Then ConsoleWrite("@DesktopWidth > 1366? --> " & @DesktopWidth & @CRLF) If @DesktopWidth > 1366 Then Local $iMove = 0, $hMove, $x = (@DesktopWidth / 2) - (1400 / 2), $y = ((@DesktopHeight / 2) - (900 / 2) + 70), $w = 1400, $h = 900 Do $hMove = WinMove($hWnd, '', $x, $y, $w, $h) If IsHWnd($hMove) Then ExitLoop $iMove += 1 Sleep(250) Until $iMove = 10 ConsoleWrite("$iMove --> " & $iMove & @CRLF) If Not $hMove Then Exit MsgBox(64, @ScriptFullPath, 'Fenster von SpeedCommander 15 Pro konnte nicht verschoben werden!') EndIf Else Exit MsgBox(64, @ScriptFullPath, 'Sie haben evtl. nicht genug Rechte, um das Programm "SpeedCommander 15 Pro" zu starten?!') EndIf Return True EndFunc ;==>_SpeedCommander_Start -
Hurra! Ich bin einen Schritt weiter.
Diese Anweisung läuft:
_Excel_RangeDelete($oExcelU.ActiveSheet,"A2:A3")Na super!

Hier hast du nun auch einen korrekten Range angegeben... denn "1" ist kein korrekter Range... weil ein Range aus Start:Ende besteht, wobei Start und Ende auch identisch sein können.
Zwei erhebliche Wissenslücken habe ich bei den Console-Anweisungen. Wo finde ich Stdout?
https://de.wikipedia.org/wiki/Standard-Datenströme
Stdout kannst du mit der Funktion StdoutRead auslesen, doch das ist momentan nicht relevant für dich. Das brauchst du nur, wenn du die Ausgaben aus dem STDOUT-Stream eines zuvor ausgeführten untergeordneten Prozesses lesen willst - wenn du z.B. mit AutoIt einen Consolen-Befehl mit Run() ausführst und dessen Ausgabe haben willst. Mehr zu diesem Thema findest du in der AutoIt-Hilfe unter folgenden Funktionen: Run, RunAs, StdoutRead, StderrRead, StdinWrite, StdioClose.
Da greift evtl. die zweite Lücke. ich habe den Umstieg auf SciTE bisher nicht geschafft.
Hier will ich direkt mal klar stellen, dass die Ausgabenkonsole von SciTE/NP++ eine spezielle Console (Scintilla-Control) ist, für die du im Normalfall kein Stdout bzw. StdoutRead brauchst.
Schau dir in der AutoIt-Hilfe folgende Funktionen an: ConsoleWrite, ConsoleRead, ConsoleWriteError
Du hast den Umstieg noch nicht geschafft? Wieso hast du mit NP++ angefangen, obwohl SciTE der empfohlenen Editor für AutoIt ist? Nein, sage es nicht... weil jeder sich so gut quält, wie er kann.

Wenn du AutoIt installierst, wird bereits ein abgespeckte Version von SciTE mit installiert. Um alle verfügbaren SciTE-Features nutzen zu können (wärmstens empfohlen!), musst du aber SciTE4AutoIt3 installieren.
Hier der Link zum Download: https://www.autoitscript.com/site/autoit-sc…itor/downloads/
Im Anhang findest du noch das test2.zip, das ist deine test1.zip... nur etwas aufgepeppt und mit einigen Kommentaren versehen. Schau es dir an!
So, jetzt hast du erst mal genug zu lesen...

-
Wo findet man Beschreibungen von Anweisungen mit Punkterweiterungen wie z.B. "$oWorkbook.ActiveSheet"
Generell: https://msdn.microsoft.com/
Speziell zu Excel Workbook: https://msdn.microsoft.com/de-de/vba/exce…ok-object-excel
Wie gebe ich Variable bei denExcel-Anweisungen an, vielleicht z.B. für eine zu löschende Zeile
_Excel_RangeDelete($oWorkbook.ActiveSheet, $Zeile)Du kannst bei der Funktion _Excel_RangeDelete den Range so setzen, dass eben nur die gewünschte Zeile gelöscht wird.
Bsp.: Nur Zeile 7 löschen
-
Außerdem hätte ich gern noch gewußt, wie man den Code korrekt in einen Spoiler einfügt, sodass es so wie im Editor aussieht?
Direkt links neben dem Spoiler-Tag findest du den Code-Tag in der Werkzeugleiste. Das wird dir aber auch angezeigt, wenn du mit der Maus über den Symbolen in der Werkzeugleiste stehst.
-
Das Testscript ExcelDelete2.au3 habe ich derBeschreibung der Function _Excel_RangeDelete, -Beispie2- per cut and paste entnommen
(https://www.autoitscript.com/a…ns/_Excel_RangeDelete.htm)und in I:\ABC\_0-b\AutoIt\Scripts\ExcelDelete gespeichert.
Nicht per Cut & Paste, sondern per Copy & Paste!
Das habe ich auch mal genau so gemacht... den Text aus der Zwischenablage in SciTE eingefügt und unter m:\Excel\_Excel_RangeDelete[2].au3 gespeichert. Die Excel-Testdatei habe ich hier m:\Excel\Extras\_Excel1.xls gespeichert. Wenn ich nun das Script in SciTE mit F5 ausführe, läuft alles wie es soll.
In welches Programm/Editor hast du denn den Text mit Paste eingefügt, um ihn zu speichern?
Hier die Zeile 8 vor und nach der Änderung:
Die Zeilen unter vorher und nachher sind identisch!
Als Test-Exceltabelle müßte man eine beliebige Exceldatei nehmen können.
Das ist Quatsch... denn beliebig wäre demnach auch eine leere Exceldatei... und darin könntest du keine Zeilen löschen. Zudem wurde in diesem Beispiel eben genau diese Datei ausgewählt, um zu zeigen, wie man mehrere Zeilen in einem bestimmten Arbeitsblatt in einem Rutsch löscht.
-
Macht dieser Code Probleme, unter höheren Windows-Versionen?
Nein, doch diese Frage solltest du dir eigentlich anhand meines vorherigen Beispiels selbst beantworten können, denn darin werden ja dieselben Funktionen benutzt und ich hatte ja geschrieben, das ich Win 7/10 benutze.

Diese Zeile kannst du dir sparen...
_GUICtrlTab_DeselectAll($hGUIParent1, False) ; Remarks: This only works if $TCS_BUTTONS style flag has been set.
-
Gut dass Du darauf aufmerksam machst, dass da eventuell Probleme zu erwarten sind!
Nein, keine Probleme, denn die Lösung ist recht simpel: Du musst die Message WM_DROPFILES selbst verarbeiten.
So sieht das dann aus...
AutoIt
Alles anzeigen;-- TIME_STAMP 2018-11-08 17:13:50 v 0.1 #Region ;************ Includes ************ #Include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <GuiTab.au3> #include <WinAPISysWin.au3> #EndRegion ;************ Includes ************ Example() Func Example() Local $hGUI, $idButton1, $idButton2, $idButton3, $idInput, $idNewInput, $aTabs[3], $sInput $hGUI = GUICreate("Parent1", 600, 400, -1, -1, -1, $WS_EX_ACCEPTFILES) $idButton1 = GUICtrlCreateButton("Move Inputbox in Tab 2", 350, 10, 200, 50) $idButton2 = GUICtrlCreateButton("Move Inputbox in Tab 1", 350, 70, 200, 50) $idButton3 = GUICtrlCreateButton("Create Inputbox in GUI", 350, 130, 200, 50) $aTabs[0] = GUICtrlCreateTab(10, 40, 300, 300) $aTabs[1] = GUICtrlCreateTabItem("tab1") $idInput = GUICtrlCreateInput("Ich möchte moven!", 50, 150, 200, 30, BitOR($GUI_SS_DEFAULT_INPUT, $ES_LOWERCASE)) GUICtrlSetState(-1, $GUI_DROPACCEPTED) $aTabs[2] = GUICtrlCreateTabItem("tab2") GUICtrlCreateTabItem("") GUISetState(@SW_SHOW) GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES") ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idButton1 _MoveInputBoxToOtherTab($hGUI, $idInput, $aTabs, 0, 1) Case $idButton2 _MoveInputBoxToOtherTab($hGUI, $idInput, $aTabs, 1, 0) Case $idButton3 If Not $idNewInput Then $idNewInput = GUICtrlCreateInput("Ich möchte moven!", 50, 200, 200, 30) EndSwitch WEnd EndFunc ;==>Example Func _MoveInputBoxToOtherTab($hWnd, ByRef $idInputBox, $aTabs, $iTabItemFromIndex, $iTabItemToIndex, $iTabItemSel = $iTabItemToIndex) Local $hInputBox = GUICtrlGetHandle($idInputBox) Local $sInhalt = GUICtrlRead($idInputBox) ; Inhalt der InputBox auslesen. Local $aPos = ControlGetPos($hWnd, '', $idInputBox) ; Position der InputBox merken. Local $iStatus = GUICtrlGetState($idInputBox) ; Status der InputBox merken. Local $iStyle = _WinAPI_GetWindowLong($hInputBox, $GWL_STYLE) Local $iExStyle = _WinAPI_GetWindowLong($hInputBox, $GWL_EXSTYLE) Local $iSel = $iTabItemSel = -1 Or $iTabItemSel <> $iTabItemToIndex ? _GUICtrlTab_GetCurSel($aTabs[0]) : $iTabItemToIndex If Not GUICtrlDelete($idInputBox) Then Return SetError(1, 0, False) _GUICtrlTab_SetCurSel($aTabs[0], $iTabItemToIndex) GUISwitch($hWnd, $aTabs[$iTabItemToIndex + 1]) ; TabItem auswählen, in dem die InputBox erzeugt werden soll. $idInputBox = GUICtrlCreateInput($sInhalt, $aPos[0], $aPos[1], $aPos[2], $aPos[3]) $hInputBox = GUICtrlGetHandle($idInputBox) GUICtrlSetState(-1, $iStatus) _WinAPI_SetWindowLong($hInputBox, $GWL_STYLE, $iStyle) _WinAPI_SetWindowLong($hInputBox, $GWL_EXSTYLE, $iExStyle) GUICtrlCreateTabItem("") If $iTabItemSel <> $iSel Then _GUICtrlTab_SetCurSel($aTabs[0], $iSel) Return True EndFunc ;==>_MoveInputBoxToOtherTab Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam ; eine Anweisung an AutoIt, dass diese Variablen hier nicht verwendet werden Local $aFileList = _WinAPI_DragQueryFileEx($wParam) ; , $tPoint = _WinAPI_DragQueryPoint($wParam) ConsoleWrite('> drag drop file: ' & _ArrayToString($aFileList, ', ') & @CRLF) Local $hActive = WinGetHandle('[ACTIVE]') Local $aCursorInfo = GUIGetCursorInfo(WinActivate($hWnd)) If Not @error And $aCursorInfo[4] Then GUICtrlSetData($aCursorInfo[4], _ArrayToString($aFileList, ', ', 1)) EndIf WinActivate($hActive) _WinAPI_DragFinish($wParam) Return 0 EndFunc ;==>_WM_NOTIFY -
Ich habe dein Script aus Post #8 mal ein wenig geändert und erweitert, damit bei der neu erstellten InputBox auch die Styles und ExStyles erhalten bleiben.
Soweit funktioniert das auch alles, wie es soll.
Bei Drag-n-Drop auf die InputBox ist mir allerdings ein Fehler aufgefallen... denn immer bei der jeweils ersten Aktion (nach dem Erstellen der InputBox) wird das Drop-File vor dem bereits vorhandenen Inhalt der InputBox eingefügt, bei jeder weiteren Aktion nur noch das Drop-File, obwohl in allen Fällen der vorbelegte Text in der InputBox steht.
Edit: Obiger Fehler bei Drag-n-Drop bezieht sich auf Windows 10. Auf Windows 7 werden in allen Fällen die letzten beiden Zeichen des vorbelegten Texts in der InputBox abgeschnitten und das Drop-File dann dahinter eingefügt.
AutoIt
Alles anzeigen;-- TIME_STAMP 2018-11-08 14:22:10 v 0.1 #Region ;************ Includes ************ #Include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GuiTab.au3> #include <WinAPISysWin.au3> #EndRegion ;************ Includes ************ Example() Func Example() Local $hGUI, $idButton1, $idButton2, $idButton3, $idInput, $idNewInput, $aTabs[3], $sInput $hGUI = GUICreate("Parent1", 600, 400, -1, -1, -1, $WS_EX_ACCEPTFILES) $idButton1 = GUICtrlCreateButton("Move Inputbox in Tab 2", 350, 10, 200, 50) $idButton2 = GUICtrlCreateButton("Move Inputbox in Tab 1", 350, 70, 200, 50) $idButton3 = GUICtrlCreateButton("Create Inputbox in GUI", 350, 130, 200, 50) $aTabs[0] = GUICtrlCreateTab(10, 40, 300, 300) $aTabs[1] = GUICtrlCreateTabItem("tab1") $idInput = GUICtrlCreateInput("Ich möchte moven!", 50, 150, 200, 30, BitOR($GUI_SS_DEFAULT_INPUT, $ES_LOWERCASE)) GUICtrlSetState(-1, $GUI_DROPACCEPTED) $aTabs[2] = GUICtrlCreateTabItem("tab2") GUICtrlCreateTabItem("") GUISetState(@SW_SHOW) GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idButton1 _MoveInputBoxToOtherTab($hGUI, $idInput, $aTabs, 0, 1) Case $idButton2 _MoveInputBoxToOtherTab($hGUI, $idInput, $aTabs, 1, 0) Case $idButton3 If Not $idNewInput Then $idNewInput = GUICtrlCreateInput("Ich möchte moven!", 50, 200, 200, 30) EndSwitch WEnd EndFunc ;==>Example Func _MoveInputBoxToOtherTab($hWnd, ByRef $idInputBox, $aTabs, $iTabItemFromIndex, $iTabItemToIndex, $iTabItemSel = $iTabItemToIndex) Local $hInputBox = GUICtrlGetHandle($idInputBox) Local $sInhalt = GUICtrlRead($idInputBox) ; Inhalt der InputBox auslesen. Local $aPos = ControlGetPos($hWnd, '', $idInputBox) ; Position der InputBox merken. Local $iStatus = GUICtrlGetState($idInputBox) ; Status der InputBox merken. Local $iStyle = _WinAPI_GetWindowLong($hInputBox, $GWL_STYLE) Local $iExStyle = _WinAPI_GetWindowLong($hInputBox, $GWL_EXSTYLE) Local $iSel = $iTabItemSel = -1 Or $iTabItemSel <> $iTabItemToIndex ? _GUICtrlTab_GetCurSel($aTabs[0]) : $iTabItemToIndex If Not GUICtrlDelete($idInputBox) Then Return SetError(1, 0, False) _GUICtrlTab_SetCurSel($aTabs[0], $iTabItemToIndex) GUISwitch($hWnd, $aTabs[$iTabItemToIndex + 1]) ; TabItem auswählen, in dem die InputBox erzeugt werden soll. $idInputBox = GUICtrlCreateInput($sInhalt, $aPos[0], $aPos[1], $aPos[2], $aPos[3]) $hInputBox = GUICtrlGetHandle($idInputBox) GUICtrlSetState(-1, $iStatus) _WinAPI_SetWindowLong($hInputBox, $GWL_STYLE, $iStyle) _WinAPI_SetWindowLong($hInputBox, $GWL_EXSTYLE, $iExStyle) GUICtrlCreateTabItem("") If $iTabItemSel <> $iSel Then _GUICtrlTab_SetCurSel($aTabs[0], $iSel) Return True EndFunc ;==>_MoveInputBoxToOtherTab Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg Local $hWndFrom = $lParam, $iIDFrom = _WinAPI_LoWord($wParam), $iCode = _WinAPI_HiWord($wParam), $sInput Switch $hWndFrom Case GUICtrlGetHandle($iIDFrom) Switch $iCode Case $EN_CHANGE $sInput = GUICtrlRead($iIDFrom) If $sInput <> "Ich möchte moven!" Then ConsoleWrite('> drag drop file: ' & $sInput & @CRLF) GUICtrlSetData($iIDFrom, "Ich möchte moven!") EndIf ; no return value EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND