Indem du die Hilfe zu MsgBox liest, speziell: Rückgabewerte ![]()
Beiträge von BugFix
-
-
Ähm, Session speichern ist in der "SciTEGlobal.properties" in der propertie: save.session=1 geregelt. Einfach statt "1" eine "0" setzen.
-
So wie ich das sehe, werden nicht die zuletzt geöffneten Dateien, sondern die in Tabs offenen Dateien angezeigt. Jedenfalls ist das bei mir (meist) so. Und manchmal ist die Liste plötzlich leer.
In den properties habe ich dazu bisher keinen passenden Parameter gefunden. -
Oder steht das etwa doch in der Scite-Hilfe und ich finde es nur nicht?
Genau so ist es.
Erklärung zum Eintrag
command.name.number.filepattern
im Abschnitt "SciTE Dokumentation"ZitatThe command number can be in the range of 0 to 49. Command numbers 0 to 9 are assigned Ctrl+Number shortcuts. Internally these commands use IDs starting from 1100 (IDM_TOOLS) which can be used in user.shortcuts and user.context.menu as:
user.context.menu=Indent|1100|
If command.name is empty then no item is added to the Tools menu. This can be used for commands that are only in the context menu or user shortcuts. -
Die Integration in das Kontextmenü funktioniert, wie folgt:
# 43 Color Chooser
command.name.43.*=Color Chooser
command.43.*="$(SciteDefaultHome)\ColorChooser\ColorChooser.exe" $(CurrentSelection)
command.shortcut.43.*=Ctrl+Alt+CIch finde es lesbarer auch in den properties die Menüeinträge untereinander zu schreiben:
user.context.menu=||\
Bookmark an/aus|IDM_BOOKMARK_TOGGLE|\
Alle Bookmarks löschen|IDM_BOOKMARK_CLEARALL|\
||\
Hier auf/zuklappen|IDM_EXPAND|\
>> Alles auf/zuklappen|IDM_TOGGLE_FOLDALL|\
||\
Go|303|\
Compile|301|\
Stop Executing|304|\
||\
User-Properties öffnen|IDM_OPENUSERPROPERTIES|\
Global-Poperties öffnen|IDM_OPENGLOBALPROPERTIES|\
Scite-Config bearbeiten|1114|\
||\
Color Chooser|1143|Es wird als Kontext-Befehlsnummer immer die "11" und Befehlsnummer aus der command-Anweisung zusammengesetzt, hier also "11" & "43" = 1143
-
Wie würdet Ihr das ganze angehen?
Gar nicht!Hast du unsere Forenregeln gelesen? Bitte dringend nachholen bzw. nochmals, aber gründlich lesen.
Das sieht mir so aus, als ob du da an einer fremden Datei rumwurschteln möchtest, in einer Art, die wir nicht tolerieren.Wenn nicht - überzeug mich von der Ehrhaftigkeit deines Anliegens.
-
Hat jemand eine Idee, wie ich mein Programm effektiv vor "Softwarepiraterie" schützen kann?
1. Gar nicht!
2. Wenn du was halbwegs sicher haben willst (z.B. weil du mit Software Geld verdienst) bist du mit AutoIt schlecht beraten.
3. Der m.M. nach beste Weg: GPL -
Hat einer von euch ne Idee warum das manchmal trotzdem nicht klappt?
Das gezeigte Skript bereitet sicher keine Probleme. Ursachen würde ich mal in dem (völlig unnötigen) vbs-Skript suchen.
Das Problem ist dass dieses Tool mittlerweile Firmenübergreifend eingesetzt wird und in den anderen Firmen gibt es Mitarbeiter die händisch gemappte Laufwerke haben.
Kann ich noch irgendwie anders zuverlässig testen ob das funktioniert hat?Das spielt doch keine Rolle, ob per Hand oder per Skript gemapt. Ein Netzlaufwerk ist immer mit dem entsprechenden Flag versehen und wird durch die Laufwerksabfrage auch als solches identifiziert.
Tja, das ist nicht gewünscht. Wir haben ein vbs Script das je nach Gruppenzugehörigkeit die Laufwerke mappt. Unud wenns dann in den nächsten 1000 Jahren mal eine Änderung geben sollte müsste man ja nur dieses vbs Script ändern.
Und wieso soll das Problem Gruppenzugehörigkeit nur mit vbs lösbar sein?
Meiner Meinung nach schafft ihr euch nur zusätzliche Fehlerquellen, beim Aufruf eines Skriptes durch ein anderes Skriptformat. Sauber alles in einem und der Drops ist gelutscht. -
Wenn es dir darum geht, jederzeit wieder den Sourcecode zur Verfügung zu haben, kannst du diesen doch beim Kompilieren in der EXE speichern ("Resource Update" - Checkbox "Save a copy of the Scriptsource in the output program resources.")
Dann brauchst du nicht dekompilieren und kannst jederzeit völlig legal deinen Sourcecode einsehen (natürlich auch jeder andere). -
Machmal Frage ich mich echt wie du auf die ganze Ideen kommst.

