so ich hab einen neuen bot programmmiert (Spiel archlord, is aber eig egal) und das problem ist, dass controlsend() meistens nicht funktioniert, ganz selten aber iwie dann doch. Der Rest des Codes funktioniert soweit(HWND, keys, auch winsettitle) Außerdem funktioniert controlsend() noch, wenn man es als kontrollfunktion direkt nach der variablendeklaration ausführt. Hier mal der Code, vllt hat jemand ne Idee
PHP Code:
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Add_Constants=n
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Opt("WinTitleMatchMode", 3)
Dim $inidatei
Dim $Dll = DllOpen("ACEGGMemReader.dll")
Dim $pause = True
Dim $HWND
Dim $PID
Dim $process
Dim $targethp
Dim $skills[9][4]; 9skills mit 1.key u. 2. cooldown 3.timerstop 4.duration
Dim $title = "botting"
Dim $attached = False
Dim $result
Dim $i
While 1
If Not $pause Then
_buffcheck()
_attack()
Else ; Or wait
Sleep(1000)
ControlSend("Archlord", "", "", "{F1}")
EndIf
WEnd
danke aber hab ich schon ausprobiert und ist denke ich auch nicht das problem, denn das spiel zeigt auch tastenanschläge an, die zu kurz sind um wirklich skills etc auszulösen
also es ist nicht so, dass bei dem Spiel controlsend() nicht funktioniert, da ich bereits bots programmiert habe, die funktioniern. Es liegt iwie am code dieses scripts
Moep sry falls ich das jetzt fasch verstanden hab, ansonsten kannst du mir das vllt nochmal genauer erklären?
Wieso liest du immer wieder das Handel vom Aktivem Fenster aus. Setze doch einfach mal den Fensternamen ein. Vorallem wieso solltest du das Handel vom Aktiviertem Fenster auslesen, wenn du sowieso mit Control befehlen arbeitest.
Ich lese doch nur einmal HWND aus und zwar wenn ich F4 drücke und damit dem Bot ein Fenster zuweise. Außerdem kann ich nicht einfach den Fensternamen nehmen, da ich mehrere habe. Und schließlich weiß ich auch nicht, was dagegen spricht, HWND zu nehmen. Ich dachte das wär der sicherste Weg?
Achso hab mich verkuggt :P
Also die einzigen ideen, die ich hätte wären die von Ludder und Moep, da ich soweit keinen Fehler sehe.
Oder gibt es immer bestimmte Punkte, wo es nicht geht?
Hast du es schonmal probiert mit einem Fenster und dem Handel bezogen durch den Fenstertitel?
ja das macht keinen Unterschied, und der Handle wird ja auch immer richtig ausgelesen
so grad hat es außerdem mal wieder funktioniert, ohne dass ich irgendetwas verändert habe
Ich würd ja gern mal die postmessageUDF ausprobiern, aber der Download ist irgendwie kaputt.
so also wenn ich das ganze mit 64bit ausführe oder compilieren will, meckert der rum:
Quote:
error: subscript used with non-array variable
und bezieht sich dabei auf $result[0], womit ich die Rückgabewerte der dll auslese. Wenn ich einfach $result schreibe und damit den Fehler provisorisch behebe, kommen die keys zwar an, aber ich bekomm halt beim $result nur 0 raus. Wie bekomm ich jetzt die werte, ohne dass er meckert?
Probier mal das handle des derzeit aktivierten fensters mit der funktion die ich hier grad zusammengebastelt habe herrauszufinden.
Code:
#Include <Array.au3>
HotKeySet("{SPACE}","getHwndActiveWindow")
Global $aWinList, $title, $hwnd
While 1
Sleep(100)
WEnd
Func getHwndActiveWindow()
$aWinList = WinList()
_ArrayDisplay ($aWinList)
For $i = 1 To $aWinList[0][0]
If WinActive($aWinList[$i][1]) Then
$title = $aWinList[$i][0]
$hwnd = $aWinList[$i][1]
ExitLoop
EndIf
Next
MsgBox("","","title:"&$title&@CRLF&"hwnd: "&$hwnd)
EndFunc
Der Download hat bei mir auch nicht funktioniert, deshalb hab ich weiter hinten in den tread die funktion nochmal in einer anderen Version hingepackt, probier die mal. Ansonsten google/suche einfach mal nach postmessage.
danke für dein mühe moep
aber die HWND wird ja richtig abgelesen
da nun controlsend ja im 64bit modus funktioniert, müsste ich jetzt nur iwie die werte der dllfunktionen rauskriegen
ahh... jetzt hab ich deinen Code erstmal richtig gelesen, Du willst die HP des Gegners auslesen und dann angreifen, richtig? Bekommst du denn mit deiner "komischen " Funktion einen ordentlichen wert raus? Pack mal zum Debuggen ne msgbox nach den auslesen rein.
Prinzipiell würde ich den Wert aber so auslesen:
Code:
#include <nomadmemory.au3>
Global $winName = "abcd"
Global $enemyHp
Global $PID = _MemoryOpen(WinGetProcess($winName))
If @error then
MsgBox("", "ERROR", $winName & " doesnt exist")
Exit
EndIf
While 1
$enemyHp = _MemoryRead(_MemoryRead(_MemoryRead(_MemoryRead(_MemoryRead(_MemoryRead(0x92DF18, $PID) + 0xCA0, $PID)+ 0x5C, $PID)+ 0x24, $PID)+ 0x74, $PID)+ 0x72C, $PID)
ToolTip($enemyHp)
WEnd
Eventuell musst du die Reihenfolge der Pointer rumdrehen, oder deine Pointer bzw Base sind falsch, außerdem brauchst du die nomadmemory.au3.
ControlSend Problem. 01/31/2011 - AutoIt - 1 Replies Hey E*pvpers.
Hab ein Problem, das ausgelesene einer Combobox richtig weiterzuverwenden.
Folgendes Script hab ich getestet und es geht
$handle = WinGetHandle(" & $iInput1 & ")
ControlSend($handle, "", "", "{F5}")
ControlSend Problem 11/12/2010 - AutoIt - 45 Replies Hey E*pvpers.
Bin grad dabei ein kleines F -Toll für Flyff zu schreiben. An sich ja ganz simpel.
Hab nur folgendes Problem:
Man kann Flyff 2 mal öffnen. Allerdings möchte ich nicht die F-Taste an beide Fenster senden sondern nur an eins. Die haben leider denselben Namen.
Gibt es eine Funktion wie ich im Bot speichern kann, welches Fenster er anpeilen soll. Bei alten Bots, die leider gefixt sind, konnte man erst ein Flyff Fenster aktiv haben und dan im Bot auf "FindFlyff"...
ControlSend Problem 11/02/2010 - AutoIt - 17 Replies Hallo alle zusammen ,
wie irh bestimmt wisst hat ControlSend immer eine Einschränkung für die Tastatur....
Jetzt wollte ich euch um Rat fragen ob es da irgendeine bestimmte UDF,oder sonsstwas gibt ...
Ich denke das würde nicht nur mir helfen sondern auch andern