Also "will des nich" ist ja nunmal eine wirklich exakte Fehlerbeschreibung ![]()
Beiträge von BugFix
-
-
Jo, in dem Link ist meine Session-ID

Also schreib in die SuFu: "update" und ferddisch
-
Banale Frage: Wenn du nicht mal weißt, was ein Control ist, warum schaust du nicht einfach in die Hilfe ?
[OT]
Auch wenn es nicht alle betrifft, aber ich habe immer mehr den Eindruck, dass in der jungen Generation der Hang zum Nichts-selber-machen größer ist, als das Streben nach eigenen Erkenntnissen.
Immer schön bei Mutti wohnen und man ja keinen Finger krumm machen. Aber gebratene Tauben möchten doch bitte schön in ausreichender Zahl in den Mund fliegen!
Echt, da kommt mir glatt die Galle hoch.
[/OT] -
-
Na klar
[autoit]
; Generated by AutoIt Scriptomatic
[/autoit][autoit][/autoit][autoit]$wbemFlagReturnImmediately = 0x10
[/autoit][autoit][/autoit][autoit]
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$ACC_2_Search = 'Accountname'$Output=""
[/autoit][autoit][/autoit][autoit]
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)If IsObj($colItems) then
[/autoit]
For $objItem In $colItems
If $objItem.Name = $ACC_2_Search Then
MsgBox(0, 'Gefunden', $ACC_2_Search & ' auf PC vorhanden.')
ExitLoop
EndIf
Next
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
EndifEdit: Du kannst auch im Netzwerk abfragen, für $strComputer = "localhost" dann die IP übergeben.
-
User Accounts
[autoit]; Generated by AutoIt Scriptomatic
[/autoit] [autoit][/autoit] [autoit]$wbemFlagReturnImmediately = 0x10
[/autoit] [autoit][/autoit] [autoit]
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"$Output=""
[/autoit] [autoit][/autoit] [autoit]
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)If IsObj($colItems) then
[/autoit] [autoit][/autoit] [autoit]
For $objItem In $colItems
$Output = $Output & "AccountType: " & $objItem.AccountType & @CRLF
$Output = $Output & "Caption: " & $objItem.Caption & @CRLF
$Output = $Output & "Description: " & $objItem.Description & @CRLF
$Output = $Output & "Disabled: " & $objItem.Disabled & @CRLF
$Output = $Output & "Domain: " & $objItem.Domain & @CRLF
$Output = $Output & "FullName: " & $objItem.FullName & @CRLF
$Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
$Output = $Output & "LocalAccount: " & $objItem.LocalAccount & @CRLF
$Output = $Output & "Lockout: " & $objItem.Lockout & @CRLF
$Output = $Output & "Name: " & $objItem.Name & @CRLF
$Output = $Output & "PasswordChangeable: " & $objItem.PasswordChangeable & @CRLF
$Output = $Output & "PasswordExpires: " & $objItem.PasswordExpires & @CRLF
$Output = $Output & "PasswordRequired: " & $objItem.PasswordRequired & @CRLF
$Output = $Output & "SID: " & $objItem.SID & @CRLF
$Output = $Output & "SIDType: " & $objItem.SIDType & @CRLF
$Output = $Output & "Status: " & $objItem.Status & @CRLF
if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
$Output=""
Next
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
EndifFunc 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 -
Ich befürchte, ich werde wirklich alt
.
Da hatte ich doch mein eigenes Testskript falsch bestückt und kam dadurch zu der Annahme, dass rekursiv standarmäßig nicht geht, stattdessen aber ein Level tief.
Tatsächlich ist es genau umgekehrt
Mit Angabe des ItemHandle werden alle Subs Aus-/Eingeklappt ( _GUICtrlTreeView_Expand($hTreeView, $hItem) ). Also genau das, was ich mit obiger Funktion mühevoll nachgebaut habe :D.Nun gut, da ein Level Ausklappen (per Maus: Klick auf '+') per Funktion nicht geht (oder soll ich vorsichtshalber sagen, dass meine altersschwachen Augen es bis jetzt vielleicht übersehen haben ?
), reiche ich somit diese Funktion nach.
Hierbei geht es nur um das Ausklappen, da mit der Standard Expand-Funktion eingeklappt werden kann:_GUICtrlTreeView_ExpandOneLevel()
[autoit];==================================================================================================
[/autoit]
; Function Name: _GUICtrlTreeView_ExpandOneLevel($hTreeView [, $hParentItem=0])
; Description:: Ausklappen nur EINER Ebene eines Items, analog zum Mausklick auf '+'
; Parameter(s): $hTreeView Handle des TreeView
; $hParentItem Handle des Auszuklappenden Parent-Items
; Standard 0 ==> Handle des ersten Item im TreeView
; Return: Erfolg nichts
; Fehler @error 1 - TreeView enthält kein Item
; @error 2 - Item hat keine Child-Item
; Note: Die Funktion sollte zwischen _GUICtrlTreeView_BeginUpdate() und _GUICtrlTreeView_EndUpdate()
; ausgeführt werden um ein Flackern zu verhindern
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GUICtrlTreeView_ExpandOneLevel($hTreeView, $hParentItem=0)
If $hParentItem < 1 Then
Local $hCurrentItem = _GUICtrlTreeView_GetFirstItem($hTreeView)
Else
Local $hCurrentItem = $hParentItem
EndIf
If $hCurrentItem = 0 Then Return SetError(1)
Local $hChild
Local $countChild = _GUICtrlTreeView_GetChildCount($hTreeView, $hCurrentItem)
If $countChild = 0 Then Return SetError(2)
_GUICtrlTreeView_Expand($hTreeView, $hCurrentItem)
For $i = 1 To $countChild
If $i = 1 Then
$hChild = _GUICtrlTreeView_GetFirstChild($hTreeView, $hCurrentItem)
Else
$hChild = _GUICtrlTreeView_GetNextSibling($hTreeView, $hChild)
EndIf
If _GUICtrlTreeView_GetChildren($hTreeView, $hChild) Then _GUICtrlTreeView_Expand($hTreeView, $hChild, False)
Next
EndFunc ;==>_GUICtrlTreeView_ExpandOneLevel -
Auch von mir ein Herzliches Willkommen und Happy Skripting.