Ergibt sich meist aus ganz konkreten Projekten. In diesem Fall ist es ein Backupprogramm, das ich für meine Firma schreibe. Bei allen existierenden Lösungen ist meist irgendwas zuviel oder zu wenig - also doch selbst machen. Hier habe ich die Laufwerksauswahl als Treeview und da brauchte ich zwingend eine Radio-Funktionalität um dann nur die Ordner und Dateien dieses Laufwerks zur Auswahl zu stellen. -
Könntest du vielleicht ein Bsp. erstellen (mit einer beliebigen Webseite aber inkl. des Druckfehlers)?
Das ist jetzt für uns nicht reproduzierbar und somit wüßte ich nicht, wo ich ansetzen soll.
Übrigens: Verwende bitte die Code-Tags (Symbole über dem Edit-Feld im Quellcode-Fenster) zur besseren Code-Darstellung.Ich verwende die IE-Funktionen so gut, wie nie. Daher habe ich adhoc auch keine Idee dazu. Vielleicht bietet dir die Beschreibung des InternetExplorer Objektes selbst einen Ansatz.
-
Wieviel verschiedene Schlüsselwörter/Ersetzungen gibt es denn?
Man kann das sicher auch mit StringRegExpReplace erledigen. Das Pattern hängt dann natürlich von den möglichen Schlüsselwörtern und Ersetzungen ab. -
Hier ein paar zusätzliche Funktionen für Treeviews:
_GUICtrlTreeView_ExpandOneLevel
(Hatte ich bereits mal gepostet, jetzt nochmal überarbeitet)
- Ein/Ausklappen nur eines Levels unterhalb eines Item_GUICtrlTreeView_CheckBoxAsRadio
- Alle Checkboxen in einem Treeview werden wie Radio-Ctrl behandelt
- Es kann immer nur eine Checkbox aktiv sein. Wird eine andere Checkbox aktiviert, wird automatisch die zuletzt gecheckte deaktiviert.
- Zeitgleich für verschiedene Treeview im Skript einsetzbar_GUICtrlTreeView_CheckBoxAsRadioInLevel
- Checkboxen eines Levels in einem Treeview werden wie Radio-Ctrl behandelt
- Es kann immer nur eine Checkbox eines Item-Levels aktiv sein. Wird eine andere Checkbox aktiviert, wird automatisch die zuletzt gecheckte deaktiviert.
- Zeitgleich für verschiedene Treeview im Skript einsetzbar_GUICtrlTreeView_GetCheckedInSelectionLevel
- Ermittelt alle Item-Handle mit aktivierter Checkbox im Level des aktuell selektierten Item
- Optional kann zu den Item-Handle auch gleich der Text ermittelt werden.Die Funktionen zum Verwenden der Checkboxen als Radio müssen jeweils aufgerufen werden, wenn eine Aktion stattfindet, die eine Checkbox De/aktivieren könnte. Also bei Mausklick und Leertaste. Im Bsp. habe ich das auf den Mausklick beschränkt.
Vereinzelt kann es Auftreten, dass bei schnellem Klicken hintereinander das De/aktivieren fehlschlägt. Mal sehen, ob sich das noch zu 100 % ausschließen läßt.Noch etwas zu den Radiofunktionen:
Gerade umfangreiche Installationen oder Einstellungsoberflächen lassen sich damit wesentlich vereinfachen. Ein Treeview ist effektiver im Platzverbrauch als die Verwendung von Groups, Radios und Checkboxen auf einer GUI und bei vielen Elementen auch übersichtlicher.TreeViewEx.au3 (v0.1)
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2012-06-13 11:35:34 v 0.1
#EndRegion - TimeStamp
#include-once
#Include <GuiTreeView.au3>Global Const $__MAX_COUNT_TREEVIEWCTRL = 100
[/autoit] [autoit][/autoit] [autoit];===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GUICtrlTreeView_CheckBoxAsRadio
; Description......: Checkboxen in einem Treeview werden wie Radio-Ctrl behandelt
; .................: Es kann immer nur eine Checkbox aktiv sein. Wird eine andere Checkbox aktiviert,
; .................: wird automatisch die zuletzt gecheckte deaktiviert.
; .................: Zeitgleich für verschiedene Treeview im Skript einsetzbar
; Parameter(s).....: $_hWnd Das Handle des Treeviews
; .................: $_fFocus Wenn TRUE (Standard) wird Funktion nur ausgeführt bei Fokus auf dem Treeview
; Requirement(s)...: Treeview mit Style: $TVS_CHECKBOXES
; Return Value(s)..: Erfolg Handle des momentan selektierten Item (unabhängig ob gecheckt oder nicht)
; .................: Fehler 0 @error=1 Treeview hat nicht den Fokus
; Note.............: Die Funktion sollte sinnvollerweise immer initialisiert werden, wenn ein Event stattfindet,
; .................: das ein de/aktivieren der Checkboxen zur Folge haben könnte (Mausklick oder Leertaste)
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GUICtrlTreeView_CheckBoxAsRadio($_hWnd, $_fFocus=True)
If Not IsHWnd($_hWnd) Then $_hWnd = GUICtrlGetHandle($_hWnd)
If $_fFocus Then
Local $hCtrl = DllCall("user32.dll", "hwnd", "GetFocus")
If $hCtrl[0] <> $_hWnd Then Return SetError(1,0,0)
EndIf
Local Static $a_hWnd[$__MAX_COUNT_TREEVIEWCTRL][2] = [[0]] ; == [[hWnd,hLastCheck]]
Local $index_hWnd = 0, $hLastCheck = 0, $fFound = False
If $a_hWnd[0][0] = 0 Then ; == erstmaliger Aufruf der Funktion
$a_hWnd[0][0] = $_hWnd
Else ; == weitere Aufrufe
For $i = 0 To $__MAX_COUNT_TREEVIEWCTRL -1
If $a_hWnd[$i][0] = $_hWnd Then ; == für dieses Treeview erfolgte bereits ein Aufruf
$index_hWnd = $i
$hLastCheck = $a_hWnd[$i][1]
$fFound = True
ExitLoop
ElseIf $a_hWnd[$i][0] = '' Then
ExitLoop
EndIf
Next
If Not $fFound Then ; == für dieses Treeview erstmaliger Aufruf
$index_hWnd = $i
$a_hWnd[$index_hWnd][0] = $_hWnd
EndIf
EndIf
Local $aCheck = _GUICtrlTreeView_GetCheckedInSelectionLevel($_hWnd)
If $aCheck[0] = $hLastCheck Then ; == selektiertes Item war gecheckt
$a_hWnd[$index_hWnd][1] = 0
Else
_GUICtrlTreeView_SetChecked($_hWnd, $hLastCheck, False)
_GUICtrlTreeView_SetChecked($_hWnd, $aCheck[0], True)
$a_hWnd[$index_hWnd][1] = $aCheck[0]
EndIf
Return $aCheck[0]
EndFunc ;==>_GUICtrlTreeView_CheckBoxAsRadio;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GUICtrlTreeView_CheckBoxAsRadioInLevel
; Description......: Checkboxen eines Levels in einem Treeview werden wie Radio-Ctrl behandelt
; .................: Es kann immer nur eine Checkbox eines Item-Levels aktiv sein. Wird eine andere Checkbox aktiviert,
; .................: wird automatisch die zuletzt gecheckte deaktiviert.
; .................: Zeitgleich für verschiedene Treeview im Skript einsetzbar
; Parameter(s).....: $_hWnd Das Handle des Treeviews
; .................: $_hLevelOnly Erstes Handle des Levels, für dessen Siblings ausschließlich die Funktion wirksam wird
; .................: $_fFocus Wenn TRUE (Standard) wird Funktion nur ausgeführt bei Fokus auf dem Treeview
; Requirement(s)...: Treeview mit Style: $TVS_CHECKBOXES
; Return Value(s)..: Erfolg Handle des momentan selektierten Item (unabhängig ob gecheckt oder nicht)
; .................: Fehler 0 @error=1 Treeview hat nicht den Fokus
; Note.............: Die Funktion sollte sinnvollerweise immer initialisiert werden, wenn ein Event stattfindet,
; .................: das ein De/aktivieren der Checkboxen zur Folge haben könnte (Mausklick oder Leertaste)
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GUICtrlTreeView_CheckBoxAsRadioInLevel($_hWnd, $_hLevelOnly=-1, $_fFocus=True)
If Not IsHWnd($_hWnd) Then $_hWnd = GUICtrlGetHandle($_hWnd)
If $_fFocus Then
Local $hCtrl = DllCall("user32.dll", "hwnd", "GetFocus")
If $hCtrl[0] <> $_hWnd Then Return SetError(1,0,0)
EndIf
Local Static $a_hWnd[$__MAX_COUNT_TREEVIEWCTRL][3] = [[0]] ; == [[hWnd,hParent,hLastCheck]]
Local $index_hWnd = 0, $hLastCheck = -1, $fFound = False, $hSel, $hParent, $hFirst, $aLvlOnly[1]
$hSel = _GUICtrlTreeView_GetSelection($_hWnd)
$hParent = _GUICtrlTreeView_GetParentHandle($_hWnd, $hSel)
If Not $hParent Then
$hParent = 'root'
$hFirst = _GUICtrlTreeView_GetFirstItem($_hWnd)
Else
$hFirst = _GUICtrlTreeView_GetFirstChild($_hWnd, $hParent)
EndIf
If $_hLevelOnly <> -1 Then
If Not IsArray($_hLevelOnly) Then
$aLvlOnly[0] = $_hLevelOnly
Else
$aLvlOnly = $_hLevelOnly
EndIf
For $i = 0 To UBound($aLvlOnly) -1
If $aLvlOnly[$i] = $hFirst Then Return
Next
EndIf
If $a_hWnd[0][0] = 0 Then ; == erstmaliger Aufruf der Funktion
$a_hWnd[0][0] = $_hWnd ; == TV-Handle
$a_hWnd[0][1] = $hParent ; == Parent-Handle ('root' bei Root)
Else ; == weitere Aufrufe
For $i = 0 To $__MAX_COUNT_TREEVIEWCTRL -1
If ($a_hWnd[$i][0] = $_hWnd And $a_hWnd[$i][1] = $hParent) Then ; == für dieses Treeview erfolgte bereits ein Aufruf
$index_hWnd = $i
$hLastCheck = $a_hWnd[$i][2]
$fFound = True
ExitLoop
ElseIf $a_hWnd[$i][0] = '' Then
ExitLoop
EndIf
Next
If Not $fFound Then ; == für dieses Treeview erstmaliger Aufruf
$index_hWnd = $i
$a_hWnd[$index_hWnd][0] = $_hWnd
$a_hWnd[$index_hWnd][1] = $hParent
EndIf
EndIf
Local $aCheck = _GUICtrlTreeView_GetCheckedInSelectionLevel($_hWnd)
If $aCheck[0] = $hLastCheck Then ; == selektiertes Item war gecheckt
$a_hWnd[$index_hWnd][2] = 0
Else
_GUICtrlTreeView_SetChecked($_hWnd, $hLastCheck, False)
_GUICtrlTreeView_SetChecked($_hWnd, $aCheck[0], True)
$a_hWnd[$index_hWnd][2] = $aCheck[0]
EndIf
Return $aCheck[0]
EndFunc ;==>_GUICtrlTreeView_CheckBoxAsRadioInLevel;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name....: _GUICtrlTreeView_GetCheckedInSelectionLevel
; Description......: Ermittelt alle Item-Handle mit aktivierter Checkbox im Level des aktuell selektierten Item
; .................: Optional kann zu den Item-Handle auch gleich der Text ermittelt werden.
; Parameter(s).....: $_hWnd Das Handle des Treeviews
; ........optional.: $_fText FALSE (Standard) - nur Rückgabe der Handle; mit TRUE wird Array als 2D mit [[hWnd-Item, Text-Item]] zurückgegeben
; Requirement(s)...: Treeview mit Style: $TVS_CHECKBOXES
; Return Value(s)..: Array Pos[0] - Handle des aktuell selektierten Item (auch wenn Checkbox inaktiv!)
; .................: Pos[n..ff] - Handle aller Item mit aktiver Checkbox (also auch das aktuell selektierte nochmals, wenn gecheckt)
; .................: opt. 2D-Array mit Text des Item an [n][1]
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GUICtrlTreeView_GetCheckedInSelectionLevel($_hWnd, $_fText=False)
If Not IsHWnd($_hWnd) Then $_hWnd = GUICtrlGetHandle($_hWnd)
Local $hSel = _GUICtrlTreeView_GetSelection($_hWnd)
Local $aRet[1] = [$hSel], $hFirst, $hNext, $hParent
If $_fText Then
ReDim $aRet[1][2]
$aRet[0][0] = $hSel
$aRet[0][1] = _GUICtrlTreeView_GetText($_hWnd, $hSel)
EndIf
; == erstes Item dieses Levels suchen
$hParent = _GUICtrlTreeView_GetParentHandle($_hWnd, $hSel)
If $hParent Then
$hFirst = _GUICtrlTreeView_GetFirstChild($_hWnd, $hParent)
Else
$hFirst = _GUICtrlTreeView_GetFirstItem($_hWnd)
EndIf
; == erstes Item auf gecheckt prüfen
If _GUICtrlTreeView_GetChecked($_hWnd, $hFirst) Then
If $_fText Then
ReDim $aRet[UBound($aRet)+1][2]
$aRet[UBound($aRet)-1][0] = $hFirst
$aRet[UBound($aRet)-1][1] = _GUICtrlTreeView_GetText($_hWnd, $hFirst)
Else
ReDim $aRet[UBound($aRet)+1]
$aRet[UBound($aRet)-1] = $hFirst
EndIf
EndIf
; == restliche Item des Levels auf gecheckt prüfen
$hNext = $hFirst
While True
$hNext = _GUICtrlTreeView_GetNextSibling($_hWnd, $hNext)
If Not $hNext Then ExitLoop
If _GUICtrlTreeView_GetChecked($_hWnd, $hNext) Then
If $_fText Then
ReDim $aRet[UBound($aRet)+1][2]
$aRet[UBound($aRet)-1][0] = $hNext
$aRet[UBound($aRet)-1][1] = _GUICtrlTreeView_GetText($_hWnd, $hNext)
Else
ReDim $aRet[UBound($aRet)+1]
$aRet[UBound($aRet)-1] = $hNext
EndIf
EndIf
WEnd
Return $aRet
EndFunc ;==>_GUICtrlTreeView_GetCheckedInSelectionLevel;==================================================================================================
[/autoit] [autoit][/autoit] [autoit][/autoit]
; Function Name: _GUICtrlTreeView_ExpandOneLevel
; Description..: Aus/Einklappen nur EINER Ebene eines Items, analog zum Mausklick auf '+/-'
; Parameter(s).: $_hWnd Handle des TreeView
; .............: $_hParent Handle des Item, dessen Childs aus/einzuklappen sind
; .............: Standard 0 ==> Handle des ersten Item im TreeView
; .............: $_fExpand Standard TRUE ==> Ausklappen, Einklappen mit FALSE
; Return.......: Erfolg Handle des Item, dessen Childs aus/eingeklappt wurden
; .............: Fehler 0 @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($_hWnd, $_hParent=0, $_fExpand=True)
If Not IsHWnd($_hWnd) Then $_hWnd = GUICtrlGetHandle($_hWnd)
If $_hParent = 0 Then $_hParent = _GUICtrlTreeView_GetFirstItem($_hWnd)
If $_hParent = 0 Then Return SetError(1,0,0)
Local $hChild, $countChild = _GUICtrlTreeView_GetChildCount($_hWnd, $_hParent)
If $countChild = 0 Then Return SetError(2,0,0)
_GUICtrlTreeView_Expand($_hWnd, $_hParent, $_fExpand)
If Not $_fExpand Then Return $_hParent
For $i = 1 To $countChild
If $i = 1 Then
$hChild = _GUICtrlTreeView_GetFirstChild($_hWnd, $_hParent)
Else
$hChild = _GUICtrlTreeView_GetNextSibling($_hWnd, $hChild)
EndIf
If _GUICtrlTreeView_GetChildren($_hWnd, $hChild) Then _GUICtrlTreeView_Expand($_hWnd, $hChild, False)
Next
Return $_hParent
EndFunc ;==>_GUICtrlTreeView_ExpandOneLevelBeispiel
[autoit]#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2012-06-13 11:54:52
#EndRegion - TimeStamp
#include <Array.au3>
#Include <GUIConstantsEx.au3>
#Include <WindowsConstants.au3>
#include 'TreeViewEx.au3'
Opt('MustDeclareVars', 1)_Main_1()
[/autoit] [autoit][/autoit] [autoit]
_Main_2()
ExitFunc _Main_1()
[/autoit] [autoit][/autoit] [autoit]
Local $aChecked, $aNormalCheck[2], $hGui, $nTV1, $nTV2, $nTV3, $hItem$hGui = GUICreate('Treeview - Alle Checkbox als Radio', 885, 430)
[/autoit] [autoit][/autoit] [autoit]
$nTV1 = GUICtrlCreateTreeView(15, 15, 275, 370, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel('In Root und Childs von SubItem_1_2 normal, andere SubLevel als Radio', 15, 395, 275, 24)
$nTV2 = GUICtrlCreateTreeView(305, 15, 275, 370, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel('Checkboxen im Root und SubLeveln als Radio, je Level nur eine Checkbox aktivierbar', 305, 395, 275, 24)
$nTV3 = GUICtrlCreateTreeView(595, 15, 275, 370, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel('Checkboxen im ges. Treeview als eine Radio-Group, nur eine einzige Checkbox aktivierbar', 595, 395, 275, 24)_AddItem($nTV1, 3, 1)
[/autoit] [autoit][/autoit] [autoit]
_AddItem($nTV2)
_AddItem($nTV3)$hItem = _GUICtrlTreeView_ExpandOneLevel($nTV1) ; == erstes Root-Item ein Level ausklappen
[/autoit] [autoit][/autoit] [autoit]
; == 2.tes Child von erstem Root-Item und dessen 1.tes Child ein Level ausklappen
_GUICtrlTreeView_Expand($nTV1, _GUICtrlTreeView_GetItemByIndex($nTV1, _GUICtrlTreeView_ExpandOneLevel($nTV1, _GUICtrlTreeView_GetItemByIndex($nTV1, $hItem, 1)), 0))
For $i = 1 To 2 ; == restliche Root-Item ein Level ausklappen
$hItem = _GUICtrlTreeView_GetNextSibling($nTV1, $hItem)
_GUICtrlTreeView_ExpandOneLevel($nTV1, $hItem)
Next; == alle Item der anderen Treeview ausklappen
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlTreeView_Expand($nTV2)
_GUICtrlTreeView_Expand($nTV3)GUISetState()
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case -3
ExitLoop
Case $GUI_EVENT_PRIMARYUP
$aNormalCheck[0] = _GUICtrlTreeView_GetFirstItem($nTV1) ; == Root
$aNormalCheck[1] = _GUICtrlTreeView_GetItemByIndex($nTV1, _GUICtrlTreeView_GetItemByIndex($nTV1, $aNormalCheck[0], 1), 0) ; == unterhalb SubItem_1_2
_GUICtrlTreeView_CheckBoxAsRadioInLevel($nTV1, $aNormalCheck) ; == Root u. Childs von SubItem_1_2 Mehrfachauswahl, andere Sublevel als Radio
_GUICtrlTreeView_CheckBoxAsRadioInLevel($nTV2) ; == alle Siblings eines Parent im selben Level als Radio-Gruppe
_GUICtrlTreeView_CheckBoxAsRadio($nTV3) ; == alle Item als eine Radio-Gruppe
EndSwitch
WEndGUIDelete($hGui)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndFuncFunc _Main_2()
[/autoit] [autoit][/autoit] [autoit]
Local $aChecked, $hGui, $nTV1, $bt_GetChecked$hGui = GUICreate('Checkbox im Selektions-Level', 310, 470)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateLabel('Item mit aktiv. Checkbox im Selektions-Level ermitteln', 15, 15, 275)
$nTV1 = GUICtrlCreateTreeView(15, 35, 275, 370, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
$bt_GetChecked = GUICtrlCreateButton('Get Checked Item', 15, 415, 100, 22)
GUICtrlCreateLabel('An Pos[0] im Rückgabe-Array ist das selektierte Item', 15, 445, 275)_AddItem($nTV1, 5, 0, True)
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlTreeView_Expand($nTV1)GUISetState()
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case -3
ExitLoop
Case $bt_GetChecked
$aChecked = _GUICtrlTreeView_GetCheckedInSelectionLevel($nTV1, True)
_ArrayDisplay($aChecked)
EndSwitch
WEndGUIDelete($hGui)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndFuncFunc _AddItem($_hWnd, $_iLvl=5, $_fSub=0, $_fCheck=False)
[/autoit]
If Not IsHWnd($_hWnd) Then $_hWnd = GUICtrlGetHandle($_hWnd)
Local $hItem, $hSubItem, $hTmp, $hTmpSub
For $i = 1 To $_iLvl
$hItem = _GUICtrlTreeView_Add($_hWnd, $_hWnd, 'Item_' & $i)
If $_fCheck Then _GUICtrlTreeView_SetChecked($_hWnd, $hItem, Random(0,1,1))
For $j = 1 To 3
$hSubItem = _GUICtrlTreeView_AddChild($_hWnd, $hItem, 'SubItem_' & $i & '_' & $j)
If $_fCheck Then _GUICtrlTreeView_SetChecked($_hWnd, $hSubItem, Random(0,1,1))
If $_fSub Then
For $n = 1 To 3
$hTmp = _GUICtrlTreeView_AddChild($_hWnd, $hSubItem, 'SubItem_' & $i & '_' & $j & '_' & $n)
If $_fCheck Then _GUICtrlTreeView_SetChecked($_hWnd, $hTmp, Random(0,1,1))
For $m = 1 To 2
$hTmpSub = _GUICtrlTreeView_AddChild($_hWnd, $hTmp, 'SubItem_' & $i & '_' & $j & '_' & $n & '_' & $m)
If $_fCheck Then _GUICtrlTreeView_SetChecked($_hWnd, $hTmpSub, Random(0,1,1))
Next
Next
EndIf
Next
Next
EndFunc -
Wenn du eine rekursive Auflistung möchtest, ist _FileListToArray die völlig falsche Funktion.
Hier im Forum findest du etliche Lösungen zur rekursiven Auflistung. Verwende mal die Suche (oder schau in meine Signatur). -
Die erweiterte Funktion von bernd670 funktioniert echt super. Problem ist nur, dass die Funktion mir nur noch die Dateiname zurückgibt. Schön wäre es, wenn die Funktion den kompletten Pfad zurückgeben kann.
Das ist ja der Sinn der Funktion. Den Pfad hast du doch bereits übergeben - brauchst ihn also nur mit den Dateinamen verknüpfen. -
Tweaky
Ich denke das spielt keine Rolle, da die UDF (wie etliche andere auch) sowieso einige Bugs hat an deren Behebung niemand Interesse zeigt (auf BugReports reagiert man ja eh nicht).
Mag sein, dass ausgerechnet diese Funktion nur mit ID funktioniert, für den Rest brauchst du aber das Handle, also lass es, wie es ist würde ich sagen. -
Bei Win7:
[autoit]$classWnd = '[CLASS:Shell_TrayWnd]'
[/autoit]
$classTaskBar = '[CLASS:MSTaskListWClass; INSTANCE:1]'
$aPos = ControlGetPos($classWnd, '', $classTaskBar)
If IsArray($aPos) Then _ArrayDisplay($aPos)Eventuell sind die Classnames in anderen Windows-Versionen unterschiedlich, AutoIt-Window-Info verwenden.
-
Hi,
ich habe folgendes Skript verwendet, um die im Netzwerk vorhandenen PC zu ermitteln (bzw. den Pfad zu den Festplatten, auf denen die Netzwerkfreigaben zu finden sind, z.B. "\\PC_Name\BugFix").
Das Skript gefiel mir zwar nicht sonderlich, da es grauenhaft langsam war (wenn verbunden ca. 10 s, sonst >20 s), aber es tat, was es sollte.
Heute jedoch flutscht es durch und zeigt mir keine Ergebnisse mehr, obwohl sich an meinem Netz (Arbeitsgruppe) von gestern auf heute nichts geändert hat.Bringt es bei euch Ergebnisse oder hat jemand vielleicht eine andere Möglichkeit die im LAN vorhandenen PC aufzulisten (jede mgl. IP per Ping zu testen dauert erst recht viel zu lang).
Spoiler anzeigen
[autoit]Local $wbemFlagReturnImmediately = 0x10
[/autoit] [autoit][/autoit] [autoit]
Local $wbemFlagForwardOnly = 0x20
Local $colItems = "", $aRemoteDisk[1][3]
Local $strComputer = "localhost"
Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkConnection", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If $objItem.ResourceType <> 'Disk' Then ContinueLoop
If $aRemoteDisk[UBound($aRemoteDisk)-1][0] <> '' Then ReDim $aRemoteDisk[UBound($aRemoteDisk)+1][3]
$aRemoteDisk[UBound($aRemoteDisk)-1][0] = $objItem.RemoteName
$aRemoteDisk[UBound($aRemoteDisk)-1][1] = $objItem.RemotePath
$aRemoteDisk[UBound($aRemoteDisk)-1][2] = 1 ; == verbunden
If Not FileExists($objItem.RemotePath) Then $aRemoteDisk[$aRemoteDisk[0][0]][2] = 0 ; == nicht verbunden
Next
Endif_ArrayDisplay($aRemoteDisk, 'Remote Disk', -1, 0, '', '|', 'Name|Pfad|Verbunden')
[/autoit] -
Wenn du es sperrst, hast du doch denselben Effekt - der Nutzer kann nicht zugreifen. Ob man das Item sieht oder nicht sollte doch nicht so relevant sein.
-
Vor ein paar Tagen hatten wir genau dieselbe Frage schon mal. Bitte die Suche benutzen.