Control Click

10/12/2010 23:47 rexfox#1
Hey Com^^,

ich will spaßhalber etwas mit hidden herumspielen^^
bei Conrtrolclick jedoch nimmt autoit nicht die controlclick coords von window info sonder nur die normalen, wodurch des ganze net hidden gehn will^^

würde gerne wissen, wie man autoit praktisch ein fenster zuweist, in dem es klicken soll und es die coords nimmt , als wäre dieses fenster der gesamte bildschirm...

wenn jmd weis wie ich klicks anders hidden simulieren kann, kann ers auch schreibn^^

€ der controlclick funzt bei normalen mozilla mit den controlclickcoords, aber net, wenn ich spiel(runescape :D) habe, dann nimmt autoit die coords als normale coords...
10/13/2010 00:17 maxi39#2
machs mit WinGetPos ( "title" [, "text"] )
und control klick geht hidden

bsp script aus der autoit hilfe:


Quote:
$size = WinGetPos("[active]")
MsgBox(0, "Active window stats (x,y,width,height):", $size[0] & " " & $size[1] & " " & $size[2] & " " & $size[3])
ich sag dir gleich wie das mit der anwendung koordinaten lesen geht mom
10/13/2010 00:37 maxi39#3
hier die lösung an meinen beispiel:




PHP Code:
HotKeySet("{F1}","_a")

While 
1

    Sleep
(200)

WEnd


Func _a
()

    While 
1
$size 
WinGetPos("[active]")
$NMSG=GUIGETMSG()
$POS=MOUSEGETPOS()
$Size1 $Size[0]
$Size2 $Size[1]

TOOLTIP(($POS[0]-$Size1)&" / "&($POS[1]-$Size2))


WEnd

EndFunc 

du muss halt für die koordinaten im control klick nur das angeben
:

PHP Code:
$size WinGetPos("[active]")
$NMSG=GUIGETMSG()
$POS=MOUSEGETPOS()
$Size1 $Size[0]
$Size2 $Size[1]

$controlklickkoordinate1 $POS[0]-$Size1
$controlklickkoordinate2 
$POS[1]-$Size2 
press thx wenn ich geholfen hab ;D
10/13/2010 00:46 rexfox#4
Erstma thx^^ aber ich glaube mein problem ist ein anderes..
also mein problem ist ,dass er die coords bei dem spiel runescape falsch nimmt
teste aber mal ob es geht mit deinem echt coolen tool^^


€runescape will net des will einfach net die control click coords als control click coord nehmen sondern nimmt die immer als normale bildschirm coords

metin2 geht anscheinend auch net ,weil autoit window info mir noch nichtmal ClassnameNN sagen kann und auch keine controlclick coords gibt..
10/13/2010 00:49 maxi39#5
Quote:
Originally Posted by rexfox View Post
Erstma thx^^ aber ich glaube mein problem ist ein anderes..
also mein problem ist ,dass er die coords bei dem spiel runescape falsch nimmt
teste aber mal ob es geht mit deinem echt coolen tool^^
du muss halt noch den titel von rune scape angeben
bei WinGetPos ( ) , ich hab jetzt [active] drin d.h er sucht die koordinaten von jedem beliebigen aktiven fenster
10/13/2010 01:06 rexfox#6
Runescape wird praktisch net direkt als fenster erkannt von controlclick und deshalb klickt der da auch net rein.. kp aber großes thx für die mühe werde auch gleich mal auf den thx button klickn^^
10/13/2010 01:13 maxi39#7
Quote:
Originally Posted by rexfox View Post
Runescape wird praktisch net direkt als fenster erkannt von controlclick und deshalb klickt der da auch net rein.. kp aber großes thx für die mühe werde auch gleich mal auf den thx button klickn^^
ich werd ma gucken, wenn ich was raus gefunden habe pn ich dich direkt^^
was willst du eig mit control klick erreichen?
10/13/2010 01:17 rexfox#8
ich werde, um autoit kennenzulernen einen kleinen runescapebot schreibn^^ wie der aussehen wird muss ich noch guckn^^
im moment wollte ich damit im inventar von runescape einen gegnstand anklickn, sodass er angezogen wird ....so zum testen


