• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1111
  • Last Modified:

VK_RETURN

string string1 = "VK_RETURN";

BYTE vk = LOBYTE(::MapVirtualKey( string1, 0));
keybd_event( string1,vk,0,0);
keybd_event( string1,vk,KEYEVENTF_KEYUP,0);
0
Troudeloup
Asked:
Troudeloup
  • 8
  • 7
1 Solution
 
josgoodCommented:
What is your question?
0
 
TroudeloupAuthor Commented:
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
 
TroudeloupAuthor Commented:
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
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
josgoodCommented:
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
 
TroudeloupAuthor Commented:
more precisely:


string = "HELLO"

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

this now it is lower case.
0
 
josgoodCommented:
OK
0
 
TroudeloupAuthor Commented:
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
 
TroudeloupAuthor Commented:
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
 
TroudeloupAuthor Commented:
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
 
josgoodCommented:
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
 
TroudeloupAuthor Commented:
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
 
josgoodCommented:
Yes, it does.  I'm trying a small test program now.  Having a couple of difficulties with it.  Stay tuned...
0
 
josgoodCommented:
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
 
josgoodCommented:
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
 
josgoodCommented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 8
  • 7
Tackle projects and never again get stuck behind a technical roadblock.
Join Now