VB Имитировать нажатие клавиши

В своей программе я хочу имитировать нажатие клавиши MediaPlayPause. Как примечание, я не хочу проверять, нажата ли клавиша или нажата, я хочу нажать клавишу через свою программу.

Я пробовал SendKeys.Send, но специальные ключи ограничены {Enter} и {Tab} и т. д.


person jgetrost    schedule 24.07.2013    source источник
comment
Насколько я знаю, вам придется использовать winapi для этого.   -  person Gray    schedule 24.07.2013
comment
Я предполагаю, что это для проекта winforms?   -  person JBelter    schedule 24.07.2013
comment
Да, это приложение winforms.   -  person jgetrost    schedule 24.07.2013
comment
Это может помочь, хотя я не уверен, в какой класс/метод можно передать перечисление: Перечисление ключей MSDN   -  person JBelter    schedule 24.07.2013
comment
@jgetrost Извините, вы, конечно, правы, что просите объяснений. По сути, моя проблема в том, что я не очень хорошо знаю vb.net. Я нашел этот ответ здесь для С#: stackoverflow.com/questions/7181978/ специальные клавиши на клавиатуре . Может быть, кто-то, кто знает VB.net (или вы), может преобразовать это, чтобы его можно было использовать.   -  person Gray    schedule 24.07.2013
comment
@Jbelter Похоже, этот метод предназначен для определения того, какие специальные клавиши были нажаты, мне все равно, какие клавиши нажимает пользователь, я хочу, чтобы мое приложение имитировало нажатие клавиши для управления мультимедийными приложениями.   -  person jgetrost    schedule 24.07.2013
comment
@jgetrost На самом деле я использовал перечисление Keys, чтобы указать клавиши для нажатия, однако он использовал метод, который является конфиденциальным для моего работодателя. Так что это можно сделать. Как это можно сделать, пока неизвестно.   -  person JBelter    schedule 24.07.2013
comment
@Gray, вопрос, который вы связали, касался C #, но полученный ответ был (ошибочно?) Кодом C ++, можно ли его перевести / преобразовать?   -  person jgetrost    schedule 24.07.2013
comment
@jgetrost его формулировка сбивала с толку, но код, который он опубликовал, был C#, а не C++. Он имел в виду ссылку, которую он отправил. В любом случае, я портировал его на VB; дайте мне знать, если вам нужна помощь/объяснение.   -  person Gray    schedule 24.07.2013


Ответы (1)


Хорошо, я перенес код С# из этого ответа: 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

Я проверил это, открыв WMplayer и кнопку воспроизведения/паузы музыки, которая у меня была. Дайте мне знать, если вам нужна другая помощь. Вот ссылка, если вы хотите реализовать другие ключи: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646275(v=vs.85).aspx

person Gray    schedule 24.07.2013
comment
Спасибо, это работает отлично! Я обязательно отблагодарю вас за помощь. - person jgetrost; 24.07.2013
comment
Хаха спасибо. Я сделал все возможное, чтобы добавить несколько комментариев, чтобы, надеюсь, немного прояснить это, чтобы это не выглядело как волшебство. - person Gray; 24.07.2013
comment
Попробуйте это, чтобы имитировать событие KeyPress в текстовом поле. - person Rei Salazar; 11.04.2017