投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/3/31 13:19:25
> 1,フォームにコマンドボタンとTimer関数を張り付ける。
それを言うなら、「Timer コントロール」ですね。
「Timer 関数」だと、「深夜零時からの経過秒数を求める関数」になってしまいます。

> 4,Timer関数の中にKeyPress(A)の処理を書く。
それを言うなら、Timer コントロールの「Timer イベント」ですね。
どれも "Timer" の名前で混同しそうですが、それぞれ別物なので用語の使い分けに御注意を。


> ボタンが押されると1秒毎にキーボード(仮にAとします)が
> 押されるプログラムを作成しようとしています。
"A" のキーが押されたことにしたい、という事ですね。

ではそのキーを、どこに、そして何のために送出したいのでしょうか?
その目的によって、適切なコードも難易度も変わってくるかと思います。

たとえば、自身の TextBox に A の文字を書き込みたいだけなら、
 Text1.SelText = "A"
などと書けます。自分以外のアプリの TextBox に送りつけたいのであれば、
少々手間がかかりますが、API で WM_SETTEXT メッセージを送ることで
実装することができます。あるいは Excel のセルに書き込みたいなら、
オートメーションあるいは DDE という手法を使うのが定番です。


その他、SendKeys ステートメントや SendInput API というものなどを利用して、
キー入力をアプリに送出するといった方法も使えるかも知れません。
http://hanatyan.sakura.ne.jp/vbhlp/SendInput.htm
http://hanatyan.sakura.ne.jp/vbhlp/keybdeve.htm
ただし、このキー操作を再現するという手法の場合、操作対象のウィンドウが
アクティブな状態になっていなければならないという制限を受けます。

そのため、下記の VB6 サンプルのように、アクティブにならないフォームを作ったり
http://msdn.microsoft.com/ja-jp/library/cc440905.aspx
あるいは、キーストロークを送出する直前に、AppActivate ステートメントなどを
使って、アクティブなウィンドウを切り替えるといった作業が必要となります。また、
そのアプリのどのコントロールに対して送りつけたいのかも重要になってくるかと思います。

もっとも、今回は 1秒間のタイマーを併用しているようですので、その1秒間の間に
ユーザーに手作業でウィンドウを切り替えてもらうだけでも良いかも知れませんけれども。


なお、VB6 の SendKeys ステートメントを使った方法の場合、DirectInput を
使ったアプリに対しては通用しないかと思います。また、お使いの OS がもしも
Vista 環境なのだとしたら、開発環境からではなく、EXE から実行しなければ
ならない点にも注意が必要です。何故ならば、デバッグ実行からでは
「実行時エラー '70': 書き込みできません。」になってしまうからです。
(SendKeys ステートメントの代わりに、SendInput API を使えば、
開発環境からの実行も行えますけれどね)

より低レベルな話だと:
http://vsug.jp/tabid/63/forumid/45/postid/1344/view/topic/Default.aspx