前回の質問で,教えていただいた方法でとりあえず解決できたのですが他のPCに持っていったらまた駄目になりました。何かライブラリなどが必要なのでしょうか?

他のPCはOSは同じですが,VisualBasicは入っていません。
--以下前回の質問--
VisualBasicで
Private Sub Command1_Click()
SendKeys ”%{TAB}”
Sleep (1000)
End Sub
の様に書いてCommand1をクリックすると1秒たってから,ALT+TABのキーストロークが送られてしまいます。キーストロークが送られてから1秒待ちたいのですが,どの様に書けばよいでしょうか。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/06/16 22:23:26
  • 終了:--

回答(3件)

id:zifree No.1

zifree回答回数175ベストアンサー獲得回数62005/06/16 22:57:45

ポイント40pt

http://www.hatena.ne.jp/1078308281

人力検索はてな - 複数のテキストボックスの中身をコピーして、他のウインドウの同数のテキストボックスにその内容をペーストする必要性が出てきました。 データ1+TAB+データ2+...とい..

以前同じような質問に回答した事がありましたので、参考にしてみて下さい。


標準モジュールに

Public Declare Function GetTickCount Lib ”kernel32.dll” () As Long

と記述し、


Public Sub Waiter(TT As Long)

Dim T1 As Long, T2 As Long

T1 = GetTickCount()

Do Until T2 - T1 >= TT

T2 = GetTickCount()

DoEvents

Loop

End Sub


と言うプロシージャを作っておきます。

その後、Sleep (1000)の代わりに


Private Sub Command1_Click()

SendKeys ”%{TAB}”

Waiter(1000)

End Sub


と書いて下さい。


なお、sleepを使う方法でも今回の方法でも、VBのランタイムさえ入っていれば、特にライブラリは必要ありません。

http://www.bcap.co.jp/hanafusa/VBHLP/SendInput.htm

SendInput関数を使ってキーストロークをシミュレートする

どうしてもだめでしたら、SendKeysの代わりにWindowsAPIのSendInputを使ってみて下さい。

id:tecra

なるほど。milliSecを取れる関数があるんですね。

2005/06/17 00:35:59
id:kidd_pclabo No.2

kidd_pclabo回答回数102ベストアンサー獲得回数02005/06/16 23:21:44

ポイント20pt

http://www.vector.co.jp/soft/win95/util/se188840.html

Visual Basic 6.0 SP6 ランタイムライブラリ(Windows95/98/Me / ユーティリティ)

VBのソフトは、VBランタイムが入ってない場合、正常に動かない場合があります。

id:tecra

やはりそうですか。

2005/06/17 00:36:02
id:toshi_nishida No.3

toshi_nishida回答回数525ベストアンサー獲得回数382005/06/16 23:47:11

ポイント30pt

urlはダミーです。tabを送って1秒待つと言う意味は、その間にWindowsが動いて次の操作の準備が出来ることを期待しているのだと思いますが、sleepで止めてしまうのはWindows全体の動作を止めてしまう事で、これでは意味がないのではないですか? PCによってtabが送られる前に停止してしまうと言うのも、1個目のdo eventsで動作が終わらない場合があるということが原因だとおもいます。基本的に、暇な時間にはDoEventsを繰り返すべきだと思います。


  StartTime = Timer

  While Timer < StartTime + 1

    If Timer < 1 Then StartTime = 0 ’ これは深夜0時に操作したときの逃げ

    DoEvents

  Wend


これは1秒間DoEventsを繰り返して待つ一例で、sleep(1000)の代わりに上の全文を入れる事で代用できます。実は深夜0時丁度に操作されると待ち時間が最大2秒まで長くなってしまいますが、ご参考まで。

id:tecra

milliSecで制御したかったのでこの方法が取れなかったのですが、1番目の回答者の方の方法を使えばこの方法でも制御できますね。ありがとうございます。

2005/06/17 00:39:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません