Solved

sendinput    Windows NT/2000/XP: This function has been superseded. Use SendInput instead.

Posted on 2007-11-26
22
478 Views
Last Modified: 2010-04-01
SendInput

Windows NT/2000/XP: This function has been superseded. Use SendInput instead.


I was going to use


VOID keybd_event(      
    BYTE bVk,
    BYTE bScan,
    DWORD dwFlags,
    PTR dwExtraInfo
);




VOID mouse_event(      
    DWORD dwFlags,
    DWORD dx,
    DWORD dy,
    DWORD dwData,
    ULONG_PTR dwExtraInfo
);



but they are superseded by sendinput



however, this page
http://msdn2.microsoft.com/en-us/library/ms646310.aspx


doesn't really explain how to use it.



how do I use sendinput to send keyboard and mouse events?




0
Comment
Question by:Troudeloup
  • 12
  • 10
22 Comments
 
LVL 86

Assisted Solution

by:jkr
jkr earned 500 total points
ID: 20352844
'Superseded' in that context does not mean that you cannot use it anymore. In fact it is still supported and easier to use than 'SendInput()'. Take a look at http://www.codeproject.com/cpp/sendkeys_cpp_Article.asp ("SendKeys in C++") which still use that API to simluate VB's SendKeys.
0
 

Author Comment

by:Troudeloup
ID: 20352859
aww

i get it.

for the old ways, can you point me to their page with all the key codes?
0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 500 total points
ID: 20352886
Sure, that is located at http://www.codeproject.com/system/keyboard.asp ("Keyboard Events Simulation using keybd_event() function")
0
 

Author Comment

by:Troudeloup
ID: 20352893
how about mouse?
0
 

Author Comment

by:Troudeloup
ID: 20352905
make  = press
break  = release?


and where are keys for lower cases chars?
0
 

Author Comment

by:Troudeloup
ID: 20352928
VOID mouse_event(      
    DWORD dwFlags,                  // key actions, such as MOUSEEVENTF_LEFTDOWN
    DWORD dx,                       // screen x
    DWORD dy,                       // screen y
    DWORD dwData,                   // what's this?
    ULONG_PTR dwExtraInfo           // what's this?
);


mouse_event(MOUSEEVENTF_LEFTDOWN,   0, 0, 0, GetMessageExtraInfo()); // Left Key Down
mouse_event(MOUSEEVENTF_LEFTUP,     0, 0, 0, GetMessageExtraInfo()); // Left Key UP
 
mouse_event(MOUSEEVENTF_RIGHTDOWN,  0, 0, 0, GetMessageExtraInfo()); // Right Key Down
mouse_event(MOUSEEVENTF_RIGHTUP,    0, 0, 0, GetMessageExtraInfo()); // Right Key Up


0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 500 total points
ID: 20352936
For the lower-case keys, you can just use the virtual keycode (1st parameter), the scan code is the same (it is the same key anyway), e.g.

keybd_event('a',0x1e,0,0);

And 'Make' and 'Break' coresspond to 'press' and 'release'.

0
 

Author Comment

by:Troudeloup
ID: 20352964
keybd_event('a',0x1e,0,0);


a   //   if I put "A" here, does it mean it would be upper case?
0x1e   //  press
0       //   what does this mean?
0      //   what does this mean?
0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 500 total points
ID: 20352972
>>    DWORD dwData,                   // what's this?
>>    ULONG_PTR dwExtraInfo           // what's this?

These are only necessary for MOUSEEVENTF_WHEEL, then dwData specifies the amount of wheel movement. You ca nset them both to '0'.
0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 500 total points
ID: 20352993
>>a   //   if I put "A" here, does it mean it would be upper case?

Yes, indeed. The virtual keycodes for letters correcpond directly to their ASCII values.
0
 

Author Comment

by:Troudeloup
ID: 20353054
>>    DWORD dwData,                   // what's this?
>>    ULONG_PTR dwExtraInfo           // what's this?

These are only necessary for MOUSEEVENTF_WHEEL, then dwData specifies the amount of wheel movement. You ca nset them both to '0'.




does this mean I can click mouse and turn mouse wheel at the same time?    (wow)




how do I turn mouse wheel if I need to turn it?
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 86

Assisted Solution

by:jkr
jkr earned 500 total points
ID: 20353095
Well, you can use

mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_WHEEL, 100, 100, 2400, NULL);

See also the docs at http://msdn2.microsoft.com/en-us/library/ms646260.aspx they have it all.
0
 

Author Comment

by:Troudeloup
ID: 20353136
how do I send a string to keyboard?
0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 500 total points
ID: 20353199
Well, like

keybd_event('D',0x20,0,0);
keybd_event('a',0x1e,0,0);
keybd_event('d',0x20,0,0);
keybd_event('d',0x20,0,0);
keybd_event('y',0x15,0,0);
0
 

Author Comment

by:Troudeloup
ID: 20353241
void output ( string string1 )
{
      int size = string1.size();

     int n = 0;
     while ( n < size )
    {
         switch string1[n]
 
         case "a"       keybd_event('a',0x1e,0,0);
        case  "A"      keybd_event(//placaholder );

   }

 }



how about something like this?




0
 

Author Comment

by:Troudeloup
ID: 20353284
for mouse events,


what if I just want to move the mouse wheel?
0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 500 total points
ID: 20353315
That you can do like

void output ( string string1 )
{
      int size = string1.size();

      for (int i = 0; i < size; ++i)
      {
         BYTE vk = LOBYTE(::MapVirtualKey(string1[i], 0));

         keybd_event(string1[i],vk,0,0);
         keybd_event(string1[i],vk,KEYEVENTF_KEYUP,0);
      }
0
 

Author Comment

by:Troudeloup
ID: 20353339
I don't get your code;

what is this?

   BYTE vk = LOBYTE(::MapVirtualKey(string1[i], 0));


it seems that you retrieved the bye code somehow ( extremely cool, btw)


but how does it work?
0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 500 total points
ID: 20353365
That line looks up the scan code, so you don't have to manually provide a lookup table.
0
 

Author Comment

by:Troudeloup
ID: 20353369
how did you do that O_o ?
0
 

Author Comment

by:Troudeloup
ID: 20353384
0
 
LVL 86

Accepted Solution

by:
jkr earned 500 total points
ID: 20353406
Yup, I will.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now