Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13048 / 13646 ツリー ←次へ | 前へ→

【6840】アプリケーションが入力可能状態になるまで待機? カンセツ 03/8/6(水) 17:19 質問
【6844】Re:アプリケーションが入力可能状態になるま... よろずや 03/8/6(水) 23:18 回答
【6890】Re:アプリケーションが入力可能状態になるま... オックン 03/8/8(金) 17:42 質問
【7298】Re:アプリケーションが入力可能状態になるま... カンセツ 03/9/1(月) 19:26 発言
【7299】Re:アプリケーションが入力可能状態になるま... Kein 03/9/1(月) 21:37 回答

【6840】アプリケーションが入力可能状態になるま...
質問  カンセツ  - 03/8/6(水) 17:19 -

引用なし
パスワード
   こんにちは。
いつもお世話になっています。

Excelから、<ShellExecute>であるアプリケーションファイルを開く様に
しているのですが、現状、Sleep関数で開き終わってコマンド入力可能状態になるまで待機させています。

*************************************************************************
  ShellExecute(hWnd, "open", "開くファイルパス",
                     vbNullString,vbNullString, 1&)

  Sleep(5000)

  次の処理
   ・
   ・
*************************************************************************

これだとどんなサイズのファイルも5000ms待機してしまいます。
これを入力可能になり次第、すぐに次の処理に移りたいのですが。
ん〜。
次の処理とは、その開いたファイルに対して<SendMessage>でキー送信しています。
ですので、完全に開き終わるまで同期をとる必要があります。


<ShellExecute>で開く必要があるのは、このアプリケーションはバージョン違いが
同時にPC内に存在することができ、そのうちの任意のバージョンで絶対に開かせたい
為に、簡単に拡張子に関連付けられているアプリケーションで開いてくれるこのAPIに
しています。
※ このソフトを実行前に、エクスプローラからこのファイルを開くと、任意のバージョ
  ンで開く状態にしておくというのが前提条件になりますが。


わかりずらいですがお願いします。

【6844】Re:アプリケーションが入力可能状態になる...
回答  よろずや  - 03/8/6(水) 23:18 -

引用なし
パスワード
   >次の処理とは、その開いたファイルに対して<SendMessage>でキー送信しています。
>ですので、完全に開き終わるまで同期をとる必要があります。

WaitForInputIdle を使えばよろしいかと。

【6890】Re:アプリケーションが入力可能状態になる...
質問  オックン  - 03/8/8(金) 17:42 -

引用なし
パスワード
   途中からの割り込みすいません。

閲覧をしていましたら、

>WaitForInputIdle を使えばよろしいかと。

と回答がありましたが、
できれば具体的に教えていただけないでしょうか?

わがままな質問で、本当にすいません。

【7298】Re:アプリケーションが入力可能状態になる...
発言  カンセツ  - 03/9/1(月) 19:26 -

引用なし
パスワード
   こんにちは。

>WaitForInputIdle を使えばよろしいかと。

CreateProcessではなくShellExecuteを使いたいので・・・・・・・

【7299】Re:アプリケーションが入力可能状態になる...
回答  Kein  - 03/9/1(月) 21:37 -

引用なし
パスワード
   入力可能な状態になるまでの待機時間を、さらに細かく検出する。ということぐらいなら・・

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Test()
 Dim WshShell As Object, oExec As Object

 Set WshShell = CreateObject("WScript.Shell")
 Set oExec = WshShell.Exec("アプリケーションのフルパス")
 Do While oExec.Status = 0
   Sleep 100
 Loop
 '次の処理
End Sub

のようにすれば可能ですが・・。

13048 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free