€ wenn du zur lösung infos über runescape brauchst dann sag welche^^
10/13/2010 13:14 lolkop#9
in manchen spielen ist es notwendig, die maus vorher an den gewünschten ort zu setzen...
hab mir deshalb vor längerer zeit mal eine clickfunktion geschrieben, die das auch mit berücksichtigt:
Code:
Func Click($title, $btn, $xpos, $ypos, $clicks = 1)
	Local $hwnd = ControlGetHandle($title, "", "")
	Local $pos = BitOR($ypos * 0x10000, BitAND($xpos, 0xFFFF))
	Switch $btn
		Case "left"
			For $i=1 To $clicks
				DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x200, "int", 0, "long", $pos)
				DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x201, "int", 0x1, "long", $pos)
				DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x202, "int", 0x1, "long", $pos)
			Next
		Case "right"
			For $i=1 To $clicks
				DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x200, "int", 0, "long", $pos)
				DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x204, "int", 0x2, "long", $pos)
				DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x205, "int", 0x2, "long", $pos)
			Next
	EndSwitch
EndFunc
für die relativen coors nimmt man natürlich einfach die WinGetPos funktion und rechnet so immer relativ zur position des fensters
10/13/2010 15:32 maxi39#10
repost, hatte in meinen alten fehler drin, deswegen gelöscht -_-




PHP Code:
#RequireAdmin
#include <Mouseklick.au3>
HotKeySet("{F1}","_a")

HotKeySet("{F2}","_b")


While 
1

    Sleep
(200)

WEnd


Func _a
()

    While 
1
$size 
WinGetPos("[active]")
$NMSG=GUIGETMSG()
$POS=MOUSEGETPOS()
$Size1 $Size[0]
$Size2 $Size[1]

TOOLTIP(($POS[0]-$Size1)&" / "&($POS[1]-$Size2))


WEnd

EndFunc




Func _b
()

$size WinGetPos("METIN2")
$Size1 $Size[0]
$Size2 $Size[1]
$NMSG=GUIGETMSG()
$POS=MOUSEGETPOS()
$controlklickkoordinate1 $Size1
$controlklickkoordinate2 
$Size2


TOOLTIP
(($POS[0]-$Size1)&" / "&($POS[1]-$Size2))


MouseMove537 $controlklickkoordinate1  512 $controlklickkoordinate2 )

_mouseclickplus"METIN2","LEFT",537 $controlklickkoordinate1  512 $controlklickkoordinate2 ) ; ersetzt controlclick






EndFunc 

so müsste es gehen

[Only registered and activated users can see links. Click Here To Register...]

UDF : [Only registered and activated users can see links. Click Here To Register...]
10/13/2010 16:51 rexfox#11
Wieder ein großes Danke an euch^^ die leute sind hier viel hilfsbereiter als in der metin2 section :D





Quote:
Func Click($title, $btn, $xpos, $ypos, $clicks = 1)
Local $hwnd = ControlGetHandle($title, "", "")
Local $pos = BitOR($ypos * 0x10000, BitAND($xpos, 0xFFFF)) <--KP :D
Switch $btn
Case "left"
For $i=1 To $clicks
DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x200, "int", 0, "long", $pos)<-- DLL AUCH KP :D
DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x201, "int", 0x1, "long", $pos)
DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x202, "int", 0x1, "long", $pos)
Next
Case "right"
For $i=1 To $clicks
DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x200, "int", 0, "long", $pos)
DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x204, "int", 0x2, "long", $pos)
DllCall("User32.dll", "int", "PostMessage", "hwnd", $hwnd, "int", 0x205, "int", 0x2, "long", $pos)
Next
EndSwitch
EndFunc



also an lolkop^^
ich kenne das mit dem bit noch nicht und mit Dlls hab ich noch nie gearbeitet^^ könntest du mir den script etwas genauer erklären bzw sagen wie ich mit dem weiterarbeiten kann ?
10/13/2010 17:02 lolkop#12
is doch schon fertig die funktion...
zur nutzung einfach Click(<Fenster Titel>, <left>/<right>, <x coordinate>, <y coordinate>, <anzahl der clicks>)
10/13/2010 17:12 rexfox#13
ich mein weil bei mir passiert da nix^^ ist des des gleiche wie die udf von maxi? also auch was ,was ich includen muss? und maxi mit deinem script komme ich auch nicht klar ^^ kannste da mal sagn wie mit dem umzugehen ist?
wenn ich nerve votet einfach für close :D
10/13/2010 18:21 maxi39#14
ähm das von lolkop : setzt das in ein autoit script. abspeichern . und pack des in dein include ordner.

zum schluss bei deinem script #include <lolkopsscript.au3> oben
dann kannste seine funkt anwenden :

Click(<Fenster Titel>, <left>/<right>, <x coordinate>, <y coordinate>, <anzahl der clicks>)
10/13/2010 18:25 lolkop#15
du kannst die funktion auch einfach ins script kopiern -.-