VB模拟按键操作

5
在我的程序中,我想模拟按下MediaPlayPause键的操作。请注意,我不想检查该键是否已按下或被按下,而是通过我的程序按下该键。 我尝试过使用SendKeys.Send,但特殊键仅限于{Enter}{Tab}等。

据我所知,您将不得不使用winapi来完成这个任务。 - Gray
是的,它是一个WinForms应用程序。 - jgetrost
@jgetrost 对不起,你当然有权要求一些解释。基本上,我的问题是我不太了解vb.net。我在这里找到了c#的答案:http://stackoverflow.com/questions/7181978/special-keys-on-keyboards。也许知道VB.net(或者你)的人可以将其转换为可用的形式。 - Gray
@jgetrost 我曾经使用过Keys枚举来指定按键,但是这是使用我雇主机密的方法。所以它是可以做到的。如何做到仍然未知。 - JBelter
@Gray,你链接的问题是关于C#的,但是产生的答案是(错误地?)C++代码,它可以被翻译/转换吗? - jgetrost
显示剩余4条评论
1个回答

3

好的,我将翻译此回答中的c#代码:https://stackoverflow.com/a/7182076/2000557

虽然我不懂VB.Net,但使用这个指南复制过去并不太难:http://msdn.microsoft.com/en-us/library/172wfck9.aspx

在表单中放置了一个带有点击事件的按钮。

Imports System.Runtime.InteropServices

Public Class Form1

    'this constant represents the hex value for the key to send to user32.dll
    Const APPCOMMAND_MEDIA_PLAY_PAUSE = &HE0000
    'this constant represents which command. Sort of like the function in user32.dll we are calling.
    Const WM_APPCOMMAND = &H319

    'this declares the user32.dll call to SendMessageW we are making
    Declare Auto Function SendMessageW Lib "user32.dll" Alias "SendMessageW" (
    ByVal hWnd As Integer,
    ByVal Msg As Integer,
    ByVal wParam As Integer,
    ByVal lParam As Integer) As Integer

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'call the SendMessage function with the current window handle, the command we want to use, same handle, and the button we want to press
        SendMessageW(Handle, WM_APPCOMMAND, Handle, APPCOMMAND_MEDIA_PLAY_PAUSE)
    End Sub
End Class

我尝试打开Windows媒体播放器进行测试,这个按钮可以播放/暂停我正在听的音乐。如果您需要其他帮助,请告诉我。如果您想实现其他按键功能,可以参考以下链接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms646275(v=vs.85).aspx

谢谢,这个完美地解决了我的问题!我一定会在感谢中提到你的帮助。 - jgetrost
哈哈,谢谢。我尽力添加了一些注释,希望能够澄清一下,让它不再像魔法一样。 - Gray
尝试这个来模拟文本框中的按键事件。 - Rei Salazar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接