掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
EXCELにキー送信を確実にするためには? (ID:27180)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
OLEコンテナにExcelを貼り付けて制御しています。 ボタンを押すと例えば、下記のコードのように CTRL+Vを送信するなどExcelのショートカットキーを 使いたいと考えています。 下記の例のように貼り付けだけなら Pasteのメソッドも使えるのですがそのほかにも EXCELのメニュー(Alt+xx)も使いたいと思います。 ほとんどの場合、このコードでうまくいくのですが、 たまに、キー送信が失敗します。 (この場合、貼り付けが行われない) パソコンに負荷がかかっていると頻繁に失敗します。 (XP+EXCEL2000ならうまくいくが、 Vista+EXCEL2007だと失敗するなど) 確実にキーを送信する方法は、無いでしょうか? キー送信を受け取るまで待機するなど・・・ var InputKey: array[0..3] of TInput; AWH, TWH, WinHnd: HWND; TTh, STh: DWORD; Rtn: Integer; begin TWH := GetForegroundWindow; TTh := GetWindowThreadProcessId(TWH, nil); STh := GetCurrentThreadId; AttachThreadInput(STh, TTh, True); AWH := GetFocus(); Application.ProcessMessages; Sleep(20); inputKey[0].Itype := INPUT_KEYBOARD; inputKey[0].ki.wVk := VK_CONTROL; inputKey[0].ki.wScan := MapVirtualKey(VK_CONTROL, 0); inputKey[0].ki.dwFlags := 0; inputKey[0].ki.dwExtraInfo := 0; inputKey[0].ki.time := 0; inputKey[1].Itype := INPUT_KEYBOARD; inputKey[1].ki.wVk := Ord('V'); inputKey[1].ki.wScan := MapVirtualKey(Ord('V'), 0); inputKey[1].ki.dwFlags := 0; inputKey[1].ki.dwExtraInfo := 0; inputKey[1].ki.time := 0; inputKey[2].Itype := INPUT_KEYBOARD; inputKey[2].ki.wVk := Ord('V'); inputKey[2].ki.wScan := MapVirtualKey(Ord('V'), 0); inputKey[2].ki.dwFlags := KEYEVENTF_KEYUP; inputKey[2].ki.dwExtraInfo := 0; inputKey[2].ki.time := 0; inputKey[3].Itype := INPUT_KEYBOARD; inputKey[3].ki.wVk := VK_CONTROL; inputKey[3].ki.wScan := MapVirtualKey(VK_CONTROL, 0); inputKey[3].ki.dwFlags := KEYEVENTF_KEYUP; inputKey[3].ki.dwExtraInfo := 0; inputKey[3].ki.time := 0; Rtn := SendInput(4, inputKey[0], sizeof(inputKey[0])); Application.ProcessMessages; Sleep(20); AttachThreadInput(STh, TTh, False); 何か、良い方法はないでしょうか?
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.