-
Erstelle eine Funktion zum Befüllen der ListBox.
Diese rufst du zum ersten mal nach Erstellen der GUI auf (also wenn die ListBox existiert).
In der Funktion:
- alle Einträge der ListBox löschen ( _GUICtrlListBox_ResetContent($hWnd) )
- INI-Einträge auslesen und mit _GUICtrlListBox_AddString($hWnd, $sText) in die ListBox schreibenDiese Funktion rufst du dann immer auf, wenn sich Einträge verändern.
Wichtig:
Du benötigst das Handle der ListBox. Also entweder gleich mit _GUICtrlListBox_Create() erzeugen (gibt das Handle zurück), oder:
$IDList = GUICtrlCreateList()
$hList = GUICtrlGetHandle($IDList) -
-
Hi,
standardmäßig kann ich entweder alle Item eines Treeview inkl. aller Sub-Item oder nur eine Ebene tiefer zum aktuellen Item Aus-/Einklappen.Die folgende Funktion ermöglicht es, rekursiv alle Child-Item eines Parents Aus- bzw. Einzuklappen.
Im Bsp. kann per Kontextmenü der markierte Zweig des Treeview Aus- und Eingeklappt werden.
Die Warnung beim Skriptstart ignorieren, betrifft eine Variable, die innerhalb der Funktion erstellt wird._GUICtrlTreeView_ExpandItemRekursiv()
[autoit]#include<GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include<GuiImageList.au3>
#include<GuiTreeView.au3>
#include<TreeViewConstants.au3>
#include<WindowsConstants.au3>_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]
Local $hItem, $hImage, $iImage, $hTreeView
Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
$gui = GUICreate("TreeView Expand One Sub-Level", 400, 300)
$hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
$ContextMenu = GUICtrlCreateContextMenu($hTreeView)
$mnuExpand = GUICtrlCreateMenuItem('Zweig kpl. Ausklappen', $ContextMenu)
$mnuCollapse = GUICtrlCreateMenuItem('Zweig kpl. Einklappen', $ContextMenu)
GUISetState()$hImage = _GUIImageList_Create(16, 16, 5, 3)
[/autoit] [autoit][/autoit] [autoit]
_GUIImageList_AddIcon($hImage, "shell32.dll", 110)
_GUIImageList_AddIcon($hImage, "shell32.dll", 131)
_GUIImageList_AddIcon($hImage, "shell32.dll", 165)
_GUIImageList_AddIcon($hImage, "shell32.dll", 168)
_GUIImageList_AddIcon($hImage, "shell32.dll", 137)
_GUIImageList_AddIcon($hImage, "shell32.dll", 146)
_GUICtrlTreeView_SetNormalImageList($hTreeView, $hImage)_GUICtrlTreeView_BeginUpdate($hTreeView)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
For $x = 1 To Random(3, 4, 1)
$iImage = Random(0, 5, 1)
$hItem = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] New Item", $x), $iImage, $iImage)
For $y = 1 To Random(3, 4, 1)
$iImage = Random(0, 5, 1)
$hChild = _GUICtrlTreeView_AddChild($hTreeView, $hItem, StringFormat("[%02d] New Child", $y), $iImage, $iImage)
For $z = 1 To Random(3, 4, 1)
$iImage = Random(0, 5, 1)
_GUICtrlTreeView_AddChild($hTreeView, $hChild, StringFormat("[%02d] New Child", $y), $iImage, $iImage)
Next
Next
Next
_GUICtrlTreeView_EndUpdate($hTreeView)
Do
$msg = GUIGetMsg()
Switch $msg
Case $mnuExpand
_GUICtrlTreeView_ExpandItemRekursiv($hTreeView)
Case $mnuCollapse
_GUICtrlTreeView_ExpandItemRekursiv($hTreeView, -1, False)
EndSwitch
Until $msg = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main;==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _GUICtrlTreeView_ExpandItemRekursiv($hTreeView [, $hParentItem=-1 [, $bExpand=True]])
; Description:: Aus- oder Einklappen aller Child-Items eines Item und deren Child-Items
; Parameter(s): $hTreeView Handle des TreeView
; $hParentItem Handle des Aus/Einzuklappenden Parent-Items
; Standard -1 ==> Handle des markierten Item
; $bExpand Ausklappen (Standard) = True, Einklappen = False
; Return: Erfolg nichts
; Fehler @error 1 - ItemHandle nicht übergeben und kein Item markiert
; Requirement(s): GetAllParents()
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GUICtrlTreeView_ExpandItemRekursiv($hTreeView, $hParentItem=-1, $bExpand=True)
If $hParentItem < 1 Then
Local $hCurrentItem = _GUICtrlTreeView_GetSelection($hTreeView)
Else
Local $hCurrentItem = $hParentItem
EndIf
If $hCurrentItem = 0 Then Return SetError(1)
Global $aParentItem[1] = [0]
GetAllParents($hTreeView, $hCurrentItem)
For $i = 0 To UBound($aParentItem) -1
If $bExpand Then
_GUICtrlTreeView_Expand($hTreeView, $aParentItem[$i])
Else
_GUICtrlTreeView_Expand($hTreeView, $aParentItem[$i], False)
EndIf
Next
ReDim $aParentItem[1]
$aParentItem[0] = 0
EndFunc ;==>_GUICtrlTreeView_ExpandItemRekursivFunc GetAllParents($hTreeView, $hItem)
[/autoit]
Local $hChild
Local $countChild = _GUICtrlTreeView_GetChildCount($hTreeView, $hItem)
If $countChild = 0 Then Return
If $aParentItem[UBound($aParentItem)-1] <> 0 Then ReDim $aParentItem[UBound($aParentItem)+1]
$aParentItem[UBound($aParentItem)-1] = $hItem
For $i = 1 To $countChild
If $i = 1 Then
$hChild = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem)
Else
$hChild = _GUICtrlTreeView_GetNextSibling($hTreeView, $hChild)
EndIf
If _GUICtrlTreeView_GetChildren($hTreeView, $hChild) Then GetAllParents($hTreeView, $hChild)
Next
EndFunc ;==>GetAllParentsEdit 09.06.08: Die Funktion klappt einwandfrei ... aber völlig überflüssig
, s. Post 3 -
Ja, es lohnt auf jeden Fall. AutoIt hat einen recht großen Funktionsumfang und ermöglicht die Realisierung vielfältiger Aufgaben.
Wenn du mit AutoIt umgehen kannst, wird es dir eine Hilfe für das spätere Verständnis anderer Programmiersprachen sein.
Empfehlen würde ich auch, von Anbeginn mit Opt('MustDeclareVars',1) zu arbeiten.
Das zwingt dich eine Übersicht über deine Variablen und deren Namespace zu haben. -
Ich habe es zwar gemacht aber ich habe dafür nie die Hilfe diese Forums in Anspruch genommen das war meine Idee und ich habe sie umgesetzt ich habe uíhn jetzt auch nur gepostet weil hier jemand etwas ähnliches vorhatte es heist ja nicht das er es so hätte übernehmen müssen
Welche Relevanz hat es, ob du für eine blöde Idee Hilfe in Anspruch genommen hast oder nicht?
Hoffentlich sind dir die Folgen bewußt, wenn dein Tun in der Schule auffliegt? Minimal ein Schulverweis, wahrscheinlicher noch dazu ein Hausverbot für den Computerraum (was deinen Schulabschluß zum Kippen bringen kann), nicht unmöglich ein Schulrausschmiß.
In Abwandlung eines alten Sprichwortes: Vor Beginn des Skriptens - Gehirn einschalten!P.S. sag mir doch mal ein paar tipps was du sonst mit autoit machen willst mir fällt nichts mehr ein...
Dir fällt nix ein??
Ich bin mir sicher, dass du kaum die Hälfte der in AutoIt enthaltenen Funktionsvielfalt kennst oder verstanden hast. (Überzeuge mich eines Besseren!)
Schau dir allein die UDF-Sammlung an. Nimm dir Kapitel für Kapitel vor und gestalte die Skripte aus der Hilfe nach (nicht nur die vorhandenen ausführen). Dabei wird dir von selbst bewußt werden, was man alles damit machen kann und somit entstehen auch neue Projektideen. -
Kann man das Programm so verändern, dass es im prinzip nur die eckpunkte von Linien erkennt und nur die Koordinaten dieser Punkte aufführt?
Dazu mußt du festlegen, welche Bedingungen für die "Begrenzungspixel" gelten und daraufhin alle Pixel, für die diese Bedingungen nicht zutreffen entfernen.
Ich würde in etwa so vorgehen:
- linke Begrenzung: für jedes Y der kleinste X-Wert
- rechte Begrenzung: für jedes Y der größte X-Wert
jetzt umsortieren X-aufsteigend und innerhalb von X die Y-Werte absteigend
- obere Begrenzung: für jedes X der kleinste Y-Wert
- untere Begrenzung: für jedes X der größte Y-Wert
Diese Variante erkennt nicht nur Eckpunkte, sondern alle Koordinaten des Umfangs (also auch Kreis oder Vieleck etc.). -
Und ich habe noch eine Frage an BugFix: in deinem Script erstellst du sql tabellen. Muss dafür ein sql server laufen? weil du hast keinen sql dienst über _sqllie_open geöffnet, weil das sortieren funktioniert nicht richtig. Ich würde gerne die y-Koordinaten absteigend ordnenund dann die dazugehörigen x werte.
Hi,
[autoit]
da man in Datenbanken wunderbar mehrstufig sortieren kann, war mir die Idee gekommen einfach ein 2D-Array über den Umweg einer SQL-Tabelle mehrstufig zu sortieren.
Und wenn du mal in Zeile 110 der Sortierfunktion schaust:_SQLite_Startup ()
[/autoit]
If @error > 0 Then Return SetError(3,0,1)
$hSQL = _SQLite_Open ()- wie du siehst wird hier die Datenbank temporär initialisiert. Ein SQL-Server wird nicht benötigt.
Um Y absteigend und für gleiche Y dann X aufsteigend zu sortieren wäre der Sortierstring: "1|1,0|0"
Somit würde die Reihenfolge der Koordinaten auf dem Desktop betrachtet von unten links nach oben rechts abgefahren.
Da die Reihenfolge mit der Sortierung bestimmt wird, ist es ohne Belang wie die Scanrichtung ist. -
Probier mal die Funktion, hatte sie für einen anderen Zweck geschrieben, aber ich denke es könnte hier passen.
Spoiler anzeigen
[autoit]#include <SQLite.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <SQLite.dll.au3>Dim $DateiOut = @ScriptDir & "\Scanergebnis.txt"
[/autoit] [autoit][/autoit] [autoit]
Dim $Farbe = 0x000000
Dim $Schrittweite = 1_pix_scan($Farbe, $Schrittweite, $DateiOut)
[/autoit] [autoit][/autoit] [autoit];------------------------------------------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]
; Funktion _pix_scan($color, $step, $file)
;
; Beschreibung scannt Display nach gesuchter Farbe, Ausgabe in Datei
; Pixelbereiche 2-stufig sortiert
;
; Parameter $color: zu suchende Farbe
; $step: Rastergröße
; $file: Ausgabedatei
;
; Return Datei mit den gefundenen Pixelpositionen
;
; Erfordernisse Funktion: _Array2DSortFree( )
; Nach dem Funktionsaufruf wird der Scan erst mit {F9} gestartet
; um z.B. vorab ein Spiel starten zu können
;
; Autor BugFix ([email='bugfix@autoit.de'][/email])
;------------------------------------------------------------------------------------------------------------
#include <File.au3>
#Include <Misc.au3>
Func _pix_scan($color, $step, $file)
Local $endX = @DesktopWidth, $endY = @DesktopHeight
Local $left = 0, $top = 0, $right = $step, $bottom = $step
Local $arPos, $arSort[1][1]
Do
Sleep(100)
Until _IsPressed("78") ; F9
$fh = FileOpen($file,1)
Do
For $left = 0 To $endX Step $step
$pos = PixelSearch($left, $top, $right, $bottom, $color, 0, $step)
If IsArray($pos) Then FileWriteLine($file, $pos[0] & "|" & $pos[1])
$right += $step
Next
$left = 0
$right = $step
$top += $step
$bottom += $step
Until $bottom > $endY
FileClose($fh)
Beep(500, 2000)
_FileReadToArray($file, $arPos)
FileDelete($file)
ReDim $arSort[UBound($arPos)][2]
For $i = 0 To UBound($arPos)-1
$var = StringSplit($arPos[$i], "|")
If ( IsArray($var) And UBound($var) = 3 ) Then
$arSort[$i][0] = Number($var[1])
$arSort[$i][1] = Number($var[2])
EndIf
Next
_Array2DSortFree($arSort, '0|0,1|0')
$fh = FileOpen($file,1)
For $i = 0 To UBound($arSort)-1
If $arSort[$i][0] <> "" And $arSort[$i][1] <> "" Then _
FileWriteLine($fh, "X: " & $arSort[$i][0] & " , Y: " & $arSort[$i][1])
Next
FileClose($fh)
EndFunc;==================================================================================================
[/autoit]
; Function Name: _Array2DSortFree($ARRAY, $sCOL_ASC)
; Description:: Sortierung von 1D/2D-Arrays nach freier Wahl
; 1D Sortierung Auf- oder Absteigend
; 2D mehrstufige Sortierung, Reihenfolge und Sortier-
; richtung (je Spalte) frei wählbar
; auch einzelne Spalte sortierbar
; Parameter(s): $ARRAY Das zu sortierende Array
; $sCOL_ASC String mit Sortierangaben "Spalte|Richtung [, Spalte|Richtung]"
; zu sortierende Spalte (0-Index)|Richtung (0-Asc, 1-Desc)
; z.B. Spalte 2 aufsteigend und in 2 absteigend Spalte 1
; _Array2DSortFree($ar2Sort, '2|0,1|1')
; Return Value(s): Erfolg 0
; Fehler 1 Set Error 1 $ARRAY ist kein Array
; 2 1D-Array, aber Spaltenangabe für 2D
; 3 SQL-Fehler
; 4 Angaben für Spalte|Sortierrichtung fehlerhaft
; Requirements: #include <SQLite.au3>
; #include <SQLite.dll.au3>
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _Array2DSortFree(ByRef $ARRAY, $sCOL_ASC)
If Not IsArray($ARRAY) Then Return SetError(1,0,1)
Local $tableStr = "CREATE TABLE tblTEST ("
Local $insertStr = '', $insertBase = "INSERT INTO tblTEST VALUES ("
Local $sortOrder = '', $sortStr = "SELECT * FROM tblTEST ORDER BY "
Local $aResult, $iRows, $iColumns, $iRval, $asc
$sCOL_ASC = StringStripWS($sCOL_ASC,
Local $ub2nd = UBound($ARRAY, 2)
If @error = 2 Then
If (StringLen($sCOL_ASC) > 3) Or (StringLeft($sCOL_ASC, 1) <> '0') Then Return SetError(2,0,1)
If StringRight($sCOL_ASC, 1) = 0 Then
_ArraySort($ARRAY)
Else
_ArraySort($ARRAY, 1)
EndIf
Return 0
Else
Local $aOut[UBound($ARRAY)][$ub2nd]
EndIf
_SQLite_Startup ()
If @error > 0 Then Return SetError(3,0,1)
$hSQL = _SQLite_Open ()
If @error > 0 Then
_SQLite_Shutdown ()
Return SetError(3,0,1)
EndIf
For $i = 0 To UBound($ARRAY, 2) -1
$tableStr &= "'field" & $i & "',"
Next
$tableStr = StringTrimRight($tableStr, 1) & ");"
For $i = 0 To UBound($ARRAY) -1 ; Erzeuge Insert-String
$insertStr &= $insertBase
For $k = 0 To UBound($ARRAY, 2) -1
$insertStr &= "'" & $ARRAY[$i][$k] & "',"
Next
$insertStr = StringTrimRight($insertStr, 1) & ");"
Next
; Erstelle Tabelle und füge Werte ein
If _SQLite_Exec ( $hSQL, $tableStr & $insertStr ) <> $SQLITE_OK Then
_SQLite_Shutdown ()
Return SetError(3,0,1)
EndIf
If StringInStr($sCOL_ASC, ',') Then
Local $aOrder = StringSplit($sCOL_ASC, ',')
For $i = 1 To UBound($aOrder) -1
If StringInStr($sCOL_ASC, '|') Then
Local $var = StringSplit($aOrder[$i], '|')
$asc = ' ASC'
If $var[2] = 1 Then $asc = ' DESC'
$sortOrder &= 'field' & $var[1] & $asc & ','
Else
_SQLite_Shutdown ()
Return SetError(4,0,1)
EndIf
Next
$sortOrder = StringTrimRight($sortOrder, 1) & ';'
Else
If (StringLen($sCOL_ASC) = 3) And (StringInStr($sCOL_ASC, '|')) Then
Local $var = StringSplit($sCOL_ASC, '|')
$asc = ' ASC'
If $var[2] = 1 Then $asc = ' DESC'
$sortOrder &= 'field' & $var[1] & $asc
Else
_SQLite_Shutdown ()
Return SetError(4,0,1)
EndIf
EndIf
$iRval = _SQLite_GetTable2d (-1, $sortStr & $sortOrder, $aResult, $iRows, $iColumns)
If $iRval = $SQLITE_OK Then
For $i = 1 To UBound($aResult) -1
For $k = 0 To UBound($aResult,2) -1
$aOut[$i-1][$k] = $aResult[$i][$k]
Next
Next
Else
_SQLite_Shutdown ()
Return SetError(4,0,1)
EndIf
_SQLite_Exec ($hSQL, "DROP TABLE tblTEST;")
_SQLite_Close ()
_SQLite_Shutdown ()
$ARRAY = $aOut
Return 0
EndFunc ;==> _Array2DSortFree -
Meinst du etwa, dass ein Hotkey kein Input ist?
Wenn Blockinput aktiv ist, wird natürlich auch nicht auf deine Tastenkombination reagiert.
-
Ich hatte da mal eine Funktion ohne netsh geschrieben. Vielleicht hilft es dir weiter:
Konfiguration Netzwerkadapter -
Zur Lösung verhilft dir das Windows Media Player Object Model.
Damit kannst du direkt auf den WMP zugreifen. Probiers mal selber.
Hier noch eine Seite mit Infos: WMP Object Model -
Hi,
ihr kennt alle aus jeder Anwendung, in der man Dateien öffnen muß, die Recent File List - die Auflistung der zuletzt genutzten Dateien in der Reihenfolge ihres Aufrufs bis zu einer maximalen Anzahl.
Ich habe das gerade in einem Projekt benötigt und es in eine Funktion gepackt. Vielleicht kann es ja jemand mal gebrauchen.
Wahlweise kann die letzte Datei an erster oder letzter Position stehen.
Da ich nicht unendlich viele Parameter übergeben wollte, sind die Angaben für die INI-Datei fix. Wenn man andere Sektions- und Schlüsselnamen verwenden möchte, läßt sich dies aber problemlos in der Funktion anpassen.Hier auch mal ein durchkommentiertes Bsp., wie man es verwenden könnte. Und falls wieder die Frage kommt, ob das (Bsp.) auch mit GUIGetMsg() geht: Im Prinzip ja, aber nur mit einem erheblichen Aufwand, da das Makro @GUI_CtrlID nur im OnEventMode zur Verfügung steht.
Spoiler anzeigen
[autoit]#cs MUSTER INI-Datei
[/autoit] [autoit][/autoit] [autoit]
[recent_num]
max=5
aktuell=0[recent_file]
[/autoit] [autoit][/autoit] [autoit]
#ce#include<GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include<Array.au3>
Opt("GUIOnEventMode",1)Global $INIPath = @ScriptDir & '\TEST_settings.INI', $path
[/autoit] [autoit][/autoit] [autoit]
Global $maxFiles = 5 ; Vorbelegung, wird überschrieben falls in INI anderer Wert
Global $currCountFiles = 0 ; Vorbelegung, wird überschrieben falls in INI anderer Wert
Global $aRecentFiles[1] ; zwingend als Array deklarieren, wird im Prog angepaßt
Global $aItemID[1][2] = [[-1,0]] ; führt ID's der MenüItems, Vorbelegung für ÜberprüfungIf Not FileExists($INIPath) Then ; Erstellung INI falls noch nicht vorhanden
[/autoit] [autoit][/autoit] [autoit]
IniWrite($INIPath, 'recent_num', 'maximum', 5)
IniWrite($INIPath, 'recent_num', 'aktuell', 0)
Else ; Auslesen aktuell gespeicherter Werte aus der INI
$maxFiles = IniRead($INIPath, 'recent_num', 'maximum', 5)
$currCountFiles = IniRead($INIPath, 'recent_num', 'aktuell', 0)
If $currCountFiles > 0 Then
$aRecentFiles = IniReadSection($INIPath, 'recent_file')
ReDim $aItemID[$aRecentFiles[0][0]][2] ; Array für MenüItems auf Anzahl gespeicherter Dateien anpassen
$aItemID[0][0] = 1 ; Vorbelegung -1 aufheben für Überprüfung
EndIf
EndIf$GUI = GUICreate('Recent Files')
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, '_ende')
$btn = GUICtrlCreateButton('Datei wählen', 100, 50, 120, 25)
GUICtrlSetOnEvent(-1, '_btnClick')
$mnu = GUICtrlCreateMenu('Datei')
$item_end = GUICtrlCreateMenuItem('Beenden',$mnu)
GUICtrlSetOnEvent(-1, '_ende')
GUICtrlCreateMenuItem('',$mnu)
GUISetState()If $aItemID[0][0] <> -1 Then ; wenn Einträge in INI, MenüItems erstellen
[/autoit] [autoit][/autoit] [autoit]
_Array2DDelete($aRecentFiles, 0) ; Zähler löschen für gleiche Größe beider Arrays
For $i = 0 To UBound($aRecentFiles) -1
$split = _StringSplitOnce($aRecentFiles[$i][1], '\', -1) ; gespeicherten Pfad splitten
$aItemID[$i][0] = GUICtrlCreateMenuItem($split[1], $mnu) ; Dateinamen als MenüItem erstellen
GUICtrlSetOnEvent(-1, '_itemClick')
$aItemID[$i][1] = $i ; Zuweisung Arrayposition zur Ctrl-ID
Next
EndIfWhile True
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _ende()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _btnClick()
[/autoit] [autoit][/autoit] [autoit]
Local $split
$path = FileOpenDialog('Bitte Datei auswählen', @ScriptDir, "Textdateien (*.txt;*.log;*.bat;*.ini)", 3)
If @error Then Return MsgBox(262192, 'Achtung', 'Keine Datei gewählt')
_RecentFiles($INIPath, $aRecentFiles, $path, $currCountFiles, $maxFiles, 0) ; aktuelle Datei an oberster Position speichern
If $aItemID[0][0] = -1 Then ; noch kein MenüItem vorhanden
$split = _StringSplitOnce($aRecentFiles[0][1], '\', -1) ; Dateinamen absplitten
$aItemID[0][0] = GUICtrlCreateMenuItem($split[1], $mnu) ; Item erstellen, ID speichern
GUICtrlSetOnEvent(-1, '_itemClick')
$aItemID[0][1] = 0 ; Arrayposition des kpl. Pfades zuweisen
Else ; bereits MenüItem vorhanden
For $i = 0 To UBound($aItemID) -1 ; alle bestehenden Items löschen
GUICtrlDelete($aItemID[$i][0])
Next
ReDim $aItemID[UBound($aRecentFiles)][2] ; Array für Item-ID auf neue Größe anpassen
For $i = 0 To UBound($aItemID) -1 ; und Items erstellen, ID's speichern, Pos. zuweisen
$split = _StringSplitOnce($aRecentFiles[$i][1], '\', -1)
$aItemID[$i][0] = GUICtrlCreateMenuItem($split[1], $mnu)
GUICtrlSetOnEvent(-1, '_itemClick')
$aItemID[$i][1] = $i
Next
EndIf
EndFuncFunc _itemClick()
[/autoit] [autoit][/autoit] [autoit]
Local $index = _ArraySearch($aItemID, @GUI_CtrlId, 0, 0, 0, 0, 1, 0) ; im ID-Array nach Position des geklickten Items suchen
MsgBox(0, 'Geklickter Pfad', $aRecentFiles[$index][1]) ; Eintrag aus File-Liste an dieser Position verwerten
EndFunc;==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _RecentFiles(ByRef $INI, ByRef $ARRAY, $FILE, ByRef $CURRCOUNT, ByRef $MAXCOUNT [, $ASC=1])
; Description:: Verwalten der zuletzt genutzten Dateien in einer INI
; wahlweise an Pos. 0 die älteste (Standard) oder neueste Datei
; Parameter(s): $INI Pfad der INI-Datei
; $ARRAY Das 2D-Array mit den Dateien, Rückgabe von INIReadSection
; Falls noch nicht existent, muß die übergebene Variable auf jeden Fall
; ein Array sein!
; $FILE aktuelle Datei/Pfad, zum Hinterlegen in der INI
; $CURRCOUNT aktuelle Anzahl hinterlegter Dateien/Pfade
; $MAXCOUNT maximal zulässige Anzahl zu hinterlegender Dateien/Pfade
; $ASC aktuelle Datei wird an erste Stelle (Pos 0 im Array) oder an
; letzte Stelle (Ubound-1 im Array)-Standard geschrieben
; Requirement(s): INI mit Sektionen
; [recent_num] und Schlüsseln "maximum, aktuell"
; (Variablen zum Einlesen der Werte und Übergeben an die Funktion)
; [recent_file] (Schlüsselwort ist für alle Einträge "file")
; Wenn die INI mit INIReadSection eingelesen wird, löscht die Funktion Zeile 0 (Zähler)
; UDF _Array2DDelete()
; #include <Array.au3>
; Return Value(s): Keine
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _RecentFiles(ByRef $INI, ByRef $ARRAY, $FILE, ByRef $CURRCOUNT, ByRef $MAXCOUNT, $ASC=1)
Local $index
If UBound($ARRAY, 2) Then
If IsNumber($ARRAY[0][0]) Then _Array2DDelete($ARRAY, 0)
EndIf
If $ASC = 1 Then
If UBound($ARRAY, 2) Then
$index = _ArraySearch($ARRAY, $FILE, 0, 0, 0, 0, 1, 1)
If $index = -1 Then
If $CURRCOUNT = $MAXCOUNT -1 Then
_Array2DDelete($ARRAY, 0)
Else
$CURRCOUNT += 1
IniWrite($INI, 'recent_num', 'aktuell', $CURRCOUNT)
EndIf
Else
_Array2DDelete($ARRAY, $index)
EndIf
ReDim $ARRAY[UBound($ARRAY)+1][2]
Else
ReDim $ARRAY[1][2]
EndIf
$ARRAY[UBound($ARRAY)-1][0] = 'file'
$ARRAY[UBound($ARRAY)-1][1] = $FILE
Else
If UBound($ARRAY, 2) Then
$index = _ArraySearch($ARRAY, $FILE, 0, 0, 0, 0, 1, 1)
If $index = -1 Then
If $CURRCOUNT < $MAXCOUNT -1 Then
$CURRCOUNT += 1
IniWrite($INI, 'recent_num', 'aktuell', $CURRCOUNT)
ReDim $ARRAY[UBound($ARRAY)+1][2]
EndIf
Else
_Array2DDelete($ARRAY, $index)
ReDim $ARRAY[UBound($ARRAY)+1][2]
EndIf
For $i = UBound($ARRAY)-1 To 1 Step -1
$ARRAY[$i][0] = 'file'
$ARRAY[$i][1] = $ARRAY[$i-1][1]
Next
$ARRAY[0][1] = $FILE
Else
ReDim $ARRAY[1][2]
$ARRAY[UBound($ARRAY)-1][0] = 'file'
$ARRAY[UBound($ARRAY)-1][1] = $FILE
EndIf
EndIf
IniWriteSection($INI, 'recent_file', $ARRAY, 0)
EndFunc ;==>_RecentFilesFunc _Array2DDelete(ByRef $ARRAY, $iDEL)
[/autoit] [autoit][/autoit] [autoit]
Local $i, $k, $l
If ( Not IsArray($ARRAY) ) Then
SetError(1)
Return 0
EndIf
If ( $iDEL < 0 ) Or ( $iDEL > UBound($ARRAY)-1 ) Then
SetError(2)
Return 0
EndIf
Local $UBound2nd = UBound($ARRAY,2)
If @error = 2 Then
Local $arTmp[UBound($ARRAY)-1]
$k = 0
For $i = 0 To UBound($ARRAY)-1
If $i <> $iDEL Then
$arTmp[$k] = $ARRAY[$i]
$k += 1
EndIf
Next
Else
Local $arTmp[UBound($ARRAY)-1][$UBound2nd]
$k = 0
For $i = 0 To UBound($ARRAY)-1
If $i <> $iDEL Then
For $l = 0 To $UBound2nd-1
$arTmp[$k][$l] = $ARRAY[$i][$l]
Next
$k += 1
EndIf
Next
EndIf
$ARRAY = $arTmp
Return -1
EndFunc ;==>_Array2DDeleteFunc _StringSplitOnce($STRING, $DELIM, $OCCURENCE=1)
[/autoit]
If $STRING = '' Then Return SetError(1)
If $DELIM = '' Then Return SetError(2)
Local $Out[2]
Local $len = StringLen($STRING)
Local $pos = StringInStr($STRING, $DELIM, 1, $OCCURENCE)
If @error Then Return SetError(3)
$Out[0] = StringLeft($STRING, $pos-1)
$Out[1] = StringRight($STRING, $len-$pos)
Return $Out
EndFunc ;==>_StringSplitOnce