Как отправить ключ, если кнопка нажата. C # .net 4.0 - PullRequest
0 голосов
/ 06 ноября 2011

Эта проблема сводила меня с ума всю ночь. Я сделал аналогичную вещь в VB.net, где, если он обнаружит нажатие левой кнопки, он отправит две клавиши Q (это для личного использования в игре под названием AVA, где он будет «быстро переключаться», чтобы немного увеличить скорость стрельбы из снайперской винтовки , он запрограммирован в игре, я могу сделать это вручную, но я хочу, чтобы это делалось автоматически)

Вот код VB.net

Public Const VK_Q As Byte = &H51
Public Const KEYEVENTF_KEYUP As Integer = &H2
Public Const VK_2 As Byte = &H32

    Public Sub QDown()
    keybd_event(VK_Q, 0, 0, 0)
End Sub
Public Sub QUp()
    keybd_event(VK_Q, 0, KEYEVENTF_KEYUP, 0)
End Sub

Private Sub Timer7_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer7.Tick
    If GetAsyncKeyState(Keys.LButton) Then
        Call quickswitch()
    End If
End Sub

Это, по сути, используемый код. Теперь я попробовал несколько методов в C #, чтобы воспроизвести его безрезультатно. Я пытался продублировать вышеописанные методы с использованием синтаксиса C # и тому подобное, тоже не сработало.

Вот мой текущий (совсем не работающий) код C #

[DllImport("user32.dll")]
    static extern ushort GetAsyncKeyState(int vKey);

    public static bool IsKeyPushedDown(System.Windows.Forms.Keys vKey)
    {
        return 0 != (GetAsyncKeyState((int)vKey) & 0x8000);
    }
    static byte VK_Q = 0x51;
    static int KEYEVENTF_KEYUP = 0x0002;
    [DllImport("user32.dll", EntryPoint = "keybd_event", CharSet = CharSet.Auto, ExactSpelling = true)]
    public static extern void keybd_event(byte vk, byte scan, int flags, int extrainfo);
    bool Q = (GetAsyncKeyState(0x51) & 0x8000) != 0;
private void qdown() {
        keybd_event(VK_Q, 0, 0, 0);
    }
    private void qup()
    {
        keybd_event(VK_Q, 0, KEYEVENTF_KEYUP, 0);
    }
        private void timer1_Tick(object sender, EventArgs e)
    {
        if (Q == true)
        {
            qdown();
            qup();
        }
    }

Надеюсь, это все, что я использовал, я скопировал это очень быстро. Но это должно быть большинство из того, что я использовал. Я знаю, что это беспорядок, потому что я пробовал все виды различных методов, и они просто не работают.

Также нет ошибок в решении.

Помощь будет очень признателен

Спасибо, Jon

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...