Tratsch rund um Autoit / Autoit Talk | kleinere Fragen

03/06/2013 20:59 Requi#946
Ja. Ist von da.
Da mich das anpisst in AutoIt es nicht so einfach zu haben, kam mir die Idee :D
Aber kann nicht GetResponse nutzen, da AutoIt keine identische Func Namen zulässt -.-"

mache einfach:
GET()
POST()
03/06/2013 21:15 lolkop#947
Quote:
Originally Posted by »AppleJack™ View Post
Ja. Ist von da.
Da mich das anpisst in AutoIt es nicht so einfach zu haben, kam mir die Idee :D
Aber kann nicht GetResponse nutzen, da AutoIt keine identische Func Namen zulässt -.-"

mache einfach:
GET()
POST()
das problem ist, das du auf socketbasis arbeitest.
du kannst einen vorhandenen socket auf incoming packets checken, oder selbst welche senden.

da du beides dauerhaft machen willst, ist es absoluter nonsense das was du hast zu realisieren, da du mit einer schleife, in der nur eine aktion durchgeführt wird, dein script blockieren würdest.
03/06/2013 21:59 Requi#948
Da läuft nix inner Schleife.

Mir fällt auf, dass der Code selbst nur 8 Zeilen lang ist. Also die 2 Funktionen.

Lohnt es sich trotzdem es zu releasen?
03/07/2013 00:16 lolkop#949
Quote:
Originally Posted by »AppleJack™ View Post
Da läuft nix inner Schleife.

Mir fällt auf, dass der Code selbst nur 8 Zeilen lang ist. Also die 2 Funktionen.

Lohnt es sich trotzdem es zu releasen?
mich würde einmal interessieren, wie du es schaffst den content einer seite zu empfangen, ohne auf das downloaden des contents zu warten.
03/10/2013 19:53 Achat#950
Hi, ich habe mit AutoIt meine Windows 7 Sidebar erweitert.
Dazu verwende ich eine $WS_POPUP GUI.
Wenn ich nun Windows & D drücke (Desktop anzeigen), wird meine GUI minimiert, die Windows Sidebar wird aber weiterhin angezeigt.
Wie kann ich verhindern, dass meine GUI beim Drücken von Win&D verschwindet?
Die GUI soll nur auf dem Desktop zu sehen sein, also kommt WinSetOnTop nicht infrage.

Beispiel GUI:
Code:
#include <WindowsConstants.au3>
$gui=GUICreate('gui',100,100,500,500,$WS_POPUP)
$label=GUICtrlCreateLabel('test',0,0)
GUISetState()
while 1
	Sleep(100)
WEnd
MfG
03/10/2013 22:26 lolkop#951
Quote:
Originally Posted by Achat View Post
Hi, ich habe mit AutoIt meine Windows 7 Sidebar erweitert.
Dazu verwende ich eine $WS_POPUP GUI.
Wenn ich nun Windows & D drücke (Desktop anzeigen), wird meine GUI minimiert, die Windows Sidebar wird aber weiterhin angezeigt.
Wie kann ich verhindern, dass meine GUI beim Drücken von Win&D verschwindet?
Die GUI soll nur auf dem Desktop zu sehen sein, also kommt WinSetOnTop nicht infrage.

Beispiel GUI:
Code:
#include <WindowsConstants.au3>
$gui=GUICreate('gui',100,100,500,500,$WS_POPUP)
$label=GUICtrlCreateLabel('test',0,0)
GUISetState()
while 1
	Sleep(100)
WEnd
MfG
am besten du schaust ständig was gerade aktiv ist... lass dir am besten mal die klassen ausgeben, die aktiv sind, wenn windows+d gedrückt wird...

von windows 8 ausgehend kann ich sagen das es folgende sind:
Code:
WorkerW
SHELLDLL_DefView
SysListView32
SysHeader32
klicke ich einfach so auf den desktop, so erhalte ich
Code:
Program Manager
als einzigen treffer...

