Solved

VK_RETURN

Posted on 2007-11-30
15
1,080 Views
Last Modified: 2008-02-01
string string1 = "VK_RETURN";

BYTE vk = LOBYTE(::MapVirtualKey( string1, 0));
keybd_event( string1,vk,0,0);
keybd_event( string1,vk,KEYEVENTF_KEYUP,0);
0
Comment
Question by:Troudeloup
  • 8
  • 7
15 Comments
 
LVL 13

Expert Comment

by:josgood
Comment Utility
What is your question?
0
 

Author Comment

by:Troudeloup
Comment Utility
well, I want to use

keybd_event() to press keyboard key SHIFT.


but i don't want to write a function for that:


void enter()
{
      BYTE vk = LOBYTE(::MapVirtualKey(VK_ENTER, 0));
 
         keybd_event(VK_ENTER,vk,0,0);
         keybd_event(VK_ENTER,vk,KEYEVENTF_KEYUP,0);
     
}





plus, I think it's possible to contain VK_ENTER

like this

string1[6] = VK_ENTER





0
 

Author Comment

by:Troudeloup
Comment Utility
uh sorry, it's this


      BYTE vk = LOBYTE(::MapVirtualKey( VK_RETURN, 0));
      keybd_event( VK_RETURN,vk,0,0);
      keybd_event( VK_RETURN,vk,KEYEVENTF_KEYUP,0);
      
      
0
 
LVL 13

Expert Comment

by:josgood
Comment Utility
If I remember correctly, you  can simulate the shift key with
keybd_event(VK_SHIFT,1,0,0);
keybd_event(YourKeyHere,1,0,0);
keybd_event(VK_SHIFT,1,KEYEVENTF_KEYUP,0);

and the return key with
keybd_event(VK_RETURN,1,0,0);
keybd_event(VK_RETURN,1,KEYEVENTF_KEYUP,0);

Give me a little time to put a test program together.

Joe
0
 

Author Comment

by:Troudeloup
Comment Utility
more precisely:


string = "HELLO"

I want it to be upper case letter when it's printed.

this now it is lower case.
0
 
LVL 13

Expert Comment

by:josgood
Comment Utility
OK
0
 

Author Comment

by:Troudeloup
Comment Utility
stop, please try to do this


string = "HellO"


keyboard_event to send upper and lower case letter.



another example is 1 and !

the current code would send only 1 and never !

I am trying to write a parser so that





string string1 ="Hello"

should be like this


string2 =

[0] = shift
[1] = h
[2] = shift up
[3] = e
[4] = l
[5] = o
[6] = o


If string[n] == "H"

test is c++ can tell the difference between upper and lowercase



plan:



loop
{
if string[n] == upper case
string2[n] = shift
string2[n+1] = string1[n]
string2[n+2] = shift
}

send string2 to output



0
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 

Author Comment

by:Troudeloup
Comment Utility
ignore this line


If string[n] == "H"

test is c++ can tell the difference between upper and lowercase


that's my own note  ;p
0
 

Author Comment

by:Troudeloup
Comment Utility
if the case of 1 would !

of course the solution is also

shift down
1
shift up

and it should be dealt by the parser, if one is needed. ( i am not sure)
0
 
LVL 13

Expert Comment

by:josgood
Comment Utility
I'm a little confused, but it seems like you want
1)  A way to mark where the shifted character(s) is/are in a string
2)  A way to send the shifted characters

Am I right?

You might use "0hello" to send "Hello", for example.
And "4hello" to send "hellO"
 
0
 

Author Comment

by:Troudeloup
Comment Utility
I want a function to output case correct strings on notepad give this

correctstring ("HeLLo")


and this doesn't pop up

hello


instead,

the intuitively expected

HeLLo

does.


makes sense?
0
 
LVL 13

Expert Comment

by:josgood
Comment Utility
Yes, it does.  I'm trying a small test program now.  Having a couple of difficulties with it.  Stay tuned...
0
 
LVL 13

Expert Comment

by:josgood
Comment Utility
I have some progress.  This small program sends a capital Q to the window that has focus.  

Unfortunately, it leaves the Caps Lock on...I'm looking into that

#include <windows.h>

   void SendShiftedChar(char aChar) {
      BYTE aByte = (BYTE)aChar;
     
      keybd_event( VK_CAPITAL ,0x45,KEYEVENTF_EXTENDEDKEY | 0, 0 );      
      keybd_event( aByte, 0, 0, 0 );
      keybd_event( aByte, 0, KEYEVENTF_KEYUP, 0);
      keybd_event( VK_CAPITAL, 0x45,KEYEVENTF_EXTENDEDKEY, 0 );      
      }
   
   void main() {
      ::Sleep(5000);  // Gives time to click Notepad
      SendShiftedChar( 'Q' );
   }
0
 
LVL 13

Expert Comment

by:josgood
Comment Utility
OK, this sends a capital H.
#include <windows.h>

   void CapsLock() {
      keybd_event( VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );      
      keybd_event( VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0 );      
   }

   void SendChar(char aChar) {
      BYTE aByte = (BYTE)aChar;
      keybd_event( aByte, 0, 0, 0 );
      keybd_event( aByte, 0, KEYEVENTF_KEYUP, 0);
   }
   
   void SendShiftedChar(char aChar) {
      CapsLock();
      SendChar(aChar);
      CapsLock();
      }
   
   void main() {
      ::Sleep(3000);  // Gives time to click Notepad
      SendShiftedChar( 'H' );
   }
0
 
LVL 13

Accepted Solution

by:
josgood earned 500 total points
Comment Utility
This sends upper and lower case h.  You should be able to apply the same sort of logic as in SendChar for handling other keys.  The 0x20 magic number is the difference in hex between 'a' and 'A'.

'A' = 0x61, 'a' = 0x41

#include <windows.h>
#include <string>

   void CapsLock() {
      keybd_event( VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );      
      keybd_event( VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0 );      
   }

   void Send(char aChar) {
      keybd_event( aChar, 0, 0, 0 );
      keybd_event( aChar, 0, KEYEVENTF_KEYUP, 0);
   }
   
   void SendShiftedChar(char aChar) {
      CapsLock();
      Send(aChar);
      CapsLock();
      }
   
   void SendOneChar(char aChar) {
      if (aChar >= 'a' && aChar <= 'z') Send(aChar-0x20);
      else SendShiftedChar(aChar);
   }
   
   void main() {
      ::Sleep(3000);  // Gives time to click Notepad
     
      SendOneChar( 'h' );
      SendOneChar( 'H' );
   }
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Errors will happen. It is a fact of life for the programmer. How and when errors are detected have a great impact on quality and cost of a product. It is better to detect errors at compile time, when possible and practical. Errors that make their wa…
Unlike C#, C++ doesn't have native support for sealing classes (so they cannot be sub-classed). At the cost of a virtual base class pointer it is possible to implement a pseudo sealing mechanism The trick is to virtually inherit from a base class…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
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.

772 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