-
January 18th, 2003, 09:11 AM
#1
SendInput
SendInput is now recommended as opposed to the much simpler mouse_event for XP, etc.
Most of the code I have seen for it no the web either won't compile or even once compiled doesn't work properly.
There is basically a routine floating around out there on the web to Press the P key and send a right mouse click. That code sample (commonplace as it is) is riddled with small errors and hence doesn't compile (or work). I have edited it so that is just sends a left mouse-click but it does work and post it below:
I am a bit nervous about my use of the CopyMemory function however as I don't want to create any memory leakage. If anyone spots a problem with it I would be very grateful if you could point it out!
Code:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As INPUT_TYPE, ByVal cbSize As Long) As Long
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const INPUT_MOUSE = 0
Private Const INPUT_KEYBOARD = 1
Private Const INPUT_HARDWARE = 2
Type MOUSEINPUT
dx As Long
dy As Long
mouseData As Long
dwFlags As Long
dwtime As Long
dwExtraInfo As Long
End Type
Type INPUT_TYPE
dwType As Long
xi(0 To 23) As Byte
End Type
Public Sub ClickDaMouse()
Dim intX As Integer
Dim inputEvents(0 To 1) As INPUT_TYPE ' holds information about each event
Dim mouseEvent As MOUSEINPUT ' temporarily hold mouse input info
' Load the information needed to synthesize pressing the left mouse button.
mouseEvent.dx = 0 ' no horizontal movement
mouseEvent.dy = 0 ' no vertical movement
mouseEvent.mouseData = 0 ' not needed
mouseEvent.dwFlags = MOUSEEVENTF_LEFTDOWN ' left button down
mouseEvent.dwtime = 0 ' use the default
mouseEvent.dwExtraInfo = 0 ' not needed
' Copy the structure into the input array's buffer.
inputEvents(0).dwType = INPUT_MOUSE ' mouse input
CopyMemory inputEvents(0).xi(0), mouseEvent, Len(mouseEvent)
' Do the same as above, but for releasing the left mouse button.
mouseEvent.dx = 0 ' no horizontal movement
mouseEvent.dy = 0 ' no vertical movement
mouseEvent.mouseData = 0 ' not needed
mouseEvent.dwFlags = MOUSEEVENTF_LEFTUP ' left button up
mouseEvent.dwtime = 0 ' use the default
mouseEvent.dwExtraInfo = 0 ' not needed
' Copy the structure into the input array's buffer.
inputEvents(1).dwType = INPUT_MOUSE ' mouse input
CopyMemory inputEvents(1).xi(0), mouseEvent, Len(mouseEvent)
' Now that all the information for the 2 input events has been placed
' into the array, finally send it into the input stream.
intX = SendInput(2, inputEvents(0), Len(inputEvents(0))) ' place the events into the stream
End Sub
Last edited by Cimperiali; August 25th, 2003 at 07:17 AM.
-
October 26th, 2006, 01:32 PM
#2
Re: SendInput
i'm not sure whether you see this or not, but with little hope i'm posting.
hii ,
i'm searching for how to use sendinput api , i saw you link
i didnt understand what happens when we run the code you supplied there.
please tell me what it does, i want to simulate mouse clicks for my project??
i'm using VB6 and os is windows XP.
THANKS in advance.
-
October 26th, 2006, 01:56 PM
#3
Re: SendInput
eswar_525, welcome to the forums.
Please note the date of the original post. This thread was created over 3.5 years ago. You should have posted your own new thread.
For API, AllAPI.net should be your first stop. Here is the SendInput API information.
If the post was helpful...Rate it! Remember to use [code] or [php] tags.
-
October 26th, 2006, 11:13 PM
#4
Re: SendInput
thanks for your suggestion. Yes I know little bit about sendinput API.
But can you tell me what happens when we run the code given there by '
'Covin' in this post.
Thanks in advance.
-
October 26th, 2006, 11:23 PM
#5
Re: SendInput
sorry me again..
i wanna know more about the following
MOUSEEVENTF_LEFTDOWN = &H2
MOUSEEVENTF_LEFTUP = &H4
WM_ACTIVATE
GW_CHILD
GW_HWNDNEXT
MA_ACTIVATE
..
..
..
can you give me a link where I can find related information about them.
thanks.
Last edited by eswar_525; October 26th, 2006 at 11:26 PM.
Reason: wanna be more clear
-
October 26th, 2006, 11:37 PM
#6
Re: SendInput
Welcome. You should definetly check out www.AllApi.net. The website supplies the syntax of the SendInput API and a couple of examples. If your answer cannot be found there, then search microsofts MSDN library. Happy Searching!
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|