This article was previously published under Q142819
Retired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
This article demonstrates a technique you can use to send keystrokes to aMicrosoft MS-DOS-based application from a Microsoft Visual Basicapplication. Note that with Visual Basic 4.0, 16-bit, this method does not work on Windows NT or Windows 2000.
The Visual Basic for Windows SendKeys function can send keystrokes to thecurrently active window as if the keystrokes had been typed at thekeyboard. Although it is not possible to send keystrokes to anapplication that is not based on Windows by using SendKeys directly, youcan place text on the Clipboard and use the SendKeys function to paste thattext into an MS-DOS-based application that is running in a window orminimized as an icon.
To run an MS-DOS-based application in a window, you must be running inWindows 386 enhanced mode. You must also make sure that the MS-DOS-basedapplication's .PIF file has been set to display the application in a windowrather than full screen. Use the Windows PIF Editor to make thismodification, if necessary.
The following example demonstrates how to send keystrokes to an MS-DOSsession running in a window:
Start an MS-DOS session running in a window.
Start Visual Basic for Windows and start a new project.
Enter the following into the general declarations section of the form:
Dim progname As String
Put two labels on the form. Change the first label's caption to "MS-DOS App Title." Change the second label's caption to "Keys to send."
Put two text boxes on the form next to each of the labels. Delete the default contents of these text boxes. These controls are used to allow the user to enter the MS-DOS-based application's window title and the keystrokes to send to it. Change the Name property of these text boxes to "DosTitle" and "DosKeys" respectively.
Put a command button on the form, and change its caption to "Send keys."
Add the following code to the Command1 button click event procedure:
Private Sub Command1_Click() 'Ensure that progname is set to the titlebar of Visual Basic while ' running. progname = "Project1 - Microsoft Visual Basic [run]" clipboard.Clear clipboard.SetText DosKeys.Text + Chr$(13) ' Append a <CR>. AppActivate DosTitle.Text SendKeys "% ep", 1 AppActivate progname End Sub
If the text that you send is the DIR command or another command that takes time, the AppActivate call immediately following the SendKeys call can interrupt the processing. The AppActivate call should be placed in a timer with the appropriate interval set, and the timer should be enabled in the command_click procedure. The timer should be disabled before exiting the timer.
Run the program.
Enter the window title of the MS-DOS-based application into the DosTitle text box. The default window title for an MS-DOS session is "MS-DOS Prompt".
Enter the keystrokes to send into the DosKeys text box (for example, DIR).
Click the Send Keys button. The keystrokes are sent to the Clipboard and then pasted into the MS-DOS window.
To use this technique in a compiled Visual Basic for Windows program,change the progname assignment from "Microsoft Visual Basic" to theexecutable file name. Also, to see the text being placed onto theClipboard, open the Windows Clipboard viewer.