|
You last visited: Today at 08:23
Advertisement
Problem Controlsend
Discussion on Problem Controlsend within the AutoIt forum part of the Coders Den category.
06/10/2011, 18:42
|
#1
|
elite*gold: 0
Join Date: May 2009
Posts: 102
Received Thanks: 26
|
Problem Controlsend
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)
HotKeySet("{F5}", "_attach")
HotKeySet("{F6}", "_start")
HotKeySet("{F7}", "_pause")
HotKeySet("{F8}", "_exit")
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
Func _attach()
If Not $attached Then
$HWND = WinGetHandle("[Active]")
$result = DllCall($Dll, "DWORD", "ACEGetPIDFromHWND", "DWORD", $HWND)
$PID = String($result[0])
$result = DllCall($Dll, "DWORD", "ACEOpenProcess", "DWORD", $PID)
$process = String($result[0])
_loadIni()
$attached = True
EndIf
EndFunc ;==>_attach
Func _start()
WinSetTitle($HWND, "", $title)
$pause = False
EndFunc ;==>_start
Func _attack()
ControlSend($HWND, "", "", "{TAB}")
Sleep(100)
ControlSend($HWND, "", "", "{3}")
_gettargethp()
While $targethp > 0
_gettargethp()
Sleep(100)
WEnd
EndFunc ;==>_attack
Func _gettargethp()
Dim $BaseAdr = "92DF18"
Dim $Path = "CA0,5C,24,74,72C"
$result = DllCall($Dll, "int", "ACEReadIntFromPointer", "DWORD", $process, "str", $BaseAdr, "str", $Path)
$targethp = String($result[0])
EndFunc ;==>_gettargethp
Func _buffcheck()
For $i = 0 To 8 Step 1
if ($skills[$i][3] = 0 Or $skills[$i][3] > $skills[$i][1]) And $skills[$i][1] <> 0 Then
ControlSend($HWND, "", "", $skills[$i][0])
Sleep(3500)
$skills[$i][2] = TimerInit()
EndIf
$skills[$i][3] = TimerDiff($skills[$i][2]) / 1000
Next
EndFunc ;==>_buffcheck
Func _pause()
$pause = True
WinSetTitle($HWND, "", "Archlord")
EndFunc ;==>_pause
Func _exit()
Exit
EndFunc ;==>_exit
Func _loadIni()
$inidatei = FileOpenDialog("choose ini datei", @ScriptDir, "(*.ini)", 1)
$skills[0][0] = IniRead($inidatei, "skills", "key1", 0)
$skills[0][1] = IniRead($inidatei, "skills", "cooldown1", 0)
$skills[1][0] = IniRead($inidatei, "skills", "key2", 0)
$skills[1][1] = IniRead($inidatei, "skills", "cooldown2", 0)
$skills[2][0] = IniRead($inidatei, "skills", "key3", 0)
$skills[2][1] = IniRead($inidatei, "skills", "cooldown3", 0)
$skills[3][0] = IniRead($inidatei, "skills", "key4", 0)
$skills[3][1] = IniRead($inidatei, "skills", "cooldown4", 0)
$skills[4][0] = IniRead($inidatei, "skills", "key5", 0)
$skills[4][1] = IniRead($inidatei, "skills", "cooldown5", 0)
$skills[5][0] = IniRead($inidatei, "skills", "key6", 0)
$skills[5][1] = IniRead($inidatei, "skills", "cooldown6", 0)
$skills[6][0] = IniRead($inidatei, "skills", "key7", 0)
$skills[6][1] = IniRead($inidatei, "skills", "cooldown7", 0)
$skills[7][0] = IniRead($inidatei, "skills", "key8", 0)
$skills[7][1] = IniRead($inidatei, "skills", "cooldown8", 0)
$skills[8][0] = IniRead($inidatei, "skills", "key9", 0)
$skills[8][1] = IniRead($inidatei, "skills", "cooldown9", 0)
EndFunc ;==>_loadIni
|
|
|
06/10/2011, 19:18
|
#2
|
elite*gold: 0
Join Date: Aug 2010
Posts: 880
Received Thanks: 113
|
vllt nützt Opt("sendkeydowndelay") etwas (wenns so ricvhtig geschrieben ist  Sonst guck in der Hilfe datei und such nah Opt
|
|
|
06/10/2011, 19:30
|
#3
|
elite*gold: 0
Join Date: May 2009
Posts: 102
Received Thanks: 26
|
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
|
|
|
06/10/2011, 19:38
|
#4
|
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
|
Gab vor nen par Tagen erst so ein ähnliches Problem, einfach mal die Hilfe bemühen oder den Link  folgen.
|
|
|
06/10/2011, 19:58
|
#5
|
elite*gold: 0
Join Date: May 2009
Posts: 102
Received Thanks: 26
|
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?
|
|
|
06/10/2011, 20:22
|
#6
|
elite*gold: 52
Join Date: Oct 2010
Posts: 1,998
Received Thanks: 389
|
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.
|
|
|
06/10/2011, 20:35
|
#7
|
elite*gold: 0
Join Date: May 2009
Posts: 102
Received Thanks: 26
|
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?
|
|
|
06/10/2011, 20:43
|
#8
|
elite*gold: 52
Join Date: Oct 2010
Posts: 1,998
Received Thanks: 389
|
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?
|
|
|
06/10/2011, 20:56
|
#9
|
elite*gold: 0
Join Date: May 2009
Posts: 102
Received Thanks: 26
|
also entweder alle keys kommen an, oder es kommt nichts an, was meistens der fall ist
|
|
|
06/10/2011, 20:58
|
#10
|
elite*gold: 52
Join Date: Oct 2010
Posts: 1,998
Received Thanks: 389
|
Hast du es schonmal probiert mit einem Fenster und dem Handel bezogen durch den Fenstertitel?
|
|
|
06/10/2011, 21:50
|
#11
|
elite*gold: 0
Join Date: May 2009
Posts: 102
Received Thanks: 26
|
Quote:
Originally Posted by BlackHybrid
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.
|
|
|
06/10/2011, 22:15
|
#12
|
elite*gold: 0
Join Date: May 2009
Posts: 102
Received Thanks: 26
|
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?
|
|
|
06/10/2011, 22:26
|
#13
|
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
|
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.
|
|
|
06/10/2011, 22:38
|
#14
|
elite*gold: 0
Join Date: May 2009
Posts: 102
Received Thanks: 26
|
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
|
|
|
06/10/2011, 23:06
|
#15
|
elite*gold: 0
Join Date: Apr 2008
Posts: 1,079
Received Thanks: 438
|
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.
|
|
|
 |
|
Similar Threads
|
Controlsend Problem
06/04/2011 - AutoIt - 0 Replies
Hat sich erledigt. ;)
|
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
|
All times are GMT +1. The time now is 08:24.
|
|