Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 08:23

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Problem Controlsend

Discussion on Problem Controlsend within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
Lollipop99's Avatar
 
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 u2. 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] = 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 
Lollipop99 is offline  
Old 06/10/2011, 19:18   #2
 
Ludder231's Avatar
 
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
Ludder231 is offline  
Thanks
1 User
Old 06/10/2011, 19:30   #3
 
Lollipop99's Avatar
 
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
Lollipop99 is offline  
Old 06/10/2011, 19:38   #4
 
| Moep |'s Avatar
 
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.
| Moep | is offline  
Thanks
1 User
Old 06/10/2011, 19:58   #5
 
Lollipop99's Avatar
 
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?
Lollipop99 is offline  
Old 06/10/2011, 20:22   #6
 
BlackHybrid's Avatar
 
elite*gold: 52
The Black Market: 101/0/0
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.
BlackHybrid is offline  
Thanks
1 User
Old 06/10/2011, 20:35   #7
 
Lollipop99's Avatar
 
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?
Lollipop99 is offline  
Old 06/10/2011, 20:43   #8
 
BlackHybrid's Avatar
 
elite*gold: 52
The Black Market: 101/0/0
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?
BlackHybrid is offline  
Old 06/10/2011, 20:56   #9
 
Lollipop99's Avatar
 
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
Lollipop99 is offline  
Old 06/10/2011, 20:58   #10
 
BlackHybrid's Avatar
 
elite*gold: 52
The Black Market: 101/0/0
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?
BlackHybrid is offline  
Old 06/10/2011, 21:50   #11
 
Lollipop99's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 102
Received Thanks: 26
Quote:
Originally Posted by BlackHybrid View Post
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.
Lollipop99 is offline  
Old 06/10/2011, 22:15   #12
 
Lollipop99's Avatar
 
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?
Lollipop99 is offline  
Old 06/10/2011, 22:26   #13
 
| Moep |'s Avatar
 
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.
| Moep | is offline  
Thanks
1 User
Old 06/10/2011, 22:38   #14
 
Lollipop99's Avatar
 
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
Lollipop99 is offline  
Old 06/10/2011, 23:06   #15
 
| Moep |'s Avatar
 
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.
| Moep | is offline  
Thanks
1 User
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.