Эта проблема сводила меня с ума всю ночь. Я сделал аналогичную вещь в 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