Du musst die erste Zeile bei dir am Anfang einbauen. Sonst funktioniert es auch nicht. Der Guioneventmode muss an sein!
Beiträge von Kanashius
-
-
So könnte man es mit guisetoneventmode lösen!
Spoiler anzeigen
[autoit]Opt("GUIOnEventMode",1);Hier (statt guigetmsg)
[/autoit] [autoit][/autoit] [autoit]$MACountGUIDay = GUICtrlCreateLabel("", -100, -100)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($MACountGUIDay, _FileCountLines(@ScriptDir & "\MA.ini"))
$MACountPosDay = GUICtrlCreateLabel("160", -100, -100)
$MACountPosDayY = GUICtrlCreateLabel("100", -100, -100)
For $i = 1 To GUICtrlRead($MACountGUI)-3 Step 1
GUICtrlSetData($MACountPos, "0")
For $j = 1 To 31 Step 1
$MAWord[$i][$j] = GUICtrlCreateLabel("-", GUICtrlRead($MACountPosDay), GUICtrlRead($MACountPosDayY), 25, 25, $SS_SUNKEN)
GUICtrlSetOnEvent(-1,"_LabelPressed") ;HIER
GUICtrlSetFont(-1, 13)
If mod($i, 2) <> 0 Then GUICtrlSetBkColor(-1, 0xccc7c7)
GUICtrlSetData($MACountPosDay, GUICtrlRead($MACountPosDay) + 25)
Next
GUICtrlSetData($MACountPosDayY, GUICtrlRead($MACountPosDayY) + 25)
GUICtrlSetData($MACountPosDay, "160")
Next;ab hier
[/autoit]
Func _LabelPressed()
local $x,$y
for $i=0 to UBound($MAWord)-1 step 1
for $j=0 to UBound($MAWord,0)-1 step 1
if $MAWord[$i][$j]=@GUI_CtrlId then
$x=$i
$y=$j
ExitLoop 2
endif
next
next
msgbox(48,"","Label "&$x&":"&$y&" geklickt!")
EndFunc -
Mit Hooks kannst du sehr gut abfragen, ob eine Taste gedrückt, bzw. losgelassen wurde (ebenso maustasten, sowie mausrad):
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <MsgBoxConstants.au3>
#include <array.au3>Global Const $MOUSE_MOVE_EVENT = 0x200 ;512 (WM_MOUSEMOVE) ; ==> Mouse moving.
[/autoit] [autoit][/autoit] [autoit]
Global Const $MOUSE_PRIMARYDOWN_EVENT = 0x201 ;513 (WM_LBUTTONDOWN) ; ==> Primary mouse button down.
Global Const $MOUSE_PRIMARYUP_EVENT = 0x202 ;514 (WM_LBUTTONUP) ; ==> Primary mouse button up.
Global Const $MOUSE_PRIMARYDBLCLK_EVENT = 0x203 ;515 (WM_LBUTTONDBLCLK) ; ==> Primary mouse button double click.
Global Const $MOUSE_SECONDARYDOWN_EVENT = 0x204 ;516 (WM_RBUTTONDOWN) ; ==> Secondary mouse button down.
Global Const $MOUSE_SECONDARYUP_EVENT = 0x205 ;517 (WM_RBUTTONUP) ; ==> Secondary mouse button up.
Global Const $MOUSE_SECONDARYDBLCLK_EVENT = 0x206 ;518 (WM_RBUTTONDBLCLK) ; ==> Secondary mouse button double click.
Global Const $MOUSE_WHEELDOWN_EVENT = 0x207 ;519 (WM_MBUTTONDOWN) ; ==> Wheel mouse button pressed down.
Global Const $MOUSE_WHEELUP_EVENT = 0x208 ;520 (WM_MBUTTONUP) ; ==> Wheel mouse button up.
Global Const $MOUSE_WHEELDBLCLK_EVENT = 0x209 ;521 (WM_MBUTTONDBLCLK) ; ==> Wheel mouse button double click.
Global Const $MOUSE_WHEELSCROLL_EVENT = 0x20A ;522 (WM_MOUSEWHEEL) ; ==> Wheel mouse scroll.
Global Const $MOUSE_WHEELSCROLLDOWN_EVENT = 0x20A + 8 ;530 (WM_MOUSEWHEEL + ; ==> Wheel mouse scroll Down.
Global Const $MOUSE_WHEELSCROLLUP_EVENT = 0x20A + 16 ;538 (WM_MOUSEWHEEL + 16) ; ==> Wheel mouse scroll Up.
Global Const $MOUSE_XBUTTONDOWN_EVENT = 0x20B ;523 (WM_XBUTTONDOWN) ; ==> Side mouse button down (usually navigating next/back buttons).
Global Const $MOUSE_XBUTTONUP_EVENT = 0x20C ;524 (WM_XBUTTONUP) ; ==> Side mouse button up.
Global Const $MOUSE_XBUTTONDBLCLK_EVENT = 0x20D ;525 (WM_XBUTTONDBLCLK) ; ==> Side mouse button double click.
global $KeyCodes[205][2]=[[0,"0"] _
,[1,"1"] _
,[2,"2"] _
,[3,"3"] _
,[4,"4"] _
,[5,"5"] _
,[6,"6"] _
,[7,"7"] _
,[8,"[DELETE]"] _
,[9,"[TAB]"] _
,[10,""] _
,[11,""] _
,[12,""] _
,[13,"[ENTER]"] _
,[14,""] _
,[15,""] _
,[16,""] _
,[17,""] _
,[18,""] _
,[19,"[PAUSE]"] _
,[20,"[CAPSLOG]"] _
,[21,""] _
,[22,""] _
,[23,""] _
,[24,""] _
,[25,""] _
,[26,""] _
,[27,"[ESC]"] _
,[28,""] _
,[29,""] _
,[30,""] _
,[31,""] _
,[32,"[LEERTASTE]"] _
,[33,"[BILDHOCH]"] _
,[34,"[BILDRUNTER]"] _
,[35,"[ENDE]"] _
,[36,"[POS1]"] _
,[37,"[PFEILLINKS]"] _
,[38,"[PFEILHOCH]"] _
,[39,"[PFEILRECHTS]"] _
,[40,"[PFEILRUNTER]"] _
,[41,""] _
,[42,""] _
,[43,""] _
,[44,"[DRUCK]"] _
,[45,"[EINFÜGEN]"] _
,[46,"[ENTFERNEN]"] _
,[47,""] _
,[48,"0"] _
,[49,"1"] _
,[50,"2"] _
,[51,"3"] _
,[52,"4"] _
,[53,"5"] _
,[54,"6"] _
,[55,"7"] _
,[56,"8"] _
,[57,"9"] _
,[58,""] _
,[59,""] _
,[60,""] _
,[61,""] _
,[62,""] _
,[63,""] _
,[64,""] _
,[65,"a"] _
,[66,"b"] _
,[67,"c"] _
,[68,"d"] _
,[69,"e"] _
,[70,"f"] _
,[71,"g"] _
,[72,"h"] _
,[73,"i"] _
,[74,"j"] _
,[75,"k"] _
,[76,"l"] _
,[77,"m"] _
,[78,"n"] _
,[79,"o"] _
,[80,"p"] _
,[81,"q"] _
,[82,"r"] _
,[83,"s"] _
,[84,"t"] _
,[85,"u"] _
,[86,"v"] _
,[87,"w"] _
,[88,"x"] _
,[89,"y"] _
,[90,"z"] _
,[91,"[WINDOWS]"] _
,[92,""] _
,[93,"[LISTE]"] _
,[94,""] _
,[95,""] _
,[96,"[Block 0]"] _
,[97,"[Block 1]"] _
,[98,"[Block 2]"] _
,[99,"[Block 3]"] _
,[100,"[Block 4]"] _
,[101,"[Block 5]"] _
,[102,"[Block 6]"] _
,[103,"[Block 7]"] _
,[104,"[Block 8]"] _
,[105,"[Block 9]"] _
,[106,"[Block *]"] _
,[107,"[Block +]"] _
,[108,""] _
,[109,"[Block -]"] _
,[110,"[Block ,]"] _
,[111,"[Block /]"] _
,[112,"[F1]"] _
,[113,"[F2]"] _
,[114,"[F3]"] _
,[115,"[F4]"] _
,[116,"[F5]"] _
,[117,"[F6]"] _
,[118,"[F7]"] _
,[119,"[F8]"] _
,[120,"[F9]"] _
,[121,"[F10]"] _
,[122,"[F11]"] _
,[123,"[F12]"] _
,[124,""] _
,[125,""] _
,[126,""] _
,[127,""] _
,[128,""] _
,[129,""] _
,[130,""] _
,[131,""] _
,[132,""] _
,[133,""] _
,[134,""] _
,[135,""] _
,[136,""] _
,[137,""] _
,[138,""] _
,[139,""] _
,[140,""] _
,[141,""] _
,[142,""] _
,[143,""] _
,[144,"[NUM]"] _
,[145,"[ROLLEN]"] _
,[146,""] _
,[147,""] _
,[148,""] _
,[149,""] _
,[150,""] _
,[151,""] _
,[152,""] _
,[153,""] _
,[154,""] _
,[155,""] _
,[156,""] _
,[157,""] _
,[158,""] _
,[159,""] _
,[160,"[SHIFTLINKS]"] _
,[161,"[SHIFTRECHTS]"] _
,[162,"[STRG]"] _
,[163,""] _
,[164,"[ALT]"] _
,[165,"[ALT GR]"] _
,[166,""] _
,[167,""] _
,[168,""] _
,[169,""] _
,[170,""] _
,[171,""] _
,[172,""] _
,[173,""] _
,[174,""] _
,[175,""] _
,[176,""] _
,[177,""] _
,[178,""] _
,[179,""] _
,[180,""] _
,[181,""] _
,[182,""] _
,[183,""] _
,[184,""] _
,[185,""] _
,[186,"ü"] _
,[187,"+"] _
,[188,","] _
,[189,"-"] _
,[190,"."] _
,[191,"#"] _
,[192,"ö"] _
,[193,""] _
,[194,""] _
,[195,""] _
,[196,""] _
,[197,""] _
,[198,""] _
,[199,""] _
,[220,"^"] _
,[219,"ß"] _
,[221,"´"] _
,[222,"ä"] _
,[226,"<"] _
]$hmod = _WinAPI_GetModuleHandle(0)
[/autoit] [autoit][/autoit] [autoit]
$hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
$hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
$hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
$hMouseHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)While sleep(100)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _KeyProc($nCode, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $tKEYHOOKS
$tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
If $nCode < 0 Then
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndIf
If $wParam = $WM_KEYDOWN Then
$r=DllStructGetData($tKEYHOOKS, "vkCode")
Local $flags = DllStructGetData($tKEYHOOKS, "flags")
Switch $flags
Case $LLKHF_ALTDOWN
ConsoleWrite("[Alt]"&@crlf)
EndSwitch
keyDown($r)
endif
If $wParam = $WM_KEYUP Then
$r=DllStructGetData($tKEYHOOKS, "vkCode")
Local $flags = DllStructGetData($tKEYHOOKS, "flags")
Switch $flags
Case $LLKHF_ALTDOWN
ConsoleWrite("([Alt] UP)"&@crlf)
EndSwitch
keyUP($r)
endif
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc ;==>_KeyProcFunc _MouseProc($nCode, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
If $nCode < 0 Then
Return _WinAPI_CallNextHookEx($hMouseHook, $nCode, $wParam, $lParam) ;Continue processing
EndIf
Local $iEvent = _WinAPI_LoWord($wParam)
Local $iRet
Local $iBlockDefProc_Ret
Local $iWScrollDirection = 0
Switch $iEvent
Case $MOUSE_PRIMARYDOWN_EVENT
ConsoleWrite("Linke Maustaste gedrückt"&@crlf)
Case $MOUSE_PRIMARYUP_EVENT
ConsoleWrite("Linke Maustaste losgelassen"&@crlf)
Case $MOUSE_PRIMARYDBLCLK_EVENT
ConsoleWrite("Linke Maustaste doppelklick"&@crlf)
Case $MOUSE_SECONDARYDOWN_EVENT
ConsoleWrite("Rechte Maustaste gedrückt"&@crlf)
Case $MOUSE_SECONDARYUP_EVENT
ConsoleWrite("Rechte Maustaste losgelassen"&@crlf)
Case $MOUSE_SECONDARYDBLCLK_EVENT
ConsoleWrite("Rechte Maustaste doppelklick"&@crlf)
Case $MOUSE_WHEELDOWN_EVENT
ConsoleWrite("Mausrad gedrückt"&@crlf)
Case $MOUSE_WHEELUP_EVENT
ConsoleWrite("Mausrad losgelassen"&@crlf)
Case $MOUSE_WHEELSCROLLDOWN_EVENT
ConsoleWrite("Mausrad nach unten gedreht"&@crlf)
Case $MOUSE_WHEELSCROLLUP_EVENT
ConsoleWrite("Mausrad nach oben gedreht"&@crlf)
Case $MOUSE_XBUTTONDOWN_EVENT
ConsoleWrite("Andere Maustaste gedrückt"&@crlf)
Case $MOUSE_XBUTTONUP_EVENT
ConsoleWrite("Andere Maustaste losgelassen"&@crlf)
Case $MOUSE_XBUTTONDBLCLK_EVENT
ConsoleWrite("Andere Maustaste doppelklick"&@crlf)
EndSwitch
Return _WinAPI_CallNextHookEx($hMouseHook, $nCode, $wParam, $lParam) ;Continue processing
EndFunc ;==>_KeyProcFunc keyDown($keycode)
[/autoit] [autoit][/autoit] [autoit]
$x=_ArraySearch($KeyCodes,$keycode,0,0,0,0,1,0)
if $x=-1 then
ConsoleWrite("(KEY:"&$keycode&")"&@crlf)
else
if $KeyCodes[$x][1]="" then
ConsoleWrite("(KEY:"&$x&")"&@crlf)
else
ConsoleWrite($KeyCodes[$x][1]&@crlf)
endif
endif
EndFuncFunc keyUp($keycode)
[/autoit]
$x=_ArraySearch($KeyCodes,$keycode,0,0,0,0,1,0)
if $x=-1 then
ConsoleWrite("(KEY UP:"&$keycode&")"&@crlf)
else
if $KeyCodes[$x][1]="" then
ConsoleWrite("(KEY UP:"&$x&")"&@crlf)
else
ConsoleWrite("("&$KeyCodes[$x][1]&" UP)"&@crlf)
endif
endif
EndFuncIn Zeile 275-300 kannst du auf Maustasten-Events reagieren.
In Zeile 305-316 auf (Tastatur-)taste gedrückt. ╔>Hier wird momentan geprüft, ob der Code im Array zugeordnet werden kann.
In Zeile 318-329 auf (Tastatur-)taste losgelassen. ╚>
(Wenn ja wird der jeweilige String statt des Codes angezeigt)In Bereich 318-329 könntest du zum Beispiel die Maus nach unten rechts bewegen lassen, wenn $keycode=65, also, wenn a losgelassen wird.
(Am Anfang des Scriptes steht, welche codes die tasten von Maus und Tastatur symolisieren) -
Bei den 3 Beispielbildern von dir bekomme ich keine Fehlermeldung... Es wird mir angezeigt, dass die Bilder erfolgreich bearbeitet wurden und bis auf die Beschreibung wird auch alles bei den Bildern korrekt eingefügt (von dem ExifTool).
Wobei ich dass mit der Beschreibung nachvollziehen kann... Ich hab mir den Aufbau der Bilder vor und nach ändern der Eigenschaften angeschaut (als ich sie manuell geändert habe). Die Infos werden nach XML-Schema an den Anfang des Bildes gesetzt. Nur die Beschreibung ist dort nicht zu finden. Sie wird demzufolge irgendwo anders gespeichert. Wo habe ich nicht herausfinden können...
Das prüfen ob das ExifTool vorhanden ist hatte ich deaktiviert, als ich experimentiert hatte, das ganze ohne das ExifTool zu lösen... hab nur vergessen, es wieder zu aktivieren. Für die Funktionalität des Programmes macht das keinen Unterschied (außer man gibt den Pfad nicht an ;))
(Ich hatte Zeile 101,102,105,111 auskommentiert)Ich benutze momentan die AutoIt-Version v3.3.13.10 (Beta).
Ich müsste genau wissen, ob er bei dir wirklich garnichts einfügt. Wenn bei dir alle Bilder nicht geändert werden wäre es nett, wenn du die Ausgabe am Ende einmal Posten könntest (Die in die Zwischenablage kopiert wird).
-
Da ich selbst kein Joystick/Gamepad habe kann ich dir leider nicht so gut helfen, aber falls sich jemand damit beschäftigen möchte:
http://msdn.microsoft.com/en-us/library/…6(v=vs.85).aspxDirectX Direct Input kann Joystick-Eingaben verarbeiten.
-
Da machen wir dann einen Zwangsumbruch bei 30
[autoit]$a = StringRegExp($s, '(\b.{1,30}\b|.{0,30})', 3)
[/autoit]
Wie kannst du nur, Bugfix?! Du musst eine perfekte Silbentrennung einbauen, damit ein "-" angehängt werden kann! -
Ein Passwortfeld geht übrigens so:
[autoit]#include <EditConstants.au3>
[/autoit]
$PWspeichern = GUICtrlCreateInput("", 128, 64, 145, 21,$ES_PASSWORD)
Dann werden statt der zeichen * angezeigt -
Auf die Weise, wie Markus123 dir das zeigt, wird bei jedem Event, welches das Input-Feld auslöst (anklicken, ändern,...) geprüft, ob ein Leerzeichen in dem Inputfeld steht. Was du in deinem Script sonst machst ist relativ egal. Wenn die Message kommt wird das auch geprüft...
[autoit]
Wobei man das noch verbessern könnte, sodass nur bei einer Änderung des Inputfeldes der Inhalt des Feldes geprüft wird:GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
[/autoit][autoit][/autoit][autoit]Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
[/autoit]
Local $nNotifyCode=BitShift($wParam, 16)
Local $hCtrl=$lParam
If $hCtrl=$Input and ($nNotifyCode = 1024 Or $nNotifyCode = 786) Then
GUICtrlSetData($hCtrl,StringReplace(GUICtrlRead($hCtrl)," ",""))
EndIf
Return $GUI_RUNDEFMSG
EndFuncGUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND") wird bei jeder WM-Command Message aufgerufen.
(Controls senden Messages, bei bestimmten Dingen, die mit ihnen gemacht werden. Wenn Beispielsweise ein Button gedrückt wird sendet er eine Message. Mit WM_Command könntest du diese Abfragen und darauf reagieren... (guigetmsg) gibt dir nur diese message zur vereinfachung -
Ich habs dir mal komplett umgeschrieben...
Das Hauptfenster am besten vor den Funktionen schreiben. Die Unterfenster dann in den Funktionen erstellen und alle Controls und die Gui GLOBAL am Anfang des Codes deklarieren.
GuiGetMsg() und opt("GUIOnEventMode",1) funktioniert oft nicht gleichzeitig. Deshalb funktionierten deine Buttons nicht mehr. Man sollte sich für eine Möglichkeit entscheiden.
Bei größeren Programmen empfehle ich den guioneventmode, da bei dem Andern immer die Schleife abgegrast wird. So wird auf Messages reagiert... spart nen bisschen Rechenleistung (wenn das Programm größer ist...)PS: (Das Einrücken überlass ich dir)
Spoiler anzeigen
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
Opt('GUIOnEventMode', 1)
Opt('TrayOnEventMode', 1)
Opt('TrayMenuMode', 1)global $Form2,$BNspeichern,$PWspeichern
[/autoit] [autoit][/autoit] [autoit]$Form1 = GUICreate("Arbeitszeiterfassung", 307, 201, 192, 124)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$Setting_Menu = GUICtrlCreateMenu("Menü")
$Setting_exit = GUICtrlCreateMenuItem("Ende", $Setting_Menu)
GUICtrlSetOnEvent(-1,"_Exit")
$helpmenu = GUICtrlCreateMenu("?")
$BJ = GUICtrlCreateMenuItem("Buchungsjournal",$helpmenu)
GUICtrlSetOnEvent(-1,"_Help")
$Einstellung = GUICtrlCreateMenuItem("Einstellungen",$helpmenu)
GUICtrlSetOnEvent(-1,"_settings")
$Info = GUICtrlCreateMenuItem("Info",$helpmenu)
GUICtrlSetOnEvent(-1,"_showInfo")
$Kommen = GUICtrlCreateButton("Kommen", 32, 16, 113, 113)
GUICtrlSetFont(-1, 18, 800, 0, "@Arial Unicode MS")
GUICtrlSetBkColor(-1, 0x00FF00)
GUICtrlSetOnEvent(-1,"_startSession")
$Gehen = GUICtrlCreateButton("Gehen", 171, 16, 113, 113)
GUICtrlSetFont(-1, 18, 800, 0, "@Arial Unicode MS")
GUICtrlSetBkColor(-1, 0xFF0000)
GUICtrlSetOnEvent(-1,"_endSession")
GUISetState(@SW_SHOW)
$StatusBar1 = _GUICtrlStatusBar_Create($Form1)
_GUICtrlStatusBar_SetBkColor($StatusBar1, 0x0000FF)
_GUICtrlStatusBar_SetText($StatusBar1, "")
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
GUISetOnEvent($GUI_EVENT_MINIMIZE, '_Minimize')
TraySetOnEvent( -7, '_Restore')
$name =IniRead("c:\aze.ini", "User", "Benutzer", "")
$pw =IniRead("c:\aze.ini", "User", "PW", "")While sleep(100)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _settings()
[/autoit] [autoit][/autoit] [autoit]
GuiSETState(@SW_HIDE, $Form1)
$name =IniRead("c:\aze.ini", "User", "Benutzer", "")
$pw =IniRead("c:\aze.ini", "User", "PW", "")
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Einstellungen", 293, 126, 192, 124)
$Benutzername = GUICtrlCreateLabel("Benutzername", 8, 16, 100, 22)
GUICtrlSetFont(-1, 10, 800, 0, "@Arial Unicode MS")
$Passwort = GUICtrlCreateLabel("Passwort", 8, 64, 66, 22)
GUICtrlSetFont(-1, 10, 800, 0, "@Arial Unicode MS")
$BNspeichern = GUICtrlCreateInput($name, 128, 16, 145, 21)
$PWspeichern = GUICtrlCreateInput("*****", 128, 64, 145, 21)
$Speichern1 = GUICtrlCreateButton("Speichern", 128, 96, 65, 25)
GUICtrlSetOnEvent(-1,"_settings_save")
$Abbrechen = GUICtrlCreateButton("Abbrechen", 208, 96, 65, 25)
GUICtrlSetOnEvent(-1,"_settings_end")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUISetOnEvent($GUI_EVENT_CLOSE, '_settings_end')
EndFuncFunc _settings_save()
[/autoit] [autoit][/autoit] [autoit]
IniWrite ("c:\aze.ini","User", "Benutzer", GUICtrlRead ($BNspeichern))
IniWrite ("c:\aze.ini","User", "PW", GUICtrlRead ($PWspeichern))
$name =IniRead("c:\aze.ini", "User", "Benutzer", "")
$pw =IniRead("c:\aze.ini", "User", "PW", "")
;GUISetState(@SW_Hide, $Form2)
GUIDelete($Form2) ;andernfalls erzeugst du bei jedem aufruf ein neues Fenster. Das wird nicht zerstört, sondern jedesmal neu erzeugt.
;hier spielt es nur eine geringe Rolle, bei anderen Fenstern wird es aber schnell größer und verbraucht mehr und mehr speicher,
;da das Fenster ja noch existiert und nur versteckt ist. Also immer löschen, oder auch testen, ob es bereits existiert, und wenn ja, dann nur wie der anzeigen:
;if $Form2<>"" then
;guisetstate(@SW_SHOW,$Form2)
;else
;guicreate(
;...
;endif
;Dann die Variable aber auch global anlegen
GUISetState(@SW_SHOW, $Form1)
EndFuncFunc _settings_end()
[/autoit] [autoit][/autoit] [autoit]
GUIDelete($Form2)
GUISetState(@SW_SHOW, $Form1)
EndFuncFunc _endSession()
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlStatusBar_SetText($StatusBar1, "Bitte Warten!")
$oIE = _IECreate("",0,0)
_IENavigate($oIE, "http://192.168.100.89:8080/info")
_IELoadWait($oIE, 0, 30000)
$oForm = _IEFormGetCollection($oIE, 0)
$oUsername = _IEFormElementGetObjByname($oForm, "UID")
$oPassword = _IEFormElementGetObjByName($oForm, "PWD")
_IEFormElementSetValue($oUsername, $name)
_IEFormElementSetValue($oPassword, $pw)
_IEFormSubmit($oForm)
sleep(500)
$oForm1 = _IEFormGetCollection($oIE, 0)
$Menu1 = _IELinkClickByText($oForm1, "Buchung")
_IELoadWait($oIE)
sleep(800)
$oForm2 = _IEGetObjById($oIE, "2img")
_IEAction($oForm2, "click")
_IELoadWait($oIE)
$oForm3 = _IEGetObjById($oIE, "shutdown")
_IEAction($oForm3, "click")
_IELoadWait($oIE)
_IEQuit($oIE)
_GUICtrlStatusBar_SetText($StatusBar1, "Gehen Gebucht")
EndFuncFunc _startSession()
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlStatusBar_SetText($StatusBar1, "Bitte Warten!")
$oIE = _IECreate("",0,0)
_IENavigate($oIE, "http://192.168.100.89:8080/info")
_IELoadWait($oIE, 0, 30000)
$oForm = _IEFormGetCollection($oIE, 0)
$oUsername = _IEFormElementGetObjByname($oForm, "UID")
$oPassword = _IEFormElementGetObjByName($oForm, "PWD")
_IEFormElementSetValue($oUsername, $name)
_IEFormElementSetValue($oPassword, $pw)
_IEFormSubmit($oForm)
sleep(500)
$oForm1 = _IEFormGetCollection($oIE, 0)
$Menu1 = _IELinkClickByText($oForm1, "Buchung")
_IELoadWait($oIE)
sleep(800)
$oForm2 = _IEGetObjById($oIE, "1img")
_IEAction($oForm2, "click")
_IELoadWait($oIE)
$oForm3 = _IEGetObjById($oIE, "shutdown")
_IEAction($oForm3, "click")
_IELoadWait($oIE)
_IEQuit($oIE)
_GUICtrlStatusBar_SetText($StatusBar1, "Kommen Gebucht")
EndFuncFunc _showInfo()
[/autoit] [autoit][/autoit] [autoit]
MsgBox (0,"Info","Version 1.4 "&@CRLF&"25.08.2014 ")
EndFuncFunc _Help()
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlStatusBar_SetText($StatusBar1, "Bitte Warten!")
$oIE = _IECreate("")
_IENavigate($oIE, "http://192.168.100.89:8080/info")
_IELoadWait($oIE, 0, 30000)
$oForm = _IEFormGetCollection($oIE, 0)
$oUsername = _IEFormElementGetObjByname($oForm, "UID")
$oPassword = _IEFormElementGetObjByName($oForm, "PWD")
_IEFormElementSetValue($oUsername, $name)
_IEFormElementSetValue($oPassword, $pw)
_IEFormSubmit($oForm)
sleep(200)
$oForm1 = _IEFormGetCollection($oIE, 0)
$Menu1 = _IELinkClickByText($oForm1, "Stempelkarte")
_IELoadWait($oIE)
_GUICtrlStatusBar_SetText($StatusBar1, "")
EndFuncFunc _Exit()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _Minimize()
[/autoit] [autoit][/autoit] [autoit]
TraySetState(1)
GUISetState(@SW_HIDE)
EndFuncFunc _Restore()
[/autoit]
TraySetState(2)
GUISetState(@SW_SHOW)
EndFunc -
So wie ichs verstanden habe soll das Fenster erstellt werden, aber nicht das Momentan active Fenster deaktivieren.
[autoit]
Dazu sieh dir mal die Makros mit SW am anfang an:@SW_SHOWNA
[/autoit][autoit]guisetstate(@SW_SHOWNA) ;stattguisetstate(@SW_SHOW)
[/autoit]
[autoit]
Andernfalls könnte man noch mit$activeGui=WinGetTitle("[active]")guisetstate(@SW_SHOW)winactivate($activeGui)
[/autoit]
Wobei das mit dem makro natürlcih besser wäre -
Wir haben mittlerweile schon ein wenig weitergebastelt. Das Ergebnis poste ich mal hier. Vielleicht behebt das dein Problem.
Spoiler anzeigen
[autoit]#include <Misc.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <File.au3>
#include <array.au3>
Opt("GUIOnEventMode", 1)global $arKoordinaten[5][2],$settingsPath="settings.ini",$DataPath="data.txt",$arData,$run=true
[/autoit] [autoit][/autoit] [autoit]if FileExists($settingsPath) then
[/autoit] [autoit][/autoit] [autoit]
for $i=0 to UBound($arKoordinaten)-1 step 1
$arKoordinaten[$i][1]=IniRead($settingsPath,"Koords",$i+1&"y",-1)
$arKoordinaten[$i][0]=IniRead($settingsPath,"Koords",$i+1&"x",-1)
if $arKoordinaten[$i][0]=-1 or $arKoordinaten[$i][1]=-1 then
_getKoords($i)
endif
next
else
_getKoords(-1)
endifif FileExists($DataPath) then
[/autoit] [autoit][/autoit] [autoit]
_loadData()
else
$DataPath=FileOpenDialog("Wähle die Datei, welche die Daten enthält",@DesktopDir,"All (*.*)")
if NOT FileExists($DataPath) then
msgbox(48,"Fehler","Die Datei existiert nicht, oder es wurde keine Datei ausgewählt. Das Programm kann daher nicht fortgeführt werden.")
_Close()
else
_loadData()
endif
endifHotKeySet("^!q","_Close")
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("^!w","_set1")
HotKeySet("^!e","_set2")
HotKeySet("^!r","_Pause1")
sleep(1000)
$i=1
while 1
if $run then
MouseClick("left",$arKoordinaten[0][0],$arKoordinaten[0][1],1,0)
$oldClip=ClipGet()
ClipPut($arData[$i][0])
Send("^v")
ClipPut($oldClip)
MouseClick("left",$arKoordinaten[1][0],$arKoordinaten[1][1],1,0)
$oldClip=ClipGet()
ClipPut($arData[$i][1])
Send("^v")
ClipPut($oldClip)
$i+=1
if $i=UBound($arData) then
$i=1
endif
endif
sleep(100)
WEndFunc _set1()
[/autoit] [autoit][/autoit] [autoit]
if $run then
$run=false
_getKoords(1)
$run=true
else
_getKoords(1)
endif
EndFuncFunc _set2()
[/autoit] [autoit][/autoit] [autoit]
if $run then
$run=false
_getKoords(2)
$run=true
else
_getKoords(2)
endif
EndFuncFunc _Pause1()
[/autoit] [autoit][/autoit] [autoit]
if $run then
$run=false
else
$run=true
endif
EndFuncFunc _loadData()
[/autoit] [autoit][/autoit] [autoit]
_FileReadToArray($DataPath,$arData,0,"|")
EndFuncFunc _Close()
[/autoit] [autoit][/autoit] [autoit]
exit
EndFuncFunc _getKoords($mode=0)
[/autoit]
if $mode=-1 then
for $i=0 to UBound($arKoordinaten)-1 step 1
while NOT _IsPressed(20)
sleep(50)
ToolTip("Gehen sie mit der Maus an Position "&$i+1&" und drücken sie die Leertaste!")
WEnd
ToolTip("")
$ar=MouseGetPos()
$arKoordinaten[$i][0]=$ar[0]
$arKoordinaten[$i][1]=$ar[1]
while _IsPressed(20)
sleep(50)
ToolTip("Lassen sie die Leertaste los!")
WEnd
ToolTip("")
next
$File=FileOpen($settingsPath,1)
FileClose($File)
$string=""
for $i=0 to UBound($arKoordinaten)-1 step 1
if $i<>0 then
$string&=@lf
endif
$string&=$i+1&"y="&$arKoordinaten[$i][1]&@lf&$i+1&"x="&$arKoordinaten[$i][0]
next
IniWriteSection($settingsPath,"Koords",$string)
else
while NOT _IsPressed(20)
sleep(50)
ToolTip("Gehen sie mit der Maus an Position "&$mode+1&" und drücken sie die Leertaste!")
WEnd
ToolTip("")
$ar=MouseGetPos()
$arKoordinaten[$mode][0]=$ar[0]
$arKoordinaten[$mode][1]=$ar[1]
while _IsPressed(20)
sleep(50)
ToolTip("Lassen sie die Leertaste los!")
WEnd
ToolTip("")
IniWrite($settingsPath,"Koords",$mode+1&"y",$arKoordinaten[$mode][1])
IniWrite($settingsPath,"Koords",$mode+1&"x",$arKoordinaten[$mode][0])
endif
EndFunc -
Probiers doch mal so:
[autoit]Func Example()
[/autoit][autoit][/autoit][autoit]
; Run Notepad
$notepad=Run("notepad.exe"); Wait 10 seconds for the Notepad window to appear.
[/autoit][autoit][/autoit][autoit]
;Local $hWnd = WinWait("[CLASS:Notepad]", "", 10)
WinWait($notepad, "", 10); Activate the Notepad window using the handle returned by WinWait.
[/autoit][autoit][/autoit][autoit]
WinActivate($notepad)
ConsoleWrite( @extended & ", hWnd=" & $notepad & @LF )
;@extended ist 0 und $hWnd ist 1; Close the Notepad window using the handle returned by WinWait.
[/autoit]
WinClose($notepad)
EndFunc ;==>Example -
WinSetOnTop ist dafür gut. Allerdings funktioniert das soweit ich weiß nicht bei DirectX oder OpenGL Programmen..., welche im Vordergrund sind.
-
Es wäre Sinnvoll, die Ini auch zu erstellen
@MyDocumentsDir & "\_ClipSelector.ini"Edit: Mein Fehler. Hatte übersehen, dass IniWrite eine Datei erstellt, falls sie nicht existiert.
-
Gut erkannt!
Sowas überles ich schon aus Gewohnheit -
Ich hab meinen Beitrag mal editiert. Dort steht ein Beispiel, dass alle Verknüpfungen in einer GUI anzeigt und beim Klick startet.
-
Ich weiß jetzt nicht genau, wie dein Quelltext aussieht (nächstes mal am besten die au3 anhängen), aber:
Trag die Pfade in ein Array ein. Dann erstellst du die Buttons nach diesem Array in einer for-Schleife und trägst auch die in ein Array ein.
Beim erstellen der Buttons setzt du das guictrlsetonevent(-1,"_buttonPressed") für alle Buttons.
In der genannten Funktion nutzt du _ArraySearch($buttons,@GUI_CtrlId,0,0,0,0,1,[SubItem]) mit SubItem als die Zahl, wo die Buttons stehen. Die Funktion gibt dir den Index-Wert zurück. Mit diesem fragst du dann in dem Array das andere SubItem ab und dort hast du dann ja den Pfad zur VerknüpfungBeispiel:
Spoiler anzeigen
[autoit]#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <string.au3>
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)$Folder="D:\Desktop\programme\Spiele";FileSelectFolder("Öffne Ordner",@DesktopDir)
[/autoit] [autoit][/autoit] [autoit]
$search=FileFindFirstFile($Folder&"\*.lnk")
$files=@crlf
while @error<>1
$path=FileFindNextFile($search)
$files&=$path&@crlf
WEnd
$arFiles=_StringBetween($files,@crlf,@crlf)
global $arPaths[UBound($arFiles)-1][3]
$gui=GUICreate("test",420,(UBound($arFiles)-1)*25+20)
for $i=0 to UBound($arPaths)-1 step 1
$arData=FileGetShortcut($Folder&""&$arFiles[$i])
$arPaths[$i][0]=$arData[0]
$arPaths[$i][1]=StringReplace($arFiles[$i],".lnk","")
$arPaths[$i][2]=GUICtrlCreateButton($arPaths[$i][1],10,10+$i*25,400)
GUICtrlSetOnEvent(-1,"_ButtonPressed")
next
GUISetOnEvent($GUI_EVENT_CLOSE,"_Close")
GUISetState(@SW_SHOW)while sleep(100)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _ButtonPressed()
[/autoit] [autoit][/autoit] [autoit]
$ID=@GUI_CtrlId
$index=_ArraySearch($arPaths,$ID,0,0,0,0,1,2)
msgbox(48,"",$arPaths[$index][0])
Run($arPaths[$index][0])
EndFuncFunc _Close()
[/autoit]
exit
EndFunc -
Die Dauerschleife ist absichtlich... In dem Beitrag wo der Download im Anhang steht sind doch die kürzel zum beenden :D:D
(STRG+ALT+Q) zum beenden oder (STRG+ALT+R) zum pausieren(wo er sich aufhängt kann ich dir leider so nicht sagen... zeigt er denn die Tooltips für die Koordinten an?) es muss ja 2x die Leertaste gedrückt werden, um beim ersten Start die Koordinaten festzulegen.
-
So ähnlich war es bei mir auch. Immer nach nem Teil suchen. Für komplizierteres googlen. Mittlerweile find ich die meisten Befehle innerhalb kürzester Zeit
-
Ich hab das Programm geschrieben.
Mit der Nachdem die Koordinaten gesetzt wurden kannst du mit STRG+ALT+w die erste Koordinate neu setzen und mit STRG+ALT+e die zweite.
Mit STRG+ALT+r pausierst du das Programm (bei erneutem drücken wird es fortgesetzt).
STRG+ALT+q beendet das Programm.
(Beim setzen der Koordinaten wird natürlich auch pausiert :D)Für die Koordinaten wird eine "settings.ini" genutzt.
Für die Namen, etc. eine "data.txt" mit folgendem Aufbau:Spoiler anzeigen
Name:|Alter:
Max Mustermann|50
Peter M.|30
Beide Dateien befinden sich im selben Verzeichnis, wie das Programm. (Falls du eine andere Daten-Datei nutzen möchtest, lösch einfach die data.txt (wenn sie nicht existiert wird nach einer anderen Datei gefragt).Quellcode:
Spoiler anzeigen
[autoit]#include <Misc.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <File.au3>
#include <array.au3>
Opt("GUIOnEventMode", 1)global $arKoordinaten[2][2],$settingsPath="settings.ini",$DataPath="data.txt",$arData,$run=true
[/autoit] [autoit][/autoit] [autoit]if FileExists($settingsPath) then
[/autoit] [autoit][/autoit] [autoit]
$arKoordinaten[0][1]=IniRead($settingsPath,"Koords","1y",-1)
$arKoordinaten[0][0]=IniRead($settingsPath,"Koords","1x",-1)
$arKoordinaten[1][1]=IniRead($settingsPath,"Koords","2y",-1)
$arKoordinaten[1][0]=IniRead($settingsPath,"Koords","2x",-1)
if $arKoordinaten[0][0]=-1 or $arKoordinaten[0][1]=-1 and $arKoordinaten[1][0]=-1 or $arKoordinaten[1][1]=-1 then
_getKoords(3)
elseif $arKoordinaten[0][0]=-1 or $arKoordinaten[0][1]=-1 then
_getKoords(1)
ElseIf $arKoordinaten[1][0]=-1 or $arKoordinaten[1][1]=-1 then
_getKoords(2)
EndIf
else
_getKoords()
endifif FileExists($DataPath) then
[/autoit] [autoit][/autoit] [autoit]
_loadData()
else
$DataPath=FileOpenDialog("Wähle die Datei, welche die Daten enthält",@DesktopDir,"All (*.*)")
if NOT FileExists($DataPath) then
msgbox(48,"Fehler","Die Datei existiert nicht, oder es wurde keine Datei ausgewählt. Das Programm kann daher nicht fortgeführt werden.")
_Close()
else
_loadData()
endif
endifHotKeySet("^!q","_Close")
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("^!w","_set1")
HotKeySet("^!e","_set2")
HotKeySet("^!r","_Pause1")
sleep(1000)
$i=1
while 1
if $run then
MouseClick("left",$arKoordinaten[0][0],$arKoordinaten[0][1],1,0)
$oldClip=ClipGet()
ClipPut($arData[$i][0])
Send("^v")
ClipPut($oldClip)
MouseClick("left",$arKoordinaten[1][0],$arKoordinaten[1][1],1,0)
$oldClip=ClipGet()
ClipPut($arData[$i][1])
Send("^v")
ClipPut($oldClip)
$i+=1
if $i=UBound($arData) then
$i=1
endif
endif
sleep(100)
WEndFunc _set1()
[/autoit] [autoit][/autoit] [autoit]
if $run then
$run=false
_getKoords(1)
$run=true
else
_getKoords(1)
endif
EndFuncFunc _set2()
[/autoit] [autoit][/autoit] [autoit]
if $run then
$run=false
_getKoords(2)
$run=true
else
_getKoords(2)
endif
EndFuncFunc _Pause1()
[/autoit] [autoit][/autoit] [autoit]
if $run then
$run=false
else
$run=true
endif
EndFuncFunc _loadData()
[/autoit] [autoit][/autoit] [autoit]
_FileReadToArray($DataPath,$arData,0,"|")
EndFuncFunc _Close()
[/autoit] [autoit][/autoit] [autoit]
exit
EndFuncFunc _getKoords($mode=0)
[/autoit]
if $mode<>2 then
while NOT _IsPressed(20)
sleep(50)
ToolTip("Gehen sie mit der Maus an Position 1 und drücken sie die Leertaste!")
WEnd
ToolTip("")
$ar=MouseGetPos()
$arKoordinaten[0][0]=$ar[0]
$arKoordinaten[0][1]=$ar[1]
endif
while _IsPressed(20)
sleep(50)
ToolTip("Lassen sie die Leertaste los!")
WEnd
ToolTip(" ")
if $mode<>1 then
while NOT _IsPressed(20)
sleep(50)
ToolTip("Gehen sie mit der Maus an Position 2 und drücken sie die Leertaste!")
WEnd
ToolTip("")
$ar=MouseGetPos()
$arKoordinaten[1][0]=$ar[0]
$arKoordinaten[1][1]=$ar[1]
endif
if $mode=0 then
$File=FileOpen($settingsPath,1)
FileClose($File)
IniWriteSection($settingsPath,"Koords","1y="&$arKoordinaten[0][1]&@lf&"1x="&$arKoordinaten[0][0]&@lf&"2y="&$arKoordinaten[1][1]&@lf&"2x="&$arKoordinaten[1][0]&@lf)
else
IniWrite($settingsPath,"Koords","1y",$arKoordinaten[0][1])
IniWrite($settingsPath,"Koords","1x",$arKoordinaten[0][0])
IniWrite($settingsPath,"Koords","2y",$arKoordinaten[1][1])
IniWrite($settingsPath,"Koords","2x",$arKoordinaten[1][0])
endif
EndFuncViel Spaß damit!