Bei Fileopen den Modus 2 verwenden.
Beiträge von nuts
-
-
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Form1", 394, 447, 193, 125)
$Input1 = GUICtrlCreateInput("Input1", 128, 24, 129, 21)
$Button1 = GUICtrlCreateButton("Button1", 120, 72, 65, 33, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $file = @ScriptDir & "\text.txt"_Fileread() ; .txt Datei einlesen und den Inhalt der ersten Zeile ins Input schreiben
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
case $Button1
_Filewrite()
EndSwitch
WEndFunc _Filewrite() ;Input in eine .txt Datei speichern
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
local $data = GUICtrlRead($Input1) ;Input auslesen
if FileExists($file) then ;prüfen obs es die .txt Datei überhaupt gibt
local $openfile = FileOpen($file,2) ;öffnen
FileWrite( $openfile, $data) ;ausgelesenen Inhalt des Inputs in die Datei schreiben
MsgBox(1, "", "Gespeichert")
else
_FileCreate($file)
local $openfile = FileOpen($file,2)
FileWrite($openfile, $data)
MsgBox(1, "", "Gespeichert")
endif
FileClose($openfile)
endfuncFunc _Fileread() ;.txt Datei einlesen
[/autoit]
if FileExists($file) then
local $openfile = FileOpen($file,0)
local $data = FileReadline($openfile)
GUICtrlSetData($input1, $data)
FileClose($openfile)
else
MsgBox(1, "", "Datei konnte nicht geöffnet werden")
endif
endfuncBeispiel für eine .txt Datei - finde ich für ein Aufgaben-Tool besser.
-
Ah solangsam komm ich dahinter wie ich Hotkeyset einbauen kann - danke!
-
Hey,
wie schalte ich Hotkeyset denn wieder aus?
Mein ganzes Skript ist leider auf dem Arbeits-Pc (kein i.net erlaubt, sonst hätt ichs von dort schnell reingestellt).Ich hab verschiedene Gui-Fenster und will die Hotkey/IsPressed Aktion nur in einem bestimmten aufrufen.
Ok man könnte abfagen ob das Fenster existiert/aktiv ist, aber vielleicht gibts noch was bessere?edit \ anders gefragt: _IsPressed lässt die gedrückte Taste immer durch?
-
Ok hier mal ein Beispiel ohne auf den Fokus (das ist erstmal auch nicht das Problem) einzugehen
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Form1", 633, 438, 193, 133)
$Input1 = GUICtrlCreateInput("Input1", 48, 56, 129, 24)
$Input2 = GUICtrlCreateInput("Input2", 232, 56, 161, 24)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Dllopen("user32.dll")
While 1
_test()
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitEndSwitch
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
WEnd
DllClose("user32.dll")func _test()
[/autoit]
if _IsPressed("6B") then MsgBox(1, "", "Input1")
if _IsPressed("6D") then MsgBox(1, "", "Input2")
endfuncIst der Fokus über einem der Inputs wird eben +/- ins Inputfeld geschrieben und das wollte ich gerne vermeiden.
@HotkeySet: Ich dachte das geht nur global fürs ganze Skript?
-
Hey,
ich habe bei _Ispressed ein kleines Verständnisproblem:
Also ich hab 2 Inputboxen, drücke ich + und der Fokus liegt auf Input1 erscheint eine Nachricht, drücke ich - und der Fokus liegt auf Input2, dann erscheinte eine andere Nachricht.
Soweit so gut, die Sache läuft.
Problem: Die Inputboxen werden durch die Eingabe von jeweiles +/- in ihrem Inhalt verändert und das ist nichts erwünscht.
_IsPressed soll also praktisch nichts durchlassen, sondern einfach nur die hinterlegte Funktion aufrufen.Bin mir nicht ganz sicher ob das mit _IsPressed überhaupt funktioniert, daher dieser Thread.
Alternativ: Man schließt die definierten Tasten von _IsPressed bei den möglichen Eingaben ins Input aus - ist aber irgendwie wieder ziemlich kompliziert für ein im Prinzip ziemlich einfaches Problem.
Gruß nuts
-
[autoit]
#include <String.au3>
[/autoit]
fehlt ja auch oben. -
-
Meiner irgendwie auch. Bitte um Erläuterung der Parameter "pattern" und "replace"

-
Habs etwas ausgebaut.
So kann man auch durch einen Doppelklick einen Ordner öffnen und man kann per TAB direkt in die Listbox und mit Hoch/Runter darin navigieren.Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListBox.au3>
#include <WindowsConstants.au3>
#include <File.au3>Local $Ordner = 'C:\Programme'
[/autoit] [autoit][/autoit] [autoit]
Local $TempFile = _TempFile()
Global $aOrdner
HotKeySet("{ENTER}", "_Open_Ordner")RunWait(@ComSpec & " /c " & 'dir "'&$Ordner&'" /ad /b > "'&$TempFile&'"', "", @SW_HIDE)
[/autoit] [autoit][/autoit] [autoit]
_FileReadToArray($TempFile, $aOrdner)
FileDelete($TempFile)Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]$gui = GUICreate('Schnelle Ordnerauswahl by funkey', 400, 600, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent(-3, '_Ende')
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")Global $Input = GUICtrlCreateInput('', 10, 10, 380, 20)
[/autoit] [autoit][/autoit] [autoit]
Global $List = GUICtrlCreateList('', 10, 40, 380, 560)
Global $hList = GUICtrlGetHandle(-1)For $i = 1 To $aOrdner[0]
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData(-1, $aOrdner[$i])
NextGUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100000)
WEndFunc _Check_Eingabe($iwParam)
[/autoit] [autoit][/autoit] [autoit]
switch $iwParam
case 0x03000003
_GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindString($hList, GUICtrlRead($Input)))
EndSwitch
EndFuncFunc _Open_Ordner()
[/autoit] [autoit][/autoit] [autoit]
If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
EndFuncFunc _Ende()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
_Check_Eingabe($iwParam)
Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
Switch $hWndFrom
Case $List, $hWndListBox
Switch $iCode
Case $LBN_DBLCLK
_Open_Ordner()
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND (Bugfix - http://www.autoit.de)Beeindruckend ist der Speed beim Einlesen der Ordner.
[autoit]RunWait(@ComSpec & " /c " & 'dir "'&$Ordner&'" /ad /b > "'&$TempFile&'"', "", @SW_HIDE)
[/autoit]
_FileReadToArray($TempFile, $aOrdner)
FileDelete($TempFile)
Das sind wohl diese Zeilen. Vielleicht kann mir noch jemand die erste Zeile erklären? Auch Verzeichnisse mit sehr vielen Ordnern sind sofort geladen (als Vergleich meine "drumherum" aus Post1) und ich wüsste gerne wie genau der gute funkey das gemacht hat.edit \ Noch ne Frage ..
Es gibt ja verschieden Windows Konstanten, die in der <WindowsConstants.au3> deklariert sind.
Hier im Skript wird z.B. $WM_COMMAND verwendete. Wo sind diese näher erklärt? Im Beispiel quasi: Mit welchem COMMAND wird die jeweilige Funktion angesprochen?
In der Hilfe bin ich nicht fündig geworden. -
Klaro - mir hat nur die Vorstellungskraft gefehlt wie sowas umzusetzen ist.
Mit deinem Skript hab ich aber eine sehr gute Basis!
-
Danke funkey.
Ist genau das was ich suche
-
hey,
ein Umsetzung mit Autoit wäre aber auch cool.
So richtig weitergekommen bin ich noch nicht - für kreative Vorschläge wäre ich sehr dankbar
-
Hey,
bei und im Büro werden alle Kundeninformationen (Schriftverkehr, Anlagen usw.) in einem zentralen Ordner gespeichert.
Ordnerstruktur:
Dadurch muss ich mich immer durch die lange Kundenliste kämpfen um zum gesuchten Ordner zu kommen. Mit der Windowshilfe komme ich irgendwie auch nicht so zurecht.Daher dachte ich an ein kleines Autoit-Programm - das ist aber gar nicht so einfach

Ich wollte den gesuchten Ordner mit hilfe der Infos aus einer Inputbox ermitteln.
Quasi so:1. Schritt: alle Ordner einlesen
2. Schritt: Eingabe in die Inputbox, z.B. den Buchstaben A
3. Schritt: es werden nurnoch alle Ordner mit Anfangsbuchstabe A angezeigtAllerdings fehlt mir irgendwie der Ansatz dazu. Muss ich bei jedem aufgelisteten Ordner den Anfangsbuchstaben ermittel und dann mit der Eingabe vergleichen?
Gibts vielleicht eine viel einfachere Lösung mit dem Mitteln der Windowshilfe?
Beim Schreiben fällt mir noch eine gute Beschreibung ein: Ich suche die Funktion der Autoithilfe (Index) nur eben für OrdnernamenSo und damit es nicht heisst ich hab gar nichts gemacht (
) hier mal das drumherum:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include<Guilistview.au3>
#include <File.au3>
;#include <Array.au3>Global Const $NB_DBLCLK = -3
[/autoit] [autoit][/autoit] [autoit]
Global Const $WM_NOTIFY = 0x004E
Global Const $GUI_EVENT_CLOSE = -3Global $hGui = GUICreate("", 300, 480)
[/autoit] [autoit][/autoit] [autoit]
Global $hListView = GUICtrlCreateListView("Ordner", 0, 0, 280, 420, $LVS_SHOWSELALWAYS)
Global $hLoad = GUICtrlCreateButton("Test", 180, 440, 70, 20)
Global $isuche = GUICtrlCreateInput("", 10, 440,150)
Global $path = 'C:\Programme' ;BeispielGlobal $hLVHandle = GUICtrlGetHandle($hListView)
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_SetColumn($hLVHandle, 0, "Ordner", 240, 0)_GUICtrlListView_RegisterSortCallBack($hLVHandle)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW, $hGui)
GUIRegisterMsg($WM_NOTIFY, "_DoubleClickOnListView")
_Load()while 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$Msg = GUIGetMsg()
switch $Msg
case $GUI_EVENT_CLOSE
_GUICtrlListView_UnRegisterSortCallBack($hLVHandle)
Exit
case $hLoad
MsgBox(1, "", _GUICtrlListView_GetItemCount($hLVHandle)) ;nur zu testzwecken
EndSwitch
wendFunc _Load() ;Array ins Listview laden
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
$aFolder = _FileListToArray($path, "*", 2)
for $i = 1 to $aFolder[0]
$string = stringsplit($afolder[$i], "\")
GUICtrlCreateListViewItem($string[$string[0]], $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
next
_GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
EndFuncFunc _Openfolder()
[/autoit] [autoit][/autoit] [autoit]
local $iselection = _GUICtrlListView_GetSelectionMark($hLVHandle)
local $itext =_GUICtrlListView_GetItemText ($hLVHandle,$iselection)
ShellExecute($path & "\" & $itext)
endfuncFunc _DoubleClickOnListView($hWnd, $Msg, $wParam, $lParam) ;Doppelklick auf ein Listviewitem
[/autoit]
Local $tagNMHDR, $event, $hwndFrom, $code
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3); Checkt wie das EVENT aussieht
If $wParam = $hListView and $event = $NB_DBLCLK Then ;Wenn der Klick auf das ListView ging und es ein Doppelklick war, dann
_Openfolder()
EndIf
$tagNMHDR = 0
$event = 0
$lParam = 0
EndFunc ;==>_DoubleClickOnListView -
Ich dachte .dll werden über DllCall aufgerufen?
-
Kennst du schon die Funktion von Bugfix? ListView - SubItem einzeln färben/formatieren
Ist jetzt fürs normale Listview und nicht gerade einfach zu verstehen.Bei Bedarf lässt sie das vielleicht auch für die UDF (wieso erstellst du dein Listview darüber?) umbauen? Allerdings nicht von mir, da ich die Funktion von Bugfix nicht verstehe.
-
würde sogar sinn machen wenn man 2 leptops hat und immer nur eins benutzt und der router ein MAc filter aktive hat
hö?Wenn ein Router verwendet wird muss doch vermutlich sowieso die MAC vom Router geändert werden.
Es gibt einige Router die so eine Funktion bieten (MAC Spoofing). -
kann man den abgesicherten modus eigtl. verbieten?
Hoffentlich nicht! -
Oder ich lass mein Skript ganz aus und verbrauche gar keine CPU Power - so klar war das mit dem Oneventmode jetzt auch nicht

-
Was Sleep so macht ist schon klar. Nur wieso senkt mir das die CPU Last?
edit \ Aha thx - jetzt ists klar.