Um in der eigenen Gui zu bleiben könnte man auch eine Combobox verwenden.
Oder eine Listbox mit "Suche"- Funktion für ganz viele Sprachen.
Oder eben einfach Filopendialog ![]()
Beiträge von nuts
-
-
Jedes (?) Control bekommt eine ID (zeigt unter anderem das autoit window tool), darüber kann es im MessageLoop Modus angesprochen werden:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Opt("GUICoordMode", 1)
[/autoit] [autoit][/autoit] [autoit]Global $HauptGUI = GUICreate("", 100, 100, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateButton("Button1", 10, 10)
GUICtrlCreateButton("Button2", 10, 40)GUISetState(@SW_SHOW, $HauptGUI)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]$msg = GUIGetMsg()
[/autoit]
switch $msg
case $GUI_EVENT_Close
Exit
case 3
MsgBox(32 + 4, "", "Hallo hier ist Button1")
case 4
MsgBox(32 + 4, "", "Hallo hier ist Button2")
EndSwitch
WEnd
Allerdings ist bei dir nichtmal die Anzahl der Controls so ohne weiteres bekannt?
Dann wirds schwierig
Irgendwie erscheint mir das auch wenig sinnvoll, was haste denn eigentlich vor? Vielleicht gibts ein besseres Konzept? -
Vielleicht hab ichs auch missverstanden? Poste doch mal dein ganzes Skript.
-
Schau mal hier rein: [ offen ] "Automatisch" erstellten Button ansprechen - Gute Idee gesucht!
Ist naja sagen wir mal suboptimal, leider hatte auch niemand sonst eine bessere Idee.
-
Der Wert des Inputs muss noch ausgelesen werden (GuiCtrlread).
Eleganter wäre eine Farbauswahl, denn wer hat schon die Dezimal/Heximalwerte im Kopf? -
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <IE.au3>
#include <File.au3>
#NoTrayIcon$file = FileOpen(@WindowsDir & "\RichtigeNamen.txt", 0)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$line = FileReadLine($file, 1) ;liest Zeile 1
$line2 = FileReadLine($file, 2) ;liest Zeile 2
$line3 = FileReadLine($file, 3) ;liest Zeile 3
$name = InputBox("Kommandoeingabe", "Geben Sie ihren Vornamen ein und klicken Sie auf OK.")If $name =$line or $name=$line2 or $name= $line3 Then ;das ist jetzt nur nen beispiel, ich hab nämlich bemerkt dass so jede eingabe geht
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
MsgBox(64,"","Guten Tag " &$name& "!" &@CRLF& "Ich hoffe es geht dir gut." )
Exit
Else
MsgBox(16,"Falscher Name!","Dies ist ein falscher Name!!!" & @CRLF & "")
EndIf_FileWriteLog(@WindowsDir & "\Namen.log",$name)
[/autoit]
So funktionierts bei mir. -
Schau dir dazu mal die Makros (Directory macros) in der Hilfe an. Nur wie gesagt was genau jetzt für welches Betriebssystem MS konform ist weiss ich nicht (denke da z.B. an Vista, ohne Adminrechte und mit Benutzerkontensteuerung).
-
Wird die .ini vom Programm geändert? Weil dann solltest du schon auf die Windowsvorgaben achten!
Ich blicke da leider auch nicht mehr so ganz durch ...
Vielleicht hat dazu jemand einen geeigneten Link? -
Klaro mit der Error-Abfrage muss vermieden werden, dasss man im Falle eines Fehlers in den kritischen Teil des Skripts kommt.

-
@FunH@ker: Probiers mal aus!

