簡體   English   中英

Java和C ++都拒絕模擬箭頭鍵?

[英]Both Java and C++ Refuse to Emulate Arrow Keys?

好吧 這真讓我發瘋。 我正在用Java構建應用程序,它要求模擬鍵盤按鍵。 就像,我想欺騙整個計算機,以為正在按下某個鍵。 (不用擔心,我的意圖不是惡意的:P)問題是,我使用Java的Robot類來模擬按鍵,並且存在一個錯誤,該錯誤不允許在某些應用程序中按下箭頭鍵,無論出於何種原因。

因此,我想我將只制作一個小型C ++程序來處理輸入模擬並從Java調用它。 但是,這里有一個關鍵點:箭頭鍵對於某些程序仍然不起作用。 就像,它只是沒有注冊。 據我所知,它們是相同的程序,不適用於Java。

是否有任何方法可以在所有程序中100%地模擬箭頭鍵的按下? 目前,我可以使用任何語言。

這很重要,這是我到目前為止擁有的C ++程序。

#define WINVER 0x0500
#include <windows.h>
#include <iostream>
#include <cstring>

int main()
{
    INPUT ip;

    Sleep(2000);

    ip.type = INPUT_KEYBOARD;
    ip.ki.wScan = 0;
    ip.ki.time = 0;
    ip.ki.dwExtraInfo = 0;

    ip.ki.wVk = VK_RIGHT;
    ip.ki.dwFlags = 0;
    SendInput(1, &ip, sizeof(INPUT));

    Sleep(1000);

    ip.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &ip, sizeof(INPUT));

    return 0;
}

我真的希望有人能幫助我,因為我沒有主意。

如果必須要在Windows中的所有應用程序上運行都很重要,則可能必須編寫一個模擬HID的驅動程序-在Windows中將驅動程序安裝並注冊為鍵盤。 聽起來需要做很多工作,但是Microsoft具有Windows驅動程序工具包,並且Windows驅動程序工具包示例包中有一些有趣的示例,您可以簽出: https : //msdn.microsoft.com/zh-cn/library/ ff554118(v = vs.85).aspx

由於您的C ++程序,我假設您只需要Windows即可運行。

您確實可以使用C ++使用SendKeys類來做到這一點。 如本文鏈接的文章中詳述

盡管不推薦使用 keybd_event()但它是合成按鍵的另一個函數。 只要目標程序有重點,按鍵代碼就會顯示在按鍵記錄器上。 模擬開始菜單按鍵就這么簡單-

#include<iostream>
#include<windows.h>

using namespace std; 


int main(){
    cout<<"Standby : Simulating start menu key press \n\n";

    keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);

    return 0;
}

若要模擬向上和向下按下的箭頭鍵,請嘗試以下操作:

// simulate RIGHT key press 
keybd_event(VK_RIGHT,0,0,0);
keybd_event(VK_RIGHT,0,KEYEVENTF_KEYUP,0);

// simulate LEFT key press 
keybd_event(VK_LEFT,0,0,0);
keybd_event(VK_LEFT,0,KEYEVENTF_KEYUP,0);

// simulate UP key press 
keybd_event(VK_UP,0,0,0);
keybd_event(VK_UP,0,KEYEVENTF_KEYUP,0);

// simulate DOWN key press 
keybd_event(VK_DOWN,0,0,0);
keybd_event(VK_DOWN,0,KEYEVENTF_KEYUP,0);

keybd_event(不建議使用): https : //msdn.microsoft.com/zh-cn/library/ee504289.aspx

keybd_event: https ://msdn.microsoft.com/zh-cn/library/windows/desktop/ms646304( v= vs.85).aspx

虛擬鍵代碼: https : //msdn.microsoft.com/zh-cn/library/windows/desktop/dd375731(v=vs.85).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM