Link to home
Start Free TrialLog in
Avatar of rubixxcube
rubixxcube

asked on

SendMessage API in C# - Sending a mouse click to another window

i need to click on a button in another application from my C# application, i have API calls working to activate or close the window etc and they work fine so i know i am sending messages, and i know the code for an api mouse click, however i need to know the code to convert the integer mouse coordinates into the correct format so the correct area gets clicked in the other application.  Here is my sample code:

      public const uint WM_LBUTTONDOWN   = 0x0201;
      public const uint WM_LBUTTONUP     = 0x0202
[DllImport("user32.dll")]
            public static extern int SendMessage(
                  int hWnd,      // handle to destination window
                  uint Msg,       // message
                  long wParam,  // first message parameter
                  long lParam   // second message parameter
                  );
public static void SendMouseClick(int iHandle, int X, int Y)
            {
/***problem line***********      / long lparm=(X and Y converted coordinates)
                    long lngResult = SendMessage(iHandle, WM_LBUTTONDOWN, 0, lparm);
                    long lngResult2 = SendMessage(iHandle, WM_LBUTTONUP, 0, lparm);

            }

From my app i call

SendMouseClick(windowHandle,100,200)
i need to know how to figure out the correct value for the last parameter and pass it to the sendmessage function.
In some sample coordinates i saw online it stated that a Y value of 200 and an X value of 100 would look something like 0064 00C8 but i have no idea how to get to that format from 200 and 100 and how to put them together, thanks in advance for the help
Ruby
Avatar of AlexFM
AlexFM

lParam and wParam should be defined as int, because .NET long is 64-bit integer, and Win32 WPARAM and LPARAM are 32-bits type. To pack x and y to LPARAM use:

int lParam = (y << 16) + x;

To send mouse messages it is better to use SendInput or mouse_event API.
Avatar of rubixxcube

ASKER

Do you have some sample code using the SendInput or mouse_event APIs?
http://www.pinvoke.net/default.aspx/user32/SendInput.html

PInvoke declarations are shown for C# and VB. There is code sample in C# for sending keyboard messages and in VB for sending mouse messages, see:
Private Sub SendInputStream()
    ' Synthesize the user clicking the right mouse button
    ...

You can translate this to C#.
ASKER CERTIFIED SOLUTION
Avatar of AlexFM
AlexFM

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
I had seen this webpage but never this example, thanks for the help alex