2012-05-10 11 views
0

私はアプリケーションにInternet Explorerのアドレスバーに焦点を合わせるためにキーの組み合わせ(Alt + D)を出力しようとしていますが、必要なコードを実装する際に問題があります。私はすでに1つのキーを渡す方法を持っています:C++生成キーの組み合わせWINAPI(MFCなし)

void GenerateKey(int vk, BOOL bExtended) { 

KEYBDINPUT kb = {0}; 
INPUT  Input = {0}; 

/* Generate a "key down" */ 
if (bExtended) { kb.dwFlags = KEYEVENTF_EXTENDEDKEY; } 
kb.wVk = vk; 
Input.type = INPUT_KEYBOARD; 
Input.ki = kb; 
SendInput(1, &Input, sizeof(Input)); 

/* Generate a "key up" */ 
ZeroMemory(&kb, sizeof(KEYBDINPUT)); 
ZeroMemory(&Input, sizeof(INPUT)); 
kb.dwFlags = KEYEVENTF_KEYUP; 
if (bExtended) { kb.dwFlags |= KEYEVENTF_EXTENDEDKEY; } 
kb.wVk = vk; 
Input.type = INPUT_KEYBOARD; 
Input.ki = kb; 
SendInput(1, &Input, sizeof(Input)); 

return; 
} 

誰も希望の解決方法を達成するための助けを提供できますか?

SOLUTION:

void GenerateKeyCombination(int vk, int vk2, BOOL bExtended, BOOL bExtended2) { 

KEYBDINPUT kb = {0}; 
INPUT  Input = {0}; 
KEYBDINPUT kb2 = {0}; 
INPUT  Input2 = {0}; 

// Generate a "key down" 1 
if (bExtended) { kb.dwFlags = KEYEVENTF_EXTENDEDKEY; } 
kb.wVk = vk; 
Input.type = INPUT_KEYBOARD; 
Input.ki = kb; 
SendInput(1, &Input, sizeof(Input)); 

// Generate a "key down" 2 
if (bExtended2) { kb2.dwFlags = KEYEVENTF_EXTENDEDKEY; } 
kb2.wVk = vk2; 
Input2.type = INPUT_KEYBOARD; 
Input2.ki = kb2; 
SendInput(1, &Input2, sizeof(Input2)); 

// Generate a "key up" 1 
ZeroMemory(&kb, sizeof(KEYBDINPUT)); 
ZeroMemory(&Input, sizeof(INPUT)); 
kb.dwFlags = KEYEVENTF_KEYUP; 
if (bExtended) { kb.dwFlags |= KEYEVENTF_EXTENDEDKEY; } 
kb.wVk = vk; 
Input.type = INPUT_KEYBOARD; 
Input.ki = kb; 
SendInput(1, &Input, sizeof(Input)); 

// Generate a "key up" 2 
ZeroMemory(&kb2, sizeof(KEYBDINPUT)); 
ZeroMemory(&Input2, sizeof(INPUT)); 
kb2.dwFlags = KEYEVENTF_KEYUP; 
if (bExtended2) { kb2.dwFlags |= KEYEVENTF_EXTENDEDKEY; } 
kb2.wVk = vk2; 
Input2.type = INPUT_KEYBOARD; 
Input2.ki = kb2; 
SendInput(1, &Input2, sizeof(Input2)); 

return; 
} 

そしてそうのようにそれを呼び出す:0x12をはALTと0x44のです

 GenerateKeyCombination(0x12, 0x44, FALSE, FALSE); 

がある私は、次の方法を使用してこの問題を解決するために管理

D.

+0

私はwinapiを知らないのですが、2回のキーダウンイベントを提供しようとしましたか? – PlasmaHH

+0

それは私がやろうとしてきたことですが、そのことだけではなく、私のために働いています。私は4つの引数を取るが、Alt + Dはまだ動作していない2番目のメソッド 'GenerateKeyCombination'を追加しました。それはアドレスバーの代わりにクロムの設定アイコンを選択します。 – L337BEAN

答えて

3

アクセラレータを追加するプロジェクトリソースにマップし、実行時にアプリケーションにロードし、メッセージループでTranslateMessageとDispatchMessageがそれを見る前にTranslateAcelleratorを呼び出します。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646373%28v=vs.85%29.aspx参考までに。

+0

私はこれを答えとしてマークしています。これは恐らくこの問題を解決する適切な方法でしょう。しかし私は元の質問に追加した方法でそれを解決することができました。 – L337BEAN

関連する問題