Solved

How to send keys to apps. using DirectInput?

Posted on 2000-04-06
8
1,301 Views
Last Modified: 2008-03-06
I have tried keybd_event & MapVirtualKey APIs and the SendKeys command but they didn't work.

I was trying to use the DirectX7a to send the keys, but I couldn't figurate out how to do it. All the docs I found about DirectInput were only for reading the keyboard (joystick, mouse, etc), not for sending keys.

How do I send a keystroke (for instance Enter) to an application that uses DirectInput to read the keyboard?

*** UPDATE ***
The other application using DirectInput is already active so I don't need to activate it with ActivateApp.
I'm already using DirectInput to read the Joystick and Keyboard, and it works fine. What I can't find is how to SEND keystrokes from my application to another application that also uses DirectInput to read the keyboard.
0
Comment
Question by:aldovargas
[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
8 Comments
 
LVL 9

Expert Comment

by:Ruchi
ID: 2692118
0
 
LVL 30

Expert Comment

by:Axter
ID: 2692195
You first have to get the focus of the application.  Example, the following function below will get the IE focus (when IE is open to VB expert-exchnage), and enter the www.gamemenu.com web site, and then send the enter key.

Private Sub Command0_Click()
AppActivate "Visual Basic Question - Microsoft Internet Explorer", True
SendKeys "%D", True
SendKeys "www.gamemenu.com"
SendKeys "{ENTER}", True
End Sub


AppActivate gets the focus of the App.
Most Apps you need to use the same name you see of the buttom of Win9x/2k screen.
0
 

Author Comment

by:aldovargas
ID: 2692211
Edited text of question.
0
Independent Software Vendors: 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:aldovargas
ID: 2692228
Edited text of question.
0
 
LVL 28

Expert Comment

by:AzraSound
ID: 2692255
http://msdn.microsoft.com/library/psdk/directx/diover_0oj8.htm

also you may need to send the directinput constant for enter:
DIK_RETURN
0
 
LVL 28

Accepted Solution

by:
AzraSound earned 100 total points
ID: 2692262
quoting this site:
http://world.std.com/~lword/work/other.html

How to send keyboard presses to an application

"There are two methods to doing this. The first is sending a keyboard event through a windows hook (WH_JOURNALPLAYBACK). This method works well in NT and Windows 95. The example that everyone seems to use is Sendkeys by Robert Mashlan. There are a few problems trying to use this code with Windows 95/98 or NT 4.0 or later. First, LibMain and WEP should be changed to DllMain. Next, all code that will be seen by multiple processes need to be shared. (See my Dll hint page for examples.) Last, but not least, change the hook procedure. HC_GETNEXT may be called many times, expecting the same value, until HC_SKIP is called. Sometimes the event is queued but not sent, so the same character needs to be requeued. HC_SKIP should increment any array count and check for the end conditions. If all these changes are made, the example should work as expected."

***************************************
 
But, there have been indications that this method does not work with DirectInput. So, there is another method that is usable for Windows 9x. Under the Windows 95 DDK, under keyb\samples\Vkxd\ there is an example of an easy keyboard emulation VxD.

***************************************


Whether you can find access to the files he is referring to I dont know.



0
 
LVL 3

Expert Comment

by:fibdev
ID: 2692850
Axter answered your question ...

In your case, ignore the "AppActivate" statement because you said the app already had focus, this is all you need to do:

SendKeys "{ENTER}", True

This will do the same thing:

SendKeys "~", True

Here is documentation on the SendKeys function.

==============================================

The SendKeys statement syntax has these named arguments:

Part      Description
string      Required. String expression specifying the keystrokes to send.
Wait      Optional. Boolean value specifying the wait mode. If False (default), control is returned to the procedure immediately after the keys are sent. If True, keystrokes must be processed before control is returned to the procedure.
Remarks

Each key is represented by one or more characters. To specify a single keyboard character, use the character itself. For example, to represent the letter A, use "A" for string. To represent more than one character, append each additional character to the one preceding it. To represent the letters A, B, and C, use "ABC" for string.
The plus sign (+), caret (^), percent sign (%), tilde (~), and parentheses ( ) have special meanings to SendKeys. To specify one of these characters, enclose it within braces ({}). For example, to specify the plus sign, use {+}. Brackets ([ ]) have no special meaning to SendKeys, but you must enclose them in braces. In other applications, brackets do have a special meaning that may be significant when dynamic data exchange (DDE) occurs. To specify brace characters, use {{} and {}}.

To specify characters that aren't displayed when you press a key, such as ENTER or TAB, and keys that represent actions rather than characters, use the codes shown below:

Key      Code
BACKSPACE      {BACKSPACE}, {BS}, or {BKSP}
BREAK      {BREAK}
CAPS LOCK      {CAPSLOCK}
DEL or DELETE      {DELETE} or {DEL}
DOWN ARROW      {DOWN}
END      {END}
ENTER      {ENTER}or ~
ESC      {ESC}
HELP      {HELP}
HOME      {HOME}
INS or INSERT      {INSERT} or {INS}
LEFT ARROW      {LEFT}
NUM LOCK      {NUMLOCK}
PAGE DOWN      {PGDN}
PAGE UP      {PGUP}
PRINT SCREEN      {PRTSC}
RIGHT ARROW      {RIGHT}
SCROLL LOCK      {SCROLLLOCK}
TAB      {TAB}
UP ARROW      {UP}
F1      {F1}
F2      {F2}
F3      {F3}
F4      {F4}
F5      {F5}
F6      {F6}
F7      {F7}
F8      {F8}
F9      {F9}
F10      {F10}
F11      {F11}
F12      {F12}
F13      {F13}
F14      {F14}
F15      {F15}
F16      {F16}

To specify keys combined with any combination of the SHIFT, CTRL, and ALT keys, precede the key code with one or more of the following codes:

Key      Code
SHIFT      +
CTRL       ^
ALT      %

To specify that any combination of SHIFT, CTRL, and ALT should be held down while several other keys are pressed, enclose the code for those keys in parentheses. For example, to specify to hold down SHIFT while E and C are pressed, use "+(EC)". To specify to hold down SHIFT while E is pressed, followed by C without SHIFT, use "+EC".
To specify repeating keys, use the form {key number}. You must put a space between key and number. For example, {LEFT 42} means press the LEFT ARROW key 42 times; {h 10} means press H 10 times.

Note   You can't use SendKeys to send keystrokes to an application that is not designed to run in Microsoft Windows. Sendkeys also can't send the PRINT SCREEN key {PRTSC} to any application.

Here's an axample:

Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1)      ' Run Calculator.
AppActivate ReturnValue       ' Activate the Calculator.
For I = 1 To 100      ' Set up counting loop.
      SendKeys I & "{+}", True      ' Send keystrokes to Calculator
Next I      ' to add each value of I.
SendKeys "=", True      ' Get grand total.
SendKeys "%{F4}", True      ' Send ALT+F4 to close Calculator.
0
 

Author Comment

by:aldovargas
ID: 2696130
Thanks Ruchi for the good links, they helped me to use better the DirectInput. Although my program needs to send keys to DirectInput, not to use it.

Thanks Axter, fibdev for your time to answer. However as my question say: SendKeys command doesn't work.

Although I still don't know how to send keys to DirectInput, at least AzraSound give a Tip where to find. Now anybody know where is this VXD :o)
0

Featured Post

PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Excel - Save a copy of work book 13 95
vb6 connector to mongodb 2 160
How to Add / Edit Windows Menu 4 80
VBA: copy range dynamically based on config sheet v3 6 53
If you have ever used Microsoft Word then you know that it has a good spell checker and it may have occurred to you that the ability to check spelling might be a nice piece of functionality to add to certain applications of yours. Well the code that…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

738 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