Na klar, das ist ja auch ein $GUI_EVENT_CLOSE für das Zweite GUI angegeben (Zeile 26 ff.).
Beiträge von SEuBo
-
-
Da könntest du ja genausogut fragen, wie der OnEventmdous funktioniert. Immerhin macht er das selbe mit klicks auf GUI elemente.
Ich denke einfach, dass da ein KeyBoardhook verwendet wird, der einfach immer abgefragt wird. Bin mir aber natürlich über die internen AutoIt Vorgänge nicht klar, deswegen kann ich nur raten.Ich bin da ganz froh drüber - denn so kann man sein script immer beenden, auch wenn es in einer Funktion/Endlosschleife festhängt.
-
Heute läuten schon wieder meine Bot Alarmglocken...
Erklär uns mal welchen Sinn und Zweck das ganze haben soll. -
Und für welches Spiel wird das nun wieder ein Bot?
-
is das mit dem zeilenumbruch noch net perfekt
Mit welchem Text hast du das ausprobiert? ich habe das System, mit dem die Zeilen umgebrochen werden, gestern extra noch umgeschrieben.
-
Hallo,
Im Anhang eine MsgBox() Alternative. (Ich weiß, die gibts wie Sand am Meer)
Da ich oft nur MsgBox(0,"","") verwende, brauchte ich ein eigenes MsgBox (schreibfaul... 20x '0,"",' können schon nervig sein. Als kleinen "Bonus" kann man sich aussuchen, ob die MsgBox das script pausieren soll oder nicht.Habe versucht so nah wie möglich an der "echten" MsgBox dran zu bleiben. Deshalb keine Color-Spielerie.
Hab zwar getsetet, aber wenn sich doch noch bugs einschleichen, wär ich froh wenn man mir die melden könnte.
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
$DUMMY = GUICreate("")Func _MsgBox($sText, $sTitle = "", $iWait=1, $x = -1, $y = -1)
[/autoit] [autoit][/autoit] [autoit]
;=================================================================================================
; Function: _MsgBox($sText[,$sTitle[,$iWait[,$x[,$y]]]])
; Description: Create your very own MsgBox, which does not pause your script (if you dont want it)
; Beschreibung: Erstelle deine eigene MsgBox, die dein Script nicht pausiert, wenn du es nicht willst
;
; Parameter(s): $sText - Your Msgbox' text. | Dein MsgBox-Text
; $sTitle - (optional) Sekect an title for you MsgBox | Weise deiner MsgBox einen Titel zu.
; $iWait - (optional) Determines, weither the MsgBox shall pause (1 ; [default]) or continue your script (0)
; Gibt an, ob die MsgBox die Ausfürhung des Scriptes pausieren (1 ; [Standard])
; oder weiterlaufen lassen soll (0)
; $x - (optional) Your MsgBox's $x position. -1 = centered (default)
; $x-Koordinaten deiner MsgBox. -1 = Zentriert (standard)
; $y - (optional) Your MsgBox's $y position. -1 = centered (default)
; $y-Koordinaten deiner MsgBox. -1 = Zentriert (standard)
;
; Requirement(s): Valid parameters
; _GetTextSize() -> _GDIPlus.au3
;
;
; Return Value(s): $iWait = 1 - True after MsgBox was closed.
; $iWait = 1 - True, nachdem die MsgBox geschlossen wurde
;
; $iWait = 0 - Returns 1D-Array Containing MsgBox' GUI Handle and "OK" Button ID
; $iWait = 0 - Gibt 1D-Array zurück, der das GUI Handle sowie "OK" Button ID der _MsgBox enthält
;
;
;
; Author(s): SEuBo (http://www.autoit.de)
; Note(s):
;=================================================================================================
IF $iWait > 1 Or $iWait < 0 Or $x < -1 Or $y < -1 Then Return
Local $iTrim = 70, $sNewText, $iStart = 0, $oldhWnd = GUISwitch($DUMMY), $Ltop = 26
While StringLen($sText) > $iStart + $iTrim
Do
$iTrim -= 1
$sNewTextTmp = StringStripWS(StringMid($sText, $iStart+1,$iTrim), 1)
Until StringRight($sNewTextTmp,1) = " " OR StringRight($sNewTextTmp,1) = "," OR StringRight($sNewTextTmp,1) = "." OR StringRight($sNewTextTmp,1) = "!"
$iStart += $iTrim
$sNewText &= $sNewTextTmp & "|"
WEnd
$sNewText &= StringStripWS(StringTrimLeft($sText, $iStart), 1)
$aNewText = StringSplit($sNewText, "|")
Local $LWidth=0,$LHeight=0
If $aNewText[0] > 0 Then
$aSize = _GetTextSize($aNewText[1],9.6)
If $aSize[0] < 125 Then $aSize[0] = 125
Local $LWidth=$aSize[0],$LHeight=$aSize[1]
EndIf
$hGUI = GUICreate($sTitle, $LWidth+15, 127 + (15 * $aNewText[0]), $x, $y, BitOR(0x00000080, 0x00080000, 0x00400000))
GUISetFont(9.6)
For $i = 1 To $aNewText[0]
GUICtrlCreateLabel($aNewText[$i], 12, $Ltop, 435 - 24, 15)
$Ltop += 15
Next
GUICtrlCreateLabel(" ", 0, $Ltop + 30, $LWidth+15, (127 + (15 * $aNewText[0])) - ($Ltop + 30))
GUICtrlSetState(-1, 128)
GUICtrlSetBkColor(-1, 0x00F0F0F0)
GUISetBkColor(0xFFFFFF)
$btn_Ok = GUICtrlCreateButton("OK", $LWidth-100, $Ltop + 43, 100, 25)
GUISetState()
DllCall("user32.dll", "int", "MessageBeep", "int", 0x0)
Switch $iWait
Case 0
Local $_iMsgBox_aRet[2] = [$hGUI,$btn_Ok]
GUISwitch($oldhWnd)
Return $_iMsgBox_aRet
Case 1
$iGetMsg = Opt("GUIOnEventMode",0)
Do
$nMsg = GUIGetMsg()
Sleep(10)
Until $nMsg = -3 Or $nMsg = $btn_Ok
GUIDelete($hGUI)
GUISwitch($oldhWnd)
Opt("GUIOnEventMode",$iGetMsg)
Return True
EndSwitch
EndFuncFunc _GetTextSize($nText, $iFontSize = 8.5, $sFont = 'Microsoft Sans Serif', $iFontAttributes = 0)
[/autoit]
;Author: Bugfix
;Modified: funkey
If $nText = '' Then Return
Local $hGUI = GUICreate("Textmeter by Bugfix")
_GDIPlus_Startup()
Local $hFormat = _GDIPlus_StringFormatCreate(0)
Local $hFamily = _GDIPlus_FontFamilyCreate($sFont)
Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontAttributes, 3)
Local $tLayout = _GDIPlus_RectFCreate(15, 171, 0, 0)
Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $nText, $hFont, $tLayout, $hFormat)
Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
GUIDelete($hGUI)
Local $aSize[2] = [$iWidth, $iHeight]
Return $aSize
EndFunc ;==>_GetTextSizeBesten Dank an BugFix und Funkey ; _GetTextSize ist eine der geilsten Funktionen die ich je hatte
-
Warum postest du nicht einfach dein Script, statt einer ellenlangen Erklärung? Daraus kann man mehr Fehler erkennen als aus deinem Text
-
Herzlich Willkommen
-
[autoit]
GUICtrlSetResizing()
[/autoit] -
Laufwerk umbenennen geht so:
[autoit]Func _RenameDrive($sDrive,$sNewDriveName)
[/autoit]
Local $sScript = "", $stdout = ""
$sScript &= "select Volume " & $sDrive & @CRLF
$sScript &= "assign LETTER="&$sNewDriveName & @CRLF
FileDelete(@TempDir&"\diskpart.txt")
FileWrite(@TempDir&"\diskpart.txt",$sScript)
$cmd = 'diskpart /s ' & @TempDir & '\diskpart.txt'
Run(@ComSpec & " /c " & $cmd, "", @SW_HIDE)
EndFuncZurückumbenennen ist aber bis zum nächsten neustart nicht drin!
-
ch glaube bei dir fehlen noch die "Then".
Tut mir leid hatte es auf die Schnelle im Browser geschrieben und deswegen nicht getestet
-
Oder du benutzt folgende Funktion:
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]
;string rückgabe
$input = _InputBox(3,"Hallo","Ich stehe in Lable 1|Ich in Lable 2|Und ich in Lable3","Hallo|Wie|Gehts?",1)
MsgBox(0,"",$input);Array rückgabe
[/autoit] [autoit][/autoit] [autoit]
$aInput = _InputBox(3,"Hallo","Ich stehe in Lable 1|Ich in Lable 2|Und ich in Lable3","Hallo|Wie|Gehts?")
_ArrayDisplay($aInput)Func _InputBox($iCount,$sTitle,$sText,$sDefault,$iMode=0,$sDelim="|")
[/autoit] [autoit][/autoit] [autoit]
;Author: SEuBo
;$iCount: Anzahl der "Inputgruppen"
;$sTitle: Titel der _InputBox
;$sText: Text für die einzelnen Gruppen. Hier wird ein Trennzeichenseperierter String benötigt
;BSP: "1|2|3". Das Trennzeichen kann in $sDelim selbst bestimmt werden, falls das erwünscht ist
;$sDefault: Default-Text für die Input felder. Hier wird wieder ein seperierter String benötigt.
;$iMode: Der Rückgabemodus. 0 (Standard) = Array. 1 = mit $sDelim seperierter String.$OnEvent = Opt("GUIOnEventMode",0)
[/autoit]
Local $aData[$iCount+1][2], $ifCount = 0, $aText = StringSplit($sText,$sDelim), $aDefault = StringSplit($sDefault,$sDelim)
If $iCount = "" OR $iCount < 1 OR $iMode < 0 OR $iMode > 1 OR $sDelim = "" Then
Return SetError(2,0,"")
EndIf
If $aDefault[0] < $iCount+1 Or $aDefault[0] > $iCount+1 Then
ReDim $aDefault[$iCount+1]
EndIf
If $aText[0] < $iCount+1 Or $aText[0] > $iCount+1 Then
ReDim $aText[$iCount+1]
EndIf
$_InputBox = GUICreate($sTitle,220,65+$iCount*95,-1,-1,-1,0x00000008)
For $i = 1 to $iCount
$aData[$i][0] = GUICtrlCreateLabel($aText[$i], 20, ($ifCount*95)+20, 180, 50)
$aData[$i][1] = GUICtrlCreateInput($aDefault[$i], 20, ($ifCount*95)+75, 180, 25)
$ifCount +=1
Next
$hButton = GUICtrlCreateButton("Absenden",60,(($ifCount-1)*95)+110,100,25)
GUISetState()
While 1 * Sleep(50)
$nMsg = GUIGetMsg()
Switch $nMsg
case -3
GUIDelete($_InputBox)
Return SetError(1,0,"")
Case $hButton
Switch $iMode
Case 0
Local $aRet[$iCount]
For $i = 1 to $iCount
$aRet[$i-1] = GUICtrlRead($aData[$i][1])
Next
GUIDelete($_InputBox)
Return $aRet
Case 1
Local $aRet
For $i = 1 to $iCount
$aRet &= GUICtrlRead($aData[$i][1]) & $sDelim
Next
GUIDelete($_InputBox)
Return StringTrimRight($aRet,1)
EndSwitch
EndSwitch
WEnd
Opt("GUIOnEventMode",$OnEvent)
EndFunc -
Ich glaube, du versuchst das hier zu machen, oder?
[autoit]$nMsg = GUIGetMsg()
[/autoit]
Switch $nMsg
Case -3
Exit
Case $Button
If BitAND(GUICtrlRead($radio1), $GUI_CHECKED) = $GUI_CHECKED
$Auswahl = 1
Elseif BitAND(GUICtrlRead($radio2), $GUI_CHECKED) = $GUI_CHECKED
$Auswahl = 2
ElseIf BitAND(GUICtrlRead($radio3), $GUI_CHECKED) = $GUI_CHECKED
$Auswahl = 3
ElseIf BitAND(GUICtrlRead($radio4), $GUI_CHECKED) = $GUI_CHECKED
$Auswahl = 4
EndIf
EndSwitch -
Werde ich alles 3 bis morgen umsetzen.
Danke für die IdeenKurze Frage noch:
Lieber MsgBox, TrayTip oder Statusbar was das laden angeht?Statusbar oder TrayTip. MsgBoxen sind nervig.
-
Wo kann man das denn auf die linke Seite packen?
mfg Ubuntu
Bei mir ist es standardmäßig auf der linken Seite.
-
Damit erstellst du eine Variable. Du kannst es auch weglassen, aber du wirst den "Handle", der in der Variable gespeichert ist mit Sicherheit brauchen, um die GUI später anzusteuern. zb WinMove oder sonstwas.
Du solltest vielleicht mal ein paar Tutorials durcharbeiten
zb dieses hier:
http://wiki.autoit.de/wiki/index.php/Tutorial -
Häng das mal bitte als ganzes Script an. bei mir wird bei Zeile 1100+ abgeschnitten.
-
Hey. Du musst die GUI dann auch sichtbar machen
[autoit]
Das geht mitGUISetState(@SW_SHOW)
[/autoit]Das ganze geht auch in ohne @SW_SHOW, also nur GUISetState().
[autoit]
[/autoit][autoit][/autoit][autoit]
$hGUI = GUICreate("GUI")
GUISetState()While 1
[/autoit]
WEndDamit du die GUI auch schließen kannst musst du die GUI-Msg abfragen. Das geht per GUIGetMsg()
[autoit]#include <GUIConstantsEx.au3>
[/autoit][autoit][/autoit][autoit]
$hGUI = GUICreate("")
GUISetState()While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd -
Was ich gerne mal probieren möchte ist das über Listen zu machen Klick mich nur muß ich ehrlich sagen das ich keinen blassen schimmer davon habe wie man das umsetzen kann. Verstehe das da noch nicht mal im Ansatz.
BugFix hatte dafür schon eine UDFgemacht. Die Funktionen sind eigentlich selbsterklärend.
-
aha, die DLL brauch ich nur einzubinden und nach dem erstellen einer exe ist auch diese funktion voll kompatibel? (win9x - XP/Vista)DIe DLL muss immer mit dem Script mitgegeben werden. Das lässt sich per Fileinstall oder Binärinstall ohne Probleme verwirklichen. Iniwieweit das abwärtskompatibel ist, kann ich dir nicht sagen. Aber 9x wird schwer - nichtmal Autoit bietet noch vollständigen Support dafür. Probier es halt aus.
Du selbst musst keine DLL einbinden. das macht ja die UDF für dich.
Aber, auf welches Fenster bezieht sich die funktion? Kann man auch beliebige Fenster durchsuchen?
[autoit]
Immer auf den von dir angegebenen Bereich des kompletten Bildschirms.
2 möglichkeiten die mir spontan einfallen:WinGetPos; um die Position des Fensters zu bestimmen
[/autoit]
;oder
Opt("PixelCoordMode",2)