2017-07-05 75 views
2

我想擊鍵發送CTRL + SHIFT + END 的控制,在Embarcadero公司編寫的C++應用程序。我使用下面的代碼:SendInput對C++不採取Ctrl和Shift帳戶

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

// Appui sur Ctrl 
ip.ki.wVk = VK_CONTROL; 
ip.ki.dwFlags = 0; 
SendInput(1, &ip, sizeof(INPUT)); 

// Appui sur Shift 
ip.ki.wVk = VK_SHIFT; 
ip.ki.dwFlags = 0; 
SendInput(1, &ip, sizeof(INPUT)); 

// Appui sur End 
ip.ki.wVk = VK_END; 
ip.ki.dwFlags = 0; 
SendInput(1, &ip, sizeof(INPUT)); 

Application->ProcessMessages(); 

// Relacher End 
ip.ki.wVk = VK_END; 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 

// Relacher Shift 
ip.ki.wVk = VK_SHIFT; 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 

// Relacher Ctrl 
ip.ki.wVk = VK_CONTROL; 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
SendInput(1, &ip, sizeof(INPUT)); 

然而,就像如果有在CTRL任何動作SHIFT鍵似乎是工作。

我失蹤了什麼?

+0

sendinput不是標準C++的一部分,你應該在你的問題中包含更多的標籤,如果你這樣留下,你應該包含該sendinput函數的代碼,但我猜你沒有它,不是每個使用C++的人都使用Embarcadero。 – exs

+0

說實話,我使用的是來自該項目的SendInput,附帶在win32.h文件中。這是由不在我公司的其他人完成的,所以我不能給出任何準確的想法。 –

+0

它用於合成擊鍵 – Asesh

回答

1

問題是,vk_End鍵是一個擴展鍵。所以,你應該在標誌宣告本:

`eip.ki.dwFlags = 0; 
ip.ki.wVk = VK_END; 
ip.ki.dwFlags = 0; 
ip.ki.dwFlags = ip.ki.dwFlags || 1; 
SendInput(1, &ip, sizeof(INPUT)); 

Application->ProcessMessages(); 

// Relacher End 
ip.ki.wVk = VK_END; 
ip.ki.dwFlags = KEYEVENTF_KEYUP; 
ip.ki.dwFlags = ip.ki.dwFlags || 1; 
SendInput(1, &ip, sizeof(INPUT));` 

請注意,我用1設置標誌,因爲我不知道你有沒有在你的C++定義一個常數,而是假定有一個恆定的某處。

+0

非常感謝,我敢打賭,這正是我需要的答案:)我會盡快嘗試,並告訴它它是否有效(我認爲它確實很好)。 –

相關問題