ergo sollte es reichen per stringinstr auf WinGetClassesList('[active]') auf treffer aus den listen zu prüfen und im treffer fall die gui in den vordergrund zu packen.

alternativ (vllt sogar besser) könntest du auch versuchen die ganze gui als child vom desktop zu erstellen. weis aber nicht in wiefern das möglich und rechtetechnisch aussehen würde.
03/11/2013 14:11 Achat#952
€DIT: GELÖST

Code:
	If _IsPressed('5B', $hUser32DLL) And _IsPressed(44, $hUser32DLL) Then
		GUISetState(@SW_HIDE, $FormWidget)
		GUISetState(@SW_SHOW, $FormWidget)
	EndIf
Einfach in die GUI-Schleife mit einfügen oder Adlibregister verwenden.

MfG
03/13/2013 14:48 Achat#953
Quote:
Originally Posted by lolkop View Post
verfügbarkeiten sollten immer ausserhalb von schleifen gesetzt werden...
Quote:
Originally Posted by Achat View Post
Bei mehreren verschachtelten For-Schleifen mit mehreren tausend Durchläufen sollte das schon eine Geschwindigkeitssteigerung geben
Quote:
Originally Posted by lolkop View Post
in deinem beispielcode, hattest du die variablen deklaration in einer endlosschleife laufen. wenn man bedenkt, das hier jede verzögerung die gesamt-"flüssigkeit" deines programms beeinträchtigt, und in der hauptschleife schnell mal viele tausend befehle ausgeführt werden können, ist es extrem wichtig jeden möglichen überflüssigen befehl zu vermeiden.

sämtliche delays über 100-200ms sind für den user mit bloßem auge sichtbar.

dementsprechend sollte ein schleifendurchlauf der hauptschleife möglichst immer unter 100ms dauern.
Habt ihr auch versehentlich *hust* Variablen in Schleifen, etc. deklariert?
Zu viel Code und keine Lust, das alles manuell zu korrigieren? (besonders bei MustDeclareVars )
Dann ist das hier genau das Richtige für euch:

Code:
#include <Array.au3>
_VarExtract()

; #FUNCTION# ====================================================================================================================
; Name ..........: _VarExtract
; Description ...: Extract declared Variables and puts them on top
; Parameters ....: $sData  (Default =  Default)
; Return values .: none (ClipPut)
; Author ........: Achat
; Remarks .......: Use at your own risk.
; ===============================================================================================================================
Func _VarExtract($sData = Default)
	If IsKeyword($sData) Then $sData = ClipGet()
	Local $aRegExp = StringRegExp($sData, '(?i)(?:(?:global|local|const|static|enum)+\s)+(?:\$\w+[^\[][,\s]+)+', 3)
	If Not IsArray($aRegExp) Then Return SetError(1, 0, 0)
	Local $iDeclared = UBound($aRegExp)
	_ArraySortByLength($aRegExp)
	For $i = 0 To UBound($aRegExp) - 1
		$sData = StringReplace($sData, $aRegExp[$i], StringRegExpReplace($aRegExp[$i], '(?i)(global|local|const|static|enum)', ''), 0, 1)
		$aRegExp[$i] = StringRegExpReplace($aRegExp[$i], '\s*$', '')
	Next
	$aRegExp = _ArrayUnique($aRegExp)
	_ArraySort($aRegExp)
	ClipPut(_ArrayToString($aRegExp, @CRLF, 1) & @CRLF & $sData)
	MsgBox(0, 'Done', $iDeclared & ' variables declared, ' & UBound($aRegExp) - 1 & ' unique.' & @CRLF & 'Now go back to your script and press Ctrl+V.')
EndFunc   ;==>_VarExtract

; #FUNCTION# ====================================================================================================================
; Name ..........: _ArraySortByLength
; Description ...: Sort an 1D-Array by length
; Parameters ....: ByRef $aArray
; ...............: $iDescending  (Default = 1) - 1 - Sort descending
; ...............: $iStart       (Default = 0) - Index of array to start sorting at
; ...............: $iEnd         (Default = 0) - Index of array to stop sorting at
; Return values .: sorted array
; Author ........: Achat
; Remarks .......: requires #include <Array.au3> (Function _ArraySort)
; ===============================================================================================================================
Func _ArraySortByLength(ByRef $aArray, $iDescending = 1, $iStart = 0, $iEnd = 0)
	If Not IsArray($aArray) Then Return SetError(1, 0, 0)
	If UBound($aArray, 0) <> 1 Then Return SetError(2, 0, 0)
	Local $aSort[UBound($aArray)][2]
	For $i = 0 To UBound($aSort) - 1
		$aSort[$i][0] = $aArray[$i]
		$aSort[$i][1] = Int(StringLen($aArray[$i]))
	Next
	_ArraySort($aSort, $iDescending, $iStart, $iEnd, 1)
	For $i = 0 To UBound($aSort) - 1
		$aArray[$i] = $aSort[$i][0]
	Next
	Return $aArray
EndFunc   ;==>_ArraySortByLength
Anleitung:
Mein Script und euer Script öffnen, in eurem Script den Teil markieren, der korrigiert werden soll, danach mein Script ausführen, daraufhin zurück in euer Script wechseln und den markierten Teil mit Strg+V überschreiben.
Die Variablen befinden sich nun ganz oben.

Beispiel:
Code:
;Vorher
Func _LOL()
	While 1
		Local $LOL = True
		For $i = 0 To 100
			Local $LOL = False
		Next
		Local $LOL = 12345
		Local $LOL -= 10
	WEnd
EndFunc   ;==>_LOL

;Nachher
Func _LOL()
Local $LOL
	While 1
		 $LOL = True
		For $i = 0 To 100
			 $LOL = False
		Next
		 $LOL = 12345
		 $LOL -= 10
	WEnd
EndFunc   ;==>_LOL
MfG
03/17/2013 17:51 butter123#954
moin leute,

wollte mir nen kleinen bot für titan quest schreiben. das problem ist nur, dass hotkeys nicht funktionieren. dh die funktion wird wenn das spiel aktiv ist nicht ausgeführt. aufm desktop klappts. ein hackshield hat das spiel nicht.
03/17/2013 18:37 Achat#955
Das Spiel blockiert die Hotkeys. Benutze stattdessen [Only registered and activated users can see links. Click Here To Register...]

MfG
03/18/2013 02:58 playerXD97#956
kleine frage, wenn ich in meine Inputbox($Input1) eine Zahl eingebe,soll wenn ich "OK" drücke Entweder die Schleife beendet oder wiederholt werden bis sie richtig ist allerdings ist der Wert irgendwie immer 3.
Hab schon Number und Int ausprobiert aber geht alles nicht der Wert bleibt immer 3 -.-
Code:
$Form1 = GUICreate("User-ID", 216, 152, -1, -1, BitOR($WS_SYSMENU,$WS_POPUP))
GUISetIcon("C:\Windows\System32\shell32.dll", -78)
GUISetBkColor(0x74A402)
$Input1 = GUICtrlCreateInput("", 47, 55, 121, 23, BitOR($GUI_SS_DEFAULT_INPUT,$ES_NUMBER))
GUICtrlSetLimit(-1, 8)
GUICtrlSetFont(-1, 8, 400, 0, "Gill Sans Ultra Bold Condensed")
$Label1 = GUICtrlCreateLabel("Bitte trage hier deine User-ID ein:", 9, 23, 197, 23, $SS_CENTER)
GUICtrlSetFont(-1, 10, 400, 0, "Gill Sans Ultra Bold Condensed")
$Button1 = GUICtrlCreateButton("OK", 24, 103, 75, 25)
GUICtrlSetFont(-1, 10, 400, 0, "Gill Sans Ultra Bold Condensed")
$Button2 = GUICtrlCreateButton("Abbrechen", 112, 103, 75, 25)
GUICtrlSetFont(-1, 10, 400, 0, "Gill Sans Ultra Bold Condensed")
GUISetState(@SW_SHOW)

   While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
		 Case $BUtton1
		
			If $Input1 <1 Then
			   MsgBox(0,"Fehler","Bitte gültige ID eingeben"& $Input1)
			   ContinueLoop
			   
			ElseIf $Input1 > 1 Then
			   ExitLoop
			  
		   Else
			  If $Input1 = @error Then
			   Exit
			EndIf
		 EndIf
		 Case $BUtton2
			Exit
			   
	  EndSwitch
WEnd

While 2
  
   ToolTip("Hello",0,0)

   WEnd
Danke :handsdown:
03/18/2013 06:33 Requi#957
If GuiCtrlRead($Input1) < 1


GUI Objekte liest man mit GuiCtrlRead() aus ;)
03/18/2013 09:23 -STORM-#958
While 2 ist Quatsch.
Die Zahl hinter While ist eigentlich eine Bool'sche Variable, d.h. sie kann True oder False sein.
Da AutoIt es mit den Datentypen nicht so genau nimmt, kann man auch Integer (also normale Zahlen) o.ä. angeben.
Diese sind wiederum immer True, wenn sie ungleich 0 sind.
D.h. "While 1" bedeutet dasselbe wie "While 2" oder "While True", nämlich dass diese Schleife dauerhaft ausgeführt wird.

Alles, was nach dieser Schleife kommt, wird also nie erreicht (außer natürlich über ExitLoop, aber es sieht irgendwie nicht aus, als wäre das Absicht).

Verlässt du aber durch ExitLoop die Schleife, die bestimmten Events der GUI, also z.B. Klicks auf Buttons, Funktionen zuweist, kannst du sie nicht mehr benutzen. Die Buttons etc. bewirken dann nichts mehr.
03/18/2013 11:40 playerXD97#959
Geht immer noch nicht..
Quote:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIResizeMode", $GUI_DOCKHCENTER+$GUI_DOCKVCENTER)
Opt("GUIResizeMode", $GUI_DOCKHCENTER+$GUI_DOCKVCENTER)
Opt("GUIResizeMode", $GUI_DOCKHCENTER+$GUI_DOCKVCENTER)
$Form1 = GUICreate("User-ID", 216, 152, -1, -1, BitOR($WS_SYSMENU,$WS_POPUP))
GUISetIcon("C:\Windows\System32\shell32.dll", -78)
GUISetBkColor(0x74A402)
$Input1 = GUICtrlCreateInput("", 47, 55, 121, 23, BitOR($GUI_SS_DEFAULT_INPUT,$ES_NUMBER))
GUICtrlSetLimit(-1, 8)
GUICtrlSetFont(-1, 8, 400, 0, "Gill Sans Ultra Bold Condensed")
$Label1 = GUICtrlCreateLabel("Bitte trage hier deine User-ID ein:", 9, 23, 197, 23, $SS_CENTER)
GUICtrlSetFont(-1, 10, 400, 0, "Gill Sans Ultra Bold Condensed")
$Button1 = GUICtrlCreateButton("OK", 24, 103, 75, 25)
GUICtrlSetFont(-1, 10, 400, 0, "Gill Sans Ultra Bold Condensed")
$Button2 = GUICtrlCreateButton("Abbrechen", 112, 103, 75, 25)
GUICtrlSetFont(-1, 10, 400, 0, "Gill Sans Ultra Bold Condensed")
GUISetState(@SW_SHOW)

While
$nMsg = GUIGetMsg()
Switch $nMsg
Case $BUtton1

If GuiCtrlRead($Input1) < 10000 Then
MsgBox(0,"Fehler","Bitte gültige User-ID eingeben"& $Input1)
ContinueLoop

ElseIf GuiCtrlRead($Input1) < 10000 Then
ExitLoop

Else
If GuiCtrlRead($Input1) = @error Then
Exit
EndIf
EndIf
Case $BUtton2
Exit

EndSwitch
WEnd

While

ToolTip("Hello",0,0)

WEnd
Kommt mal wieder 3 raus
03/18/2013 12:20 Requi#960
Du hast deine If-Abfrage auch komplett verändert.

Trotzdem immer GuiCtrlRead()