-
Lässt sich (imho) noch leicht optimieren indem am diesen Teil:
[autoit]
[/autoit]
If ($aMsg[1] == $hGUI) Then
ExitLoop
ElseIf ($aMsg[1] == $hGUI2) Then
GUIDelete ($hGUI2)
EndIfAuch in Switch .. Endswitch packt.
Spoiler anzeigen
[autoit];
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>Global $hGUI
[/autoit] [autoit][/autoit] [autoit]
Global $hGUI2Global $Label1, $Label2, $Label3
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Form1", 254, 185, 344, 251)
[/autoit] [autoit][/autoit] [autoit]
$Pic2 = GUICtrlCreatePic("C:\Bild.jpg", 3, 6, 249, 157, BitOR($SS_NOTIFY,$WS_GROUP,$WS_BORDER,$WS_CLIPSIBLINGS), $WS_EX_CLIENTEDGE)
$MenuItem1 = GUICtrlCreateMenu("&Menü")
$Message= GUICtrlCreateMenuItem("Message", $MenuItem1)
GUISetState(@SW_SHOW)Func AboutDlg ( )
[/autoit] [autoit][/autoit] [autoit]$hGUI2 = GUICreate("Info", 139, 107, 328, 363, _
[/autoit] [autoit][/autoit] [autoit]
BitOR ($WS_VISIBLE, $DS_MODALFRAME, $WS_CAPTION, $WS_SYSMENU), _
$WS_EX_DLGMODALFRAME, $hGUI)
GUICtrlCreateGroup("Info:", 6, 4, 127, 97)
$Label1 = GUICtrlCreateLabel("01", 16, 48, 90, 17)
$Label2 = GUICtrlCreateLabel("02", 16, 24, 112, 17)
$Label3 = GUICtrlCreateLabel("03", 16, 72, 83, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)EndFunc
[/autoit] [autoit][/autoit] [autoit]While (True)
[/autoit] [autoit][/autoit] [autoit]
$aMsg = GUIGetMsg (True)
Switch $aMsg[0]Case $GUI_EVENT_CLOSE
[/autoit] [autoit][/autoit] [autoit]
switch $aMsg[1]
case $hgui
exitloop
case $hGUI2
GUIDelete ($hGUI2)
EndSwitchCase $Message
[/autoit] [autoit][/autoit] [autoit]
AboutDlg ( )
EndSwitch
WEndExit (0)
[/autoit] -
Damit wird die Variable deklariert (s. Hilfe), hab das eben auch nur schnell zusammenkopiert.
Über den Sinn von "Dim" kann man sich sicherlich streiten - Global und Local sind aber praktisch beim Quellcode lesen (also gleich richtig angewöhnen). -
[autoit]
#include <GUIConstantsEx.au3>
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
$Form1 = GUICreate("Form1", 520, 80, 291, 125)
dim $pic = GUICtrlCreatePic( "", 10, 10, 50, 60)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit]
$msg = GUIGetMsg()
switch $msg
Case $pic
MsgBox(1, "", "Hallo du hast auf das Bild geklickt.")
exit
EndSwitch
WEnd
Das ist leicht
edit \ $SS_NOTIFY (default) wäre der entsprechende Style! -
[autoit]Alles anzeigen
Func search()
[/autoit]
$pos = MouseGetPos()
$Variable = PixelSearch(20, 199, 278, 259, 0xA38567)
If IsArray($Variable) = 1 Then
MouseMove( $Variable[0], $Variable[1], 1)
ElseIf IsArray($Variable) = 0 Then
msgbox(0,"Fehler","Farbe wurde nicht gefunden")
Return;Wenn Farbe nicht vorhanden ist bzw. nicht gefunden wird soll die funktion nach der Msg hier stoppen
EndIf
sleep(50)
MouseClick("left")
MouseClick("left")
sleep(50)
MouseClick("left", $pos[0], $pos[1] ,1, 4)
EndFunc -
Ja ich denke ich mach die ini ganz weg und arbeite mit registry.
Mhm erstens ist das unnötig, zweitens erkaufst du dir damit andere Probleme (Rechte beim Regwrite usw.) und drittens ists irgendwie abschreckend :wacko:
Die .ini kann ja beim ersten Start (oder beim Setup) automatisch angelegt werden. -
Poste doch mal dein Skript.
-
[autoit]
[/autoit]
$var = PixelGetColor( 10 , 100 )
MsgBox(0,"The decmial color is", $var)
MsgBox(0,"The hex color is", Hex($var, 6)) ;heximalwert
If $var <> "Deine Farbe" then msgbox(1, "", "Farbe nicht da ö_Ö") -
Es fehlt die Errorabfrage, habs oben eingebaut, aber für sowas kann man auch mal die Hilfe bemühen.

_ArrayDelete würde auch mal entfernt. Bin ich mir jetzt auch nicht so sicher
Sollte man ein Array wieder löschen/leeren bevor man es mit neuen Werten befüllt? Oder werden die alten automatisch überschrieben? -
Spoiler anzeigen
[autoit]#include <GuiListBox.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>Local $Ordner = "C:"
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("{ENTER}", "_Open_Ordner")Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]$gui = GUICreate('Schnelle Ordnerauswahl by funkey & nuts', 220, 700, -1, -1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent(-3, '_Ende')
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")Global $Input = GUICtrlCreateInput('', 10, 40, 130, 25)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $Inputrefresh = GUICtrlCreateInput('', 10, 10, 130, 25)
Global $test = GUICtrlCreateButton("Suche", 150, 10, 60, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, '_Refresh')
Global $List = GUICtrlCreateList('', 10, 100, 200, 560)
Global $hList = GUICtrlGetHandle(-1)Global $aOrdner = _FileListToArray($Ordner, "*" & GUICtrlRead($Inputrefresh) & "*.*", 1)
[/autoit] [autoit][/autoit] [autoit]
If @Error=4 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
For $i = 1 To $aOrdner[0]
GUICtrlSetData($List, $aOrdner[$i])
NextGUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(1000)
WEndFunc _Check_Eingabe($iwParam)
[/autoit] [autoit][/autoit] [autoit]
Switch $iwParam
Case 0x03000003
_GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindString($hList, GUICtrlRead($Input)))
EndSwitch
EndFunc ;==>_Check_EingabeFunc _Open_Ordner()
[/autoit] [autoit][/autoit] [autoit]
If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
EndFunc ;==>_Open_OrdnerFunc _Ende()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFunc ;==>_EndeFunc _Refresh()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($List, '')
Local $filter = "*" & GUICtrlRead($Inputrefresh) & "*.*"
$aOrdner = _FileListToArray($Ordner, $filter, 1)
If @Error=4 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
For $i = 1 To $aOrdner[0]
GUICtrlSetData($List, $aOrdner[$i])
Next
EndFunc ;==>_RefreshFunc 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
So ungefähr?\geändert!
-
Den Hotkey "Enter" kannste ja auch entfernen (wie auch sonst alles was nicht reinpasst).
Derzeit wird das Listbox-Control nach dem Inhalt der Inputbox durchsucht (_GUICtrlListBox_FindString).
Jetzt soll noch ein Filter für die Dateiendung eingebaut werden?edit \
Zum Einlesen mit einem anderen Filter:Inputbox (und einen "Refresh" Button oder so)) für den Filtererstellen, auslesen, Arraylöschen, Listbox leeren, _Filereadtoarray mit neuem Filter, Listbox befüllen.
Vielleicht kommst du so weiter? Müsste jetzt nämlich leider bissle was arbeiten.