Jump to content

DAOC and MouseClickPlus


Recommended Posts

Ok, I have been trying to send either keypresses or mouseclicks to an inactive Dark Ages of Camelot window for the past couple of hours.

I have read nearly every post on sending keys/mouseclicks to an inactive window. This may not be possible with this particular game... I'm not sure.

Here is what I have tried:

ControlSend() - This will send the appropriate keys only AFTER I activate the window that it was supposed to send them to. So if I send them to Client B while Client A is active .. they keys arent actually taken into effect until I activate Client B.

There was a _SendKeys() function somewhere on the boards.. it had the same effect ControlSend did.

So, after exhausting the keys methods I thought that maybe some udf involved in minimized clicking/inactive clicking would do the trick.

I came across a post where Smoke_N got his inactive mouse clicks to work with SWG. Using the code in that topic I came up with this:

Opt("MouseClickDelay", 1)
Opt("MouseCoordMode", 0)

Global $primary="left", $secondary="right"
_MouseButton($primary, $secondary)

MsgBox(262144, "DAOC Remote Send", "Activate the DAOC window that will be inactive during normal game play.")
WinSetTitle("Dark Age of Camelot", "", "DAOC - Inactive Account")
WinSetTitle("Dark Age of Camelot", "", "DAOC - Active Account")
$h_inactive = WinGetHandle("DAOC - Inactive Account")
$h_active = WinGetHandle("DAOC - Active Account")
WinActivate($h_active)

While 1
    If _IsPressed('33') Then 
        _MouseClickPlus("DAOC - Inactive Account", $primary, 25, 77, 1)
    EndIf
    ;If _IsPressed('34') Then FastSwitch()
    Sleep(10) ; take load off the processor
Wend

;Func FastSwitch()
;   WinActivate($h_inactive)
;   WinActivate($h_active)
;EndFunc

Func _MouseClickPlus($Window, $primary, $X = "", $Y = "", $Clicks = 1)
  Local $MK_LBUTTON       =  0x0001
  Local $WM_LBUTTONDOWN   =  0x0201
  Local $WM_LBUTTONUP     =  0x0202

  Local $MK_RBUTTON       =  0x0002  
  Local $WM_RBUTTONDOWN   =  0x0204
  Local $WM_RBUTTONUP     =  0x0205

  Local $WM_MOUSEMOVE     =  0x0200

  Local $i                = 0

  Select
  Case $primary
     $Button     =  $MK_LBUTTON
     $ButtonDown =  $WM_LBUTTONDOWN
     $ButtonUp   =  $WM_LBUTTONUP
  Case $Button = $secondary
     $Button     =  $MK_RBUTTON
     $ButtonDown =  $WM_RBUTTONDOWN
     $ButtonUp   =  $WM_RBUTTONUP
  EndSelect

  If $X = "" OR $Y = "" Then
     $MouseCoord = MouseGetPos()
     $X = $MouseCoord[0]
     $Y = $MouseCoord[1]
  EndIf

  For $i = 1 to $Clicks
     DllCall("user32.dll", "int", "SendMessage", _
        "hwnd",  WinGetHandle( $Window ), _
        "int",   $WM_MOUSEMOVE, _
        "int",   0, _
        "long",  _MakeLong($X, $Y))
      
     DllCall("user32.dll", "int", "SendMessage", _
        "hwnd",  WinGetHandle( $Window ), _
        "int",   $ButtonDown, _
        "int",   $Button, _
        "long",  _MakeLong($X, $Y))
      
     DllCall("user32.dll", "int", "SendMessage", _
        "hwnd",  WinGetHandle( $Window ), _
        "int",   $ButtonUp, _
        "int",   $Button, _
        "long",  _MakeLong($X, $Y))
  Next
EndFunc

Func _MakeLong($LoWord,$HiWord)
  Return BitOR($HiWord * 0x10000, BitAND($LoWord, 0xFFFF))
EndFunc

Func _MouseButton(ByRef $primary, ByRef $secondary)
   Local $k
   $k = RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "SwapMouseButtons")
   If $k = 1 Then
      $primary = "right"
      $secondary = "left"
      Else
      $primary = "left"
      $secondary = "right"
   EndIf
EndFunc ;==>_MouseButton

Func _IsPressed($hexKey)
 ; $hexKey must be the value of one of the keys.
 ; _IsPressed will return 0 if the key is not pressed, 1 if it is.
 ; $hexKey should entered as a string, don't forget the quotes!
 ; (yeah, layer. This is for you)
 
  Local $aR, $bO
 
  $hexKey = '0x' & $hexKey
  $aR = DllCall("user32", "int", "GetAsyncKeyState", "int", $hexKey)
  If Not @error And BitAND($aR[0], 0x8000) = 0x8000 Then
     $bO = 1
  Else
     $bO = 0
  EndIf
 
  Return $bO
EndFunc  ;==>_IsPressed

However, it isnt working. I cant really tell if it is even clicking at all. I can tell you it isnt clicking on X=25, Y=77 (Relative Window Coordinates).

Am I doing something dumb here? I just wanted to ensure I wasnt missing the obvious before I went in other directions. If I absolutely CANT get it to work by sending keys/clicks to the inactive window I'll use the ControlSend method and have it fast switch between windows. This is a hack I would like to avoid though.

Any insight on this matter would be appreciated.

-Simucal

AutoIt Scripts:Aimbot: Proof of Concept - PixelSearching Aimbot with several search/autoshoot/lock-on techniques.Sliding Toolbar - Add a nice Sliding Toolbar to your next script. Click the link to see an animation of it in action!FontInfo UDF - Get list of system fonts, or search to see if a particular font is installed.Get Extended Property UDF - Retrieve a files extended properties (e.g., video/image dimensions, file version, bitrate of song/video, etc)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...