XPでVB6.0で動かしてたアプリなんですが、ファイルを保存するというところでSキーを押すと保存されていたんですがvistaで動かすとうまくいったり
いかなかったりでどうもうまく動きません、どうも他の窓に制御が行ってる
ようなんです、UACかUMCですかこれも止めてるし senskeys以外でもいいです
とにかく正確にキー入力したいんです。よろしくお願いします。
Win32APIのkeybd_eventを使う
http://natchan-develop.seesaa.net/article/32239750.html
> vistaで動かすとうまくいったりいかなかったりでどうもうまく動きません
SendKeys のグローバル ジャーナル フックの問題かな…。
でも、Vista 向け VB6 ランタイムは、SendKeys が動くように対策済みだったはずだし…。
(ちなみに Vista 対策版 SendKeys は、内部で SendInput API を利用しています)
まぁ、うまくいくこともある、という事は、別の問題なのでしょうけれども。
ちなみに、Office 2003 は、Service Pack 3 で解決済み。
http://support.microsoft.com/kb/938792/en-us
.NET Framework 1.1 は、下記のアップデートで。
http://www.microsoft.com/downloads/details.aspx?FamilyID=59b18749-74f9-4891-8cb5-b22970b58aa9&displaylang=ja
.NET 2.0 は最初から対策済み。.NET 1.0 は Vista 非対応。
> どうも他の窓に制御が行ってるようなんです
そもそも SendKeys は、対象のウィンドウに直接キーを送りつけているわけでは
無く、キー操作のエミュレートに過ぎないため、処理タイミングなどの外的要因により、
処理が失敗する可能性が比較的高いものです。あまり多用すべきものでも無いかと。
> とにかく正確にキー入力したいんです。
まず、対象のウィンドウをアクティブかつフォアグラウンドにしておきましょう。
また、SendKeys の第二引数の扱いにも注意。
それで駄目なら、SendInput API を直接呼びだすことも検討してみてください。
なお、対象となるウィンドウによって、別の方法で代用できる可能性もあります。
たとえばテキストボックスの場合は、キー操作の代わりに WM_SETTEXT を送るとか、
ボタン押下なら、IAccessible インターフェイスの accDoDefaultAction メソッドを
使うなどした方が、より確実に操作できるかと思います。