我有一个MS-DOS下运行的程序,它的退出是在键盘的小写q.

skywen 2003-08-23 10:20:55
如何在程序中实现发送q的命令?



谢谢!
...全文
30 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
skywen 2003-08-25
  • 打赏
  • 举报
回复
不行啊,好像SendKeys有这样一个限制:


不能用 SendKeys 将按键消息发送到这样一个应用程序,这个应用程序并没有被设计成在 Microsoft Windows 中运行。
叶帆 2003-08-25
  • 打赏
  • 举报
回复
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Sub SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Private Declare Function SetForegroundWindow& Lib "user32" (ByVal hwnd&)


Const SW_SHOWNORMAL = 1
Const WM_CLOSE = &H10

Const VK_H = 72
Const VK_E = 69
Const VK_L = 76
Const VK_O = 79
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2

Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40


Private Sub cmdOut_Click()
Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As String

Ret = "Command Prompt"
WinWnd = FindWindow("ConsoleWindowClass", vbNullString)
If WinWnd = 0 Then MsgBox "Couldn't find the window ...": Exit Sub


ShowWindow WinWnd, SW_SHOWNORMAL
SetForegroundWindow WinWnd

Dim nIndex As Integer, sText As String, nCount As Integer
sText = txt.Text: nCount = Len(sText)
For nIndex = 1 To nCount
KeyPress Asc(Mid(sText, nIndex, 1))
Next
End Sub

Private Sub KeyPress(ByVal lChar As Long)
keybd_event lChar, 37, 75, 0
keybd_event lChar, 0, KEYEVENTF_KEYUP, 0 '只能发数字
End Sub
叶帆 2003-08-25
  • 打赏
  • 举报
回复
'这是2000下向DOS程序发按键的程序,不过,只能发数字
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Sub SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Private Declare Function SetForegroundWindow& Lib "user32" (ByVal hwnd&)


Const SW_SHOWNORMAL = 1
Const WM_CLOSE = &H10

Const VK_H = 72
Const VK_E = 69
Const VK_L = 76
Const VK_O = 79
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2

Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40


Private Sub cmdOut_Click()
Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As String

Ret = "Command Prompt"
WinWnd = FindWindow("ConsoleWindowClass", vbNullString)
If WinWnd = 0 Then MsgBox "Couldn't find the window ...": Exit Sub


ShowWindow WinWnd, SW_SHOWNORMAL
SetForegroundWindow WinWnd

Dim nIndex As Integer, sText As String, nCount As Integer
sText = txt.Text: nCount = Len(sText)
For nIndex = 1 To nCount
KeyPress Asc(Mid(sText, nIndex, 1))
Next
End Sub

Private Sub KeyPress(ByVal lChar As Long)
keybd_event lChar, 37, 75, 0
keybd_event lChar, 0, KEYEVENTF_KEYUP, 0 '只能发数字
End Sub
wingchi 2003-08-25
  • 打赏
  • 举报
回复
up
junki 2003-08-23
  • 打赏
  • 举报
回复
发送Q键是很简单的,正如他们所说的:用Sendkeys
在你的程序中不知道有没有接收q键的代码,当你按q键时,触发事件,你的程序接收到这个
命令,马上进行响应,就可以退出MS-DOS了
jlum99 2003-08-23
  • 打赏
  • 举报
回复
writeconsole ???
changechange 2003-08-23
  • 打赏
  • 举报
回复
SendKeys
wumy_ld 2003-08-23
  • 打赏
  • 举报
回复
用SendKeys
射天狼 2003-08-23
  • 打赏
  • 举报
回复
Text1.SetFocus
SendKeys "{q}"

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