Solved

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

Posted on 2007-11-26
22
485 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

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
 
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
 
LVL 86

Accepted Solution

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

Featured Post

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Templates For Beginners Or How To Encourage The Compiler To Work For You Introduction This tutorial is targeted at the reader who is, perhaps, familiar with the basics of C++ but would prefer a little slower introduction to the more ad…
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
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.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

695 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