none
SendInputでALT+Nをすると、終了後にALTが押されっぱなしになる。

    質問

  • VC++2008(MFC9)で、他のアプリケーションをコントロールするコードを書いています。
    対象のアプリケーションは、XP上のOffice(2003/2007)で、SaveAsダイアログに、ALT+Nを送信して、
    フォーカスを強制的にファイル名入力欄へ動かそうとしていますが、
    SendInputをした後、ALTキーが押されっぱなしになったような動きになってしまいます。
    キーボード操作で右ALTキーを押してはなすとなおります。
    キーボード操作なしに正常に動作させるにはどうすればいいのでしょうか?
    INPUT構造体の組み立てに誤りがあるのでしょうか?

    ------
        ::SetForegroundWindow(targetHWnd);
        ::SetActiveWindow(targetHWnd);

        INPUT rginp[6];
        rginp[0].type = INPUT_KEYBOARD;
        rginp[0].ki.wVk = VK_LMENU;
        rginp[0].ki.wScan = MapVirtualKeyEx(VK_LMENU,0,GetKeyboardLayout(0));
        rginp[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
        rginp[1].type = INPUT_KEYBOARD;
        rginp[1].ki.wVk = 'N';
        rginp[1].ki.wScan = MapVirtualKey('N',0);
        rginp[1].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
        rginp[2].type = INPUT_KEYBOARD;
        rginp[2].ki.wVk = 'N';
        rginp[2].ki.wScan = MapVirtualKey('N',0);
        rginp[2].ki.dwFlags = KEYEVENTF_KEYUP;
        rginp[3].type = INPUT_KEYBOARD;
        rginp[3].ki.wVk = VK_LMENU;
        rginp[3].ki.wScan = MapVirtualKeyEx(VK_LMENU,0,GetKeyboardLayout(0));
        rginp[3].ki.dwFlags = KEYEVENTF_KEYUP;
        // ドロップダウンが下がるのでESC
        rginp[4].type = INPUT_KEYBOARD;
        rginp[4].ki.wVk = VK_ESCAPE;
        rginp[4].ki.wScan = MapVirtualKeyEx(VK_ESCAPE, 0, GetKeyboardLayout(0));
        rginp[4].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
        rginp[5].type = INPUT_KEYBOARD;
        rginp[5].ki.wVk = VK_ESCAPE;
        rginp[5].ki.wScan = MapVirtualKeyEx(VK_ESCAPE, 0, GetKeyboardLayout(0));
        rginp[5].ki.dwFlags = KEYEVENTF_KEYUP;
        UINT result = ::SendInput(6, rginp, sizeof(INPUT));
    2010年2月10日 9:25

回答

すべての返信

  • 押下イベント発生にはKEYEVENTF_EXTENDEDKEYがついていますが、
    押上イベント発生にはKEYEVENTF_UPのみで、KEYEVENTF_EXTENDEDKEYがついていませんけれど、そういう話ではないでしょうか?

    jzkey
    2010年2月10日 12:11
  • rginp[3].ki.dwFlags = KEYEVENTF_KEYUP;

    rginp[3].ki.dwFlags = KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP;

    かな?
    2010年2月10日 12:12
  • こんにちは、フォーラムオペレーターの高橋春樹です。

    jzkeyさん、Maasanさん
    アドバイスの投稿有難うございました。

    coSepiさん
    MSDNフォーラムのご利用有難うございます。
    jzkeyさん、Maasanさんからアドバイスを頂いたと思うのですが、如何でしょうか?
    coSepiさんの現在の状況が気になるので、皆さんからのアドバイスに返信して頂けると助かります。

    今回、皆様からのアドバイスが、有用な情報だと思いましたので、回答マークを付けさせてもらいました。

    今後ともMSDNフォーラムを宜しくお願いします。


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2010年2月17日 4:50
  • Maasanさん、jzkeyさんの回答で解決しました。
    ありがとうございました。
    2010年2月27日 19:59