Bevor Du die Inputbox aufrufst, musst Du die Koordinaten Deiner GUI mit WinGetPos auslesen und diese dann an die Inputbox übergeben.
Falls Du das nicht hinbekommst, poste bitte Dein ganzes Skript, dann kann man das leichter einbauen.
Beiträge von Oscar
-
-
Ich denke, dass das Problem auftritt, weil Du die Verbindung nicht beendest, nachdem die Daten gesendet wurden.
[autoit]TCPCloseSocket($Socket) ; fehlt
[/autoit] -
Ich denke, Du suchst sowas: https://autoit.de/index.php?page…51440#post51440
-
So?
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>Global $sHeader = "PDF|Info" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
[/autoit] [autoit][/autoit] [autoit]
Global $sDBFile = @ScriptDir & "\Scan.csv" ; Pfad und Name der Datenbank-Datei
Global $iEdit = -1 ; Wert auf -1 setzen, weil _GUICtrlListView_GetSelectionMark() einen Nullbasierten Wert liefert
Global $subItem = 1
#region Hauptfenster
Global $hGui = GUICreate("Listview-Datenbank-Beispiel", 600, 480) ; Hauptfenster erstellen
GUISetBkColor(0xCCCCCC)Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 400, $LVS_SHOWSELALWAYS) ; Listview erstellen
[/autoit] [autoit][/autoit] [autoit]Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_SetColumn($hLVHandle, 0, "PDF", 0, 1) ; 1. Spalte = 120 Px breit, rechts ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 1, "Info", 200, 0) ; 2. Spalte = 60 Px breit, links ausgerichtet
;~ _GUICtrlListView_SetColumn($hLVHandle, 2, "Nummer", 90, 0) ; 3. Spalte = 90 Px breit, links ausgerichtet
;~ _GUICtrlListView_SetColumn($hLVHandle, 3, "Baureihe", 100, 0) ; 4. Spalte = 100 Px breit, links ausgerichtet
;~ _GUICtrlListView_SetColumn($hLVHandle, 4, "Name", 120, 0) ; 5. Spalte = 120 Px breit, links ausgerichtetGlobal $hSearchListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 400, $LVS_SHOWSELALWAYS) ; Listview für die Suche erstellen
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState(-1, $GUI_HIDE)
Global $hSearchLVHandle = GUICtrlGetHandle($hSearchListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
_GUICtrlListView_SetColumn($hSearchLVHandle, 0, "PDF", 70, 1) ; 1. Spalte = 120 Px breit, rechts ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 1, "Info", 60, 0) ; 2. Spalte = 60 Px breit, links ausgerichtet
;~ _GUICtrlListView_SetColumn($hSearchLVHandle, 2, "Nummer", 90, 0) ; 3. Spalte = 90 Px breit, links ausgerichtet
;~ _GUICtrlListView_SetColumn($hSearchLVHandle, 3, "Baureihe", 100, 0) ; 4. Spalte = 100 Px breit, links ausgerichtet
;~ _GUICtrlListView_SetColumn($hSearchLVHandle, 4, "Name", 120, 0) ; 5. Spalte = 120 Px breit, links ausgerichtetGUICtrlCreateLabel("Suchbegriff:", 10, 412, 90, 20)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 11)
Global $hSearch = GUICtrlCreateInput("", 100, 410, 390, 20)
GUICtrlSetFont(-1, 11)
Global $hSearchStart = GUICtrlCreateButton("Suche...", 500, 410, 60, 20, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
GUICtrlSetFont(-1, 9)
Global $hSearchReset = GUICtrlCreateButton("<-", 562, 410, 28, 20)
GUICtrlSetFont(-1, 8, 600, 0, "Verdana")
GUICtrlSetState(-1, $GUI_DISABLE)Global $hNew = GUICtrlCreateButton("Neuer Eintrag", 5, 440, 80, 35)
[/autoit] [autoit][/autoit] [autoit]
Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 95, 440, 110, 35, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
Global $hLoad = GUICtrlCreateButton("Laden", 230, 440, 70, 35)
Global $hSave = GUICtrlCreateButton("Speichern", 310, 440, 70, 35)
Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 400, 440, 90, 35, $BS_MULTILINE)
Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 500, 440, 90, 35, $BS_MULTILINE)Global $hCM = GUICtrlCreateContextMenu($hListView) ; ein Kontextmenü für das Listview erstellen
[/autoit] [autoit][/autoit] [autoit]
Global $hCMNew = GUICtrlCreateMenuItem("Neuer Eintrag", $hCM) ; der 1. Kontextmenüeintrag
Global $hCMEdit = GUICtrlCreateMenuItem("Eintrag bearbeiten", $hCM) ; der 2. Kontextmenüeintrag
Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeintrag
#endregion Hauptfenster#region Fenster für neuen Eintrag
[/autoit] [autoit][/autoit] [autoit]
Global $hGuiNew = GUICreate("Neuer Eintrag", 632, 140, -1, -1, $WS_SYSMENU) ; das Fenster "Neuer Eintrag" erstellen
Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
Global $aNew[$aHeader[0]] ; Array für die Input-IDs
For $i = 1 To $aHeader[0]
GUICtrlCreateLabel($aHeader[$i], 4 + ($i - 1) * 125, 15, 110, 20) ; Überschriften-Label erstellen
GUICtrlSetFont(-1, 8, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
$aNew[$i - 1] = GUICtrlCreateInput("", 2 + ($i - 1) * 125, 30, 120, 20, Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
Next
Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 254, 65, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
#endregion Fenster für neuen Eintrag_GUICtrlListView_RegisterSortCallBack($hLVHandle) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hGui) ; Hauptfenster sichtbar machen
[/autoit] [autoit][/autoit] [autoit]If FileExists($sDBFile) Then Load() ; wenn Datenbank-Datei existiert, dann Datenbank laden
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
Case $hListView ; User hat auf eine Spaltenüberschrift geklickt
_GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) ; Einträge entsprechend sortierenCase $GUI_EVENT_PRIMARYUP ; == primäre Maustaste losgelassen
[/autoit] [autoit][/autoit] [autoit]
$aCursor = GUIGetCursorInfo($hGui)
If $aCursor[4] = $hSearchListView Then ; == ID des Listview in das geklickt wurde
$index = _GUICtrlListView_GetSelectedIndices($hSearchLVHandle)
If $index <> "" Then
; == den inhalt auslesen und weiterverarbeiten
$inhalt = _GUICtrlListView_GetItemText($hSearchLVHandle, $index, 0)
;MsgBox(0, 'Test', $inhalt)
ShellExecute($inhalt)
EndIf
EndIfCase $hSearchStart
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($hSearchStart, $GUI_DISABLE)
_GUICtrlListView_DeleteAllItems($hSearchLVHandle)
Dim $sSearch = GUICtrlRead($hSearch), $sItem
For $i = 0 To _GUICtrlListView_GetItemCount($hLVHandle) - 1
$sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i)
If StringInStr($sItem, $sSearch) Then GUICtrlCreateListViewItem($sItem, $hSearchListView)
Next
GUICtrlSetState($hListView, $GUI_HIDE)
GUICtrlSetState($hSearchListView, $GUI_SHOW)
GUICtrlSetState($hSearchReset, $GUI_ENABLE)
Case $hSearchReset
GUICtrlSetData($hSearch, "")
GUICtrlSetState($hSearchListView, $GUI_HIDE)
GUICtrlSetState($hListView, $GUI_SHOW)
GUICtrlSetState($hSearchStart, $GUI_ENABLE)
GUICtrlSetState($hSearchReset, $GUI_DISABLE)
Case $hNew, $hCMNew ; User hat auf "Neuer Eintrag" geklickt
WinSetTitle($hGuiNew, "", "Neuer Eintrag") ; den Titel des Fenster anpassen
GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
Case $hEdit, $hCMEdit ; User hat auf "Eintrag bearbeiten" geklickt
WinSetTitle($hGuiNew, "", "Eintrag bearbeiten") ; den Titel des Fenster anpassen
GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
Edit()
Case $hLoad ; User hat auf "Laden" geklickt
Load()
Case $hSave ; User hat auf "Laden" geklickt
Save()
Case $hDel, $hCMDel ; User hat auf "Markierte Einträge löschen" geklickt
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVHandle)
Case $hDelAll ; User hat auf "Alle Einträge löschen" geklickt
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then _GUICtrlListView_DeleteAllItems($hLVHandle)
Case $hCreate ; User hat auf "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
NewItem()
Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
Case $hGui ; User will das Hauptfenster schließen
If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End() ; wenn ja, dann End-Funktion aufrufen
Case $hGuiNew ; User will das "Neuer Eintrag"-Fenster schließen
$iEdit = -1
For $i = 0 To UBound($aNew) - 1
GUICtrlSetData($aNew[$i], "") ; Alle Eingabefelder leeren
Next
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
WinActivate($hGui) ; und in den Vordergrund holen
EndSwitch
EndSwitch
WEndFunc End()
[/autoit] [autoit][/autoit] [autoit]
;~ Save() ; wenn der vordere Kommentar entfernt wird, dann werden vor dem beenden noch die Daten gespeichert
_GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
Exit ; Programm beenden
EndFunc ;==>EndFunc NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
[/autoit] [autoit][/autoit] [autoit]
Local $sItem = ""
For $i = 0 To UBound($aNew) - 1 ; Schleife, um alle Eingabefelder durchzugehen
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
Else ; sonst $iEdit = -1 (neuer Eintrag)
$sItem &= GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
EndIf
GUICtrlSetData($aNew[$i], "") ; das entsprechende Eingabefeld leeren
Next
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
$iEdit = -1
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
Sleep(300)
WinActivate($hGui) ; und in den Vordergrund holen
Else ; sonst $iEdit = -1 (neuer Eintrag)
GUICtrlSetState($aNew[0], $GUI_FOCUS) ; den Focus wieder auf das erste Eingabefeld setzen, für weitere Eingaben
GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $hListView) ; mit den Werten aus $sItem einen neuen Listview-Eintrag hinzufügen
EndIf
EndFunc ;==>NewItemFunc Edit() ; Funktion zum bearbeiten eines Listview-Eintrags im "Eintrag bearbeiten"-Fenster
[/autoit] [autoit][/autoit] [autoit]
$iEdit = _GUICtrlListView_GetSelectionMark($hLVHandle) ; auslesen, welcher Listview-Eintrag markiert (bei mehreren, den obersten) ist
If $iEdit > -1 Then
Local $aItem = _GUICtrlListView_GetItemTextArray($hLVHandle, $iEdit) ; die Einträge aus dem Listview in ein Array holen
For $i = 1 To $aItem[0]
GUICtrlSetData($aNew[$i - 1], $aItem[$i]) ; und in die entsprechenden Eingabefelder schreiben
Next
EndIf
EndFunc ;==>EditFunc Load() ; Datenbank-Datei laden
[/autoit] [autoit][/autoit] [autoit]
Local $hFile, $sContent, $aNewItems
$hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
$sContent = FileRead($hFile) ; Datei komplett einlesen
FileClose($hFile) ; Datei schließen
$sContent = StringTrimRight($sContent, 2) ; das letzte @CRLF entfernen
$aNewItems = StringSplit($sContent, @CRLF, 1) ; Den Dateiinhalt am Zeilenende splitten
If Not IsArray($aNewItems) Then Return ; Wenn $aNewItems kein Array ist, dann Funktion verlassen
_GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
For $i = 1 To $aNewItems[0] ; Alle Einträge des Arrays durchgehen
GUICtrlCreateListViewItem($aNewItems[$i], $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
Next
_GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
EndIf
EndFunc ;==>LoadFunc Save() ; Datenbank-Datei speichern
[/autoit]
Local $sItem, $hFile, $iCount
$iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
If $iCount = -1 Then Return FileDelete($sDBFile) ; Wenn das Listview keine Einträge enthält, dann Datei löschen und Funktion verlassen
$hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
$sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
Next
FileClose($hFile) ; Datei schließen
EndIf
EndFunc ;==>Save -
Ich hab's mal eingebaut:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>Global $sHeader = "Artikelnummer|Art|Nummer|Baureihe|Name" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
[/autoit] [autoit][/autoit] [autoit]
Global $sDBFile = @ScriptDir & "\Scan.csv" ; Pfad und Name der Datenbank-Datei
Global $iEdit = -1 ; Wert auf -1 setzen, weil _GUICtrlListView_GetSelectionMark() einen Nullbasierten Wert liefert
Global $subItem = 1
#region Hauptfenster
Global $hGui = GUICreate("Listview-Datenbank-Beispiel", 600, 480) ; Hauptfenster erstellen
GUISetBkColor(0xCCCCCC)Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 400, $LVS_SHOWSELALWAYS) ; Listview erstellen
[/autoit] [autoit][/autoit] [autoit]Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_SetColumn($hLVHandle, 0, "Artikelnummer", 120, 1) ; 1. Spalte = 120 Px breit, rechts ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 1, "Art", 60, 0) ; 2. Spalte = 60 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 2, "Nummer", 90, 0) ; 3. Spalte = 90 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 3, "Baureihe", 100, 0) ; 4. Spalte = 100 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hLVHandle, 4, "Name", 120, 0) ; 5. Spalte = 120 Px breit, links ausgerichtetGlobal $hSearchListView = GUICtrlCreateListView($sHeader, 0, 0, 600, 400, $LVS_SHOWSELALWAYS) ; Listview für die Suche erstellen
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState(-1, $GUI_HIDE)
Global $hSearchLVHandle = GUICtrlGetHandle($hSearchListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
_GUICtrlListView_SetColumn($hSearchLVHandle, 0, "Artikelnummer", 120, 1) ; 1. Spalte = 120 Px breit, rechts ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 1, "Art", 60, 0) ; 2. Spalte = 60 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 2, "Nummer", 90, 0) ; 3. Spalte = 90 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 3, "Baureihe", 100, 0) ; 4. Spalte = 100 Px breit, links ausgerichtet
_GUICtrlListView_SetColumn($hSearchLVHandle, 4, "Name", 120, 0) ; 5. Spalte = 120 Px breit, links ausgerichtetGUICtrlCreateLabel("Suchbegriff:", 10, 412, 90, 20)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetFont(-1, 11)
Global $hSearch = GUICtrlCreateInput("", 100, 410, 390, 20)
GUICtrlSetFont(-1, 11)
Global $hSearchStart = GUICtrlCreateButton("Suche...", 500, 410, 60, 20, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
GUICtrlSetFont(-1, 9)
Global $hSearchReset = GUICtrlCreateButton("<-", 562, 410, 28, 20)
GUICtrlSetFont(-1, 8, 600, 0, "Verdana")
GUICtrlSetState(-1, $GUI_DISABLE)Global $hNew = GUICtrlCreateButton("Neuer Eintrag", 5, 440, 80, 35)
[/autoit] [autoit][/autoit] [autoit]
Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 95, 440, 110, 35, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
Global $hLoad = GUICtrlCreateButton("Laden", 230, 440, 70, 35)
Global $hSave = GUICtrlCreateButton("Speichern", 310, 440, 70, 35)
Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 400, 440, 90, 35, $BS_MULTILINE)
Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 500, 440, 90, 35, $BS_MULTILINE)Global $hCM = GUICtrlCreateContextMenu($hListView) ; ein Kontextmenü für das Listview erstellen
[/autoit] [autoit][/autoit] [autoit]
Global $hCMNew = GUICtrlCreateMenuItem("Neuer Eintrag", $hCM) ; der 1. Kontextmenüeintrag
Global $hCMEdit = GUICtrlCreateMenuItem("Eintrag bearbeiten", $hCM) ; der 2. Kontextmenüeintrag
Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeintrag
#endregion Hauptfenster#region Fenster für neuen Eintrag
[/autoit] [autoit][/autoit] [autoit]
Global $hGuiNew = GUICreate("Neuer Eintrag", 632, 140, -1, -1, $WS_SYSMENU) ; das Fenster "Neuer Eintrag" erstellen
Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
Global $aNew[$aHeader[0]] ; Array für die Input-IDs
For $i = 1 To $aHeader[0]
GUICtrlCreateLabel($aHeader[$i], 4 + ($i - 1) * 125, 15, 110, 20) ; Überschriften-Label erstellen
GUICtrlSetFont(-1, 8, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
$aNew[$i - 1] = GUICtrlCreateInput("", 2 + ($i - 1) * 125, 30, 120, 20, Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
Next
Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 254, 65, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
#endregion Fenster für neuen Eintrag_GUICtrlListView_RegisterSortCallBack($hLVHandle) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hGui) ; Hauptfenster sichtbar machen
[/autoit] [autoit][/autoit] [autoit]If FileExists($sDBFile) Then Load() ; wenn Datenbank-Datei existiert, dann Datenbank laden
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
Case $hListView ; User hat auf eine Spaltenüberschrift geklickt
_GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) ; Einträge entsprechend sortierenCase $GUI_EVENT_PRIMARYUP ; == primäre Maustaste losgelassen
[/autoit] [autoit][/autoit] [autoit]
$aCursor = GUIGetCursorInfo()
If $aCursor[4] = $hSearchListView Then ; == ID des Listview in das geklickt wurde
$index = _GUICtrlListView_GetSelectedIndices($hSearchLVHandle)
If $index > -1 Then
; == den inhalt auslesen und weiterverarbeiten
$inhalt = _GUICtrlListView_GetItemText($hSearchLVHandle, $index, 0)
MsgBox(0, 'Test', $inhalt)
ShellExecute($inhalt)
EndIf
EndIfCase $hSearchStart
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($hSearchStart, $GUI_DISABLE)
_GUICtrlListView_DeleteAllItems($hSearchLVHandle)
Dim $sSearch = GUICtrlRead($hSearch), $sItem
For $i = 0 To _GUICtrlListView_GetItemCount($hLVHandle) - 1
$sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i)
If StringInStr($sItem, $sSearch) Then GUICtrlCreateListViewItem($sItem, $hSearchListView)
Next
GUICtrlSetState($hListView, $GUI_HIDE)
GUICtrlSetState($hSearchListView, $GUI_SHOW)
GUICtrlSetState($hSearchReset, $GUI_ENABLE)
Case $hSearchReset
GUICtrlSetData($hSearch, "")
GUICtrlSetState($hSearchListView, $GUI_HIDE)
GUICtrlSetState($hListView, $GUI_SHOW)
GUICtrlSetState($hSearchStart, $GUI_ENABLE)
GUICtrlSetState($hSearchReset, $GUI_DISABLE)
Case $hNew, $hCMNew ; User hat auf "Neuer Eintrag" geklickt
WinSetTitle($hGuiNew, "", "Neuer Eintrag") ; den Titel des Fenster anpassen
GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
Case $hEdit, $hCMEdit ; User hat auf "Eintrag bearbeiten" geklickt
WinSetTitle($hGuiNew, "", "Eintrag bearbeiten") ; den Titel des Fenster anpassen
GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
Edit()
Case $hLoad ; User hat auf "Laden" geklickt
Load()
Case $hSave ; User hat auf "Laden" geklickt
Save()
Case $hDel, $hCMDel ; User hat auf "Markierte Einträge löschen" geklickt
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVHandle)
Case $hDelAll ; User hat auf "Alle Einträge löschen" geklickt
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then _GUICtrlListView_DeleteAllItems($hLVHandle)
Case $hCreate ; User hat auf "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
NewItem()
Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
Case $hGui ; User will das Hauptfenster schließen
If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End() ; wenn ja, dann End-Funktion aufrufen
Case $hGuiNew ; User will das "Neuer Eintrag"-Fenster schließen
$iEdit = -1
For $i = 0 To UBound($aNew) - 1
GUICtrlSetData($aNew[$i], "") ; Alle Eingabefelder leeren
Next
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
WinActivate($hGui) ; und in den Vordergrund holen
EndSwitch
EndSwitch
WEndFunc End()
[/autoit] [autoit][/autoit] [autoit]
;~ Save() ; wenn der vordere Kommentar entfernt wird, dann werden vor dem beenden noch die Daten gespeichert
_GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
Exit ; Programm beenden
EndFunc ;==>EndFunc NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
[/autoit] [autoit][/autoit] [autoit]
Local $sItem = ""
For $i = 0 To UBound($aNew) - 1 ; Schleife, um alle Eingabefelder durchzugehen
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
Else ; sonst $iEdit = -1 (neuer Eintrag)
$sItem &= GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
EndIf
GUICtrlSetData($aNew[$i], "") ; das entsprechende Eingabefeld leeren
Next
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
$iEdit = -1
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
Sleep(300)
WinActivate($hGui) ; und in den Vordergrund holen
Else ; sonst $iEdit = -1 (neuer Eintrag)
GUICtrlSetState($aNew[0], $GUI_FOCUS) ; den Focus wieder auf das erste Eingabefeld setzen, für weitere Eingaben
GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $hListView) ; mit den Werten aus $sItem einen neuen Listview-Eintrag hinzufügen
EndIf
EndFunc ;==>NewItemFunc Edit() ; Funktion zum bearbeiten eines Listview-Eintrags im "Eintrag bearbeiten"-Fenster
[/autoit] [autoit][/autoit] [autoit]
$iEdit = _GUICtrlListView_GetSelectionMark($hLVHandle) ; auslesen, welcher Listview-Eintrag markiert (bei mehreren, den obersten) ist
If $iEdit > -1 Then
Local $aItem = _GUICtrlListView_GetItemTextArray($hLVHandle, $iEdit) ; die Einträge aus dem Listview in ein Array holen
For $i = 1 To $aItem[0]
GUICtrlSetData($aNew[$i - 1], $aItem[$i]) ; und in die entsprechenden Eingabefelder schreiben
Next
EndIf
EndFunc ;==>EditFunc Load() ; Datenbank-Datei laden
[/autoit] [autoit][/autoit] [autoit]
Local $hFile, $sContent, $aNewItems
$hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
$sContent = FileRead($hFile) ; Datei komplett einlesen
FileClose($hFile) ; Datei schließen
$sContent = StringTrimRight($sContent, 2) ; das letzte @CRLF entfernen
$aNewItems = StringSplit($sContent, @CRLF, 1) ; Den Dateiinhalt am Zeilenende splitten
If Not IsArray($aNewItems) Then Return ; Wenn $aNewItems kein Array ist, dann Funktion verlassen
_GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
For $i = 1 To $aNewItems[0] ; Alle Einträge des Arrays durchgehen
GUICtrlCreateListViewItem($aNewItems[$i], $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
Next
_GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
EndIf
EndFunc ;==>LoadFunc Save() ; Datenbank-Datei speichern
[/autoit]
Local $sItem, $hFile, $iCount
$iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
If $iCount = -1 Then Return FileDelete($sDBFile) ; Wenn das Listview keine Einträge enthält, dann Datei löschen und Funktion verlassen
$hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
$sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
Next
FileClose($hFile) ; Datei schließen
EndIf
EndFunc ;==>Save
Allerdings müssten die PDFs dann in dem gleichen Verzeichnis wie das Skript liegen. Ansonsten musst Du den Pfad mit abspeichern. -
Vielleicht hilft Dir ja diese Funktion:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>
$aAdapter = _CI_GetNetworkAdapter()
ConsoleWrite(@error & @CR)
_ArrayDisplay($aAdapter)Func _CI_GetNetworkAdapter($strComputer = '.')
[/autoit] [autoit][/autoit] [autoit]
Local $aReturn[1][12] = [[ _
'Hersteller:', 'Name:', 'Adapter-Typ:', 'Kennung:', _
'MAC-Adresse:', 'IP-Adresse:', 'IP-Subnetzmaske:', 'Adresstyp:', _
'DHCP-Server:', 'IP erhalten:', 'IP läuft ab:', 'Standardgateway:']]
Local $x = 0, $objWMIService, $colItems, $colItems2
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\root\cimv2')
If Not IsObj($objWMIService) Then Return SetError(1, 0, 0)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus > 0', 'WQL', 0x30)
If Not IsObj($colItems) Then Return SetError(2, 0, 0)
For $objItem In $colItems
$x += 1
ReDim $aReturn[$x + 1][12]
$aReturn[$x][0] = $objItem.Manufacturer
$aReturn[$x][1] = $objItem.Name
$aReturn[$x][2] = $objItem.AdapterType
$aReturn[$x][3] = $objItem.NetConnectionID
$aReturn[$x][4] = $objItem.MACAddress
$colItems2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration', 'WQL', 0x30)
If IsObj($colItems2) Then
For $objItem2 In $colItems2
If $objItem.Caption = $objItem2.Caption Then
If $objItem2.IPEnabled = -1 Then
$aReturn[$x][5] = $objItem2.IPAddress(0)
$aReturn[$x][6] = $objItem2.IPSubnet(0)
If $objItem2.DHCPEnabled = -1 Then
$aReturn[$x][7] = 'von DHCP zugewiesen'
$aReturn[$x][8] = $objItem2.DHCPServer
$aReturn[$x][9] = _WMIDateStringToDate($objItem2.DHCPLeaseObtained)
$aReturn[$x][10] = _WMIDateStringToDate($objItem2.DHCPLeaseExpires)
Else
$aReturn[$x][7] = 'Manuell konfiguriert'
EndIf
$aReturn[$x][11] = $objItem2.DefaultIPGateway(0)
EndIf
EndIf
Next
EndIf
Next
Return $aReturn
EndFunc ;==>_CI_GetNetworkAdapterFunc _WMIDateStringToDate($dtmDate)
[/autoit]
Return (StringMid($dtmDate, 5, 2) & '/' & _
StringMid($dtmDate, 7, 2) & '/' & StringLeft($dtmDate, 4) _
& ' ' & StringMid($dtmDate, 9, 2) & ':' & StringMid($dtmDate, 11, 2) & ':' & StringMid($dtmDate, 13, 2))
EndFunc ;==>_WMIDateStringToDate -
@GeneralKaboom: Das funktioniert auch nicht. Hab's bei mir getestet (2 Monitore).
Ich hatte mal eine Funktion geschrieben, die zumindest unter Vista/Win7 die entsprechende Werte liefert:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>
$aMonitor = _CI_GetMonitor()
_ArrayDisplay($aMonitor)Func _CI_GetMonitor()
[/autoit] [autoit][/autoit] [autoit]
Local $iCount = 0, $sHKLM, $sDeviceVideo, $iMaxObjectNumber, $sVideo, $sTmp, $sVideoID, $sUnitedVideo, $sMfg, $sDeviceDesc, $sDPMS, $sDriver, $x, $y, $xRes, $yRes, $sMaxRes
Local $sRecent
Local $aMonitor[$iCount + 1][6] = [['Hersteller:', 'Modell:', 'DPMS-Untersützung:', 'Position (x, y):', 'akt. Auflösung:', 'max. Auflösung:']]
$sHKLM = 'HKEY_LOCAL_MACHINE'
If @OSArch <> 'X86' Then $sHKLM &= '64'
Switch @OSVersion
Case 'WIN_VISTA', 'WIN_7'
$iCount = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\services\monitor\Enum', 'Count')
ReDim $aMonitor[$iCount + 1][6]
For $i = 1 To $iCount
$sDisplay = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\services\monitor\Enum', $i-1)
$sMfg = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\Enum\' & $sDisplay, 'Mfg')
$sMfg = StringRegExpReplace($sMfg, '.+;(.+)', '$1')
$aMonitor[$i][0] = $sMfg
$sDeviceDesc = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\Enum\' & $sDisplay, 'DeviceDesc')
$sDeviceDesc = StringRegExpReplace($sDeviceDesc, '.+;(.+)', '$1')
$aMonitor[$i][1] = $sDeviceDesc
$sDPMS = Number(String(RegRead($sHKLM & '\SYSTEM\CurrentControlSet\Enum\' & $sDisplay & '\Device Parameters', 'DPMS')))
$aMonitor[$i][2] = StringMid('NeinJa', $sDPMS * 4 + 1, 4)
$sDriver = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\Enum\' & $sDisplay, 'Driver')
$sMaxRes = String(RegRead($sHKLM & '\SYSTEM\CurrentControlSet\Control\Class\' & $sDriver, 'MaxResolution'))
$sMaxRes = StringReplace($sMaxRes, ',', ' x ')
$aMonitor[$i][5] = $sMaxRes
$sRecent = RegEnumKey($sHKLM & '\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Connectivity', 1)
$sRecent = RegRead($sHKLM & '\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Connectivity\' & $sRecent, 'Recent')
Local $sConfiguration = '', $j = 0
Do
$j += 1
$sConfiguration = RegEnumKey($sHKLM & '\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration', $j)
Until StringInStr($sConfiguration, $sRecent) = 1
$sConfiguration = $sHKLM & '\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\' & $sConfiguration
$x = Number(String(RegRead($sConfiguration & '\' & StringRight('0' & $i-1, 2), 'Position.cx')))
If $x > 2 ^ 31 Then $x = -BitXOR($x, 0xffffffff)$y = Number(String(RegRead($sConfiguration & '\' & StringRight('0' & $i-1, 2), 'Position.cy')))
[/autoit] [autoit][/autoit] [autoit]
If $y > 2 ^ 31 Then $y = -BitXOR($y, 0xffffffff)$xRes = Number(String(RegRead($sConfiguration & '\' & StringRight('0' & $i-1, 2), 'PrimSurfSize.cx')))
[/autoit] [autoit][/autoit] [autoit]
If $xRes > 2 ^ 31 Then $xRes = -BitXOR($xRes, 0xffffffff)$yRes = Number(String(RegRead($sConfiguration & '\' & StringRight('0' & $i-1, 2), 'PrimSurfSize.cy')))
[/autoit] [autoit][/autoit] [autoit]
If $yRes > 2 ^ 31 Then $yRes = -BitXOR($yRes, 0xffffffff)$aMonitor[$i][3] = $x & ', ' & $y
[/autoit] [autoit][/autoit] [autoit]
$aMonitor[$i][4] = $xRes & ' x ' & $yResNext
[/autoit]
Return SetError(0, 0, $aMonitor)
Case Else
; Unterstützung für XP funktioniert nicht
Return SetError(1, 0, 0)
EndSwitch
EndFunc ;==>_CI_GetMonitor
Allerdings gibt es diese Registrywerte bei den Windowsversionen vor Vista nicht, deshalb keine XP-Unterstützung.
Ich hatte ziemlich lange in der Registry gesucht, aber unter XP habe ich nichts vergleichbares gefunden. -
In der jeweiligen Variablen befindet sich nur die Control-ID.
Wenn Du einen Wert aus einem GUI-Control auslesen willst, musst Du das mit GUICTRLRead machen. -
Ich reihe mich da auch mal mit ein: Happy Birthday!
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Versuch's mal mit $GUI_FOCUS:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>$PicMoveStatus = 0
[/autoit] [autoit][/autoit] [autoit]
$GUI = GUICreate("", 289, 477, -1, -1, $WS_POPUP, $WS_EX_CONTROLPARENT)
GUISetBkColor(0x000000)
$Button1 = GUICtrlCreateButton("Undefined", 8, 456, 57, 17)
$Pic1 = GUICtrlCreatePic("288 x 476.jpg", 0, 0, 289, 477, BitOR($WS_GROUP, $WS_CLIPSIBLINGS))
$Pic2 = GUICtrlCreatePic("Unbenannt.jpg", -16, 477, 313, 33);444 oben,477 Unten
GUICtrlSetCursor(-1, 4)
$Graphic1 = GUICtrlCreateGraphic(0, 430, 289, 28)
GUICtrlSetCursor(-1, 4)
;~ $Label1 = GUICtrlCreateLabel("Label1", 56, 88, 36, 17,-1,$GUI_WS_EX_PARENTDRAG)
;~ GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$mMsg = GUIGetMsg()
Switch $mMsgCase $Button1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ExitEndSwitch
[/autoit] [autoit][/autoit] [autoit]_TET()
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _TET()
[/autoit] [autoit][/autoit] [autoit]
$maus = MouseGetCursor()
If $maus = 4 Then
$PicMoveStatus = 1
GUICtrlSetPos($Pic2, -16, 444);OBEN
GUICtrlSetState($Button1, $GUI_FOCUS)Else
[/autoit] [autoit][/autoit] [autoit]
$PicMoveStatus = 0
GUICtrlSetPos($Pic2, -16, 477);UNTEN
GUICtrlSetState($Button1, $GUI_FOCUS)EndIf
[/autoit]
EndFunc ;==>_TET -
Oder so:
[autoit]
[/autoit]
$text = "ABCDABCDABCDABCDABCD"
$out = StringRegExpReplace($text, '(.{4})', '$1|')
MsgBox(0, 0, $out) -
Mit der Timer-UDF kannst Du das so lösen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <Timers.au3>
Dim $datum = @MDAY & "." & @MON & "." & @YEAR & @CR & @HOUR & ":" & @MIN & ":" & @SEC
$hGUI = GUICreate("Dummy")
_Timer_SetTimer($hGUI, 250, "_UpdateClock")
MsgBox(0, "Heute ist der ", $datum)
_Timer_KillAllTimers($hGUI)
ExitFunc _UpdateClock($hWnd, $Msg, $iIDTimer, $dwTime)
[/autoit]
Local $datum = @MDAY & "." & @MON & "." & @YEAR & @CR & @HOUR & ":" & @MIN & ":" & @SEC
ControlSetText("Heute ist der ", "", "[CLASS:Static; INSTANCE:1]", $datum, 1)
EndFunc ;==>MyAdlib -
Alternativ kannst Du auch erst Deine Schleifen zum speichern ausführen und anschließend _GUICtrlListView_DeleteItemsSelected aufrufen. Dort wird das schon richtig gemacht.

-
Du darfst nicht mit
[autoit]If $socket Then
[/autoit]
prüfen, denn wie bereits in der Hilfe steht:ZitatFailure: Returns -1 or 0 and set @error.
Du erhälst vermutlich "-1" zurück und das wertet AutoIt als TRUE.James1337 hat Dir bereits gezeigt, wie man es richtig macht.
-
Du musst auch TCPConnect benutzen, nicht TCPListen.
Edit: zu spät.

-
Was willst Du denn erreichen? Beschreib doch mal genauer die Aufgabenstellung.
-
Ich habe die Konfigurationsmöglichkeit in meinem FileCommander eingebaut und wenn ich dort ein Laufwerk verstecke, dann wirkt sich das auch sofort auf den Explorer aus (ohne Explorer-/Neustart).
Unter Windows7 braucht man zum ändern allerdings Adminrechte. -
Es gibt in der Registry einen Eintrag, mit dem man Laufwerke verstecken kann.
Key: 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer'
Value: 'NoDrives'
Im obigen RegKey/Value sind die Laufwerksbuchstaben verzeichnet, die im Explorer ausgeblendet werden.
Dabei steht Bit0 für Laufwerk "a:", Bit1 für "b:" usw.
Ist das jeweilige Bit gesetzt, wird es ausgeblendet. -
-
Und warum löschst Du alles aus Deinem Startpost?
So ist dieser ganze Thread total überflüssig geworden.