ここから質問投稿すると、最大4000ポイント当たる!!!! >>

VBの中で、データをエクセルシートに出力し、表示しているアプリがあります。このアプリは一定時間マウスもキーも操作しないと「パスワード入力画面」を表示することになっています。そこで問題は折角表示したエクセルシートが無処理の時間が長いと「パスワード入力画面」が表示される際にウインドウの後ろに入ってしまいます。このアプリは初期画面を前面表示(固定)で、うしろに隠れたエクセルシートをユーザーがさわることができなくなってしまいます。そこで苦肉の策で、エクセルのプロセスが動いている間はタイマーを止めて「パスワード入力画面」を表示しないようにしたいのですが、うまくエクセルのプロセスを監視できません。
エクセルは、
Set EX = CreateObject("Excel.Application")
   データをシートに表示
Set EX = Nothing
でシートを作っています。
プロセスの監視の仕方、あるいはエクセルシートを後面にさせない方法などご存知のかた、是非お助けください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

shell起動ではないんですね^^;


すいませんでした。

えと・・・
処理中のEXCELはWindowsのタスクにはあがってるのでしょうか?(固定の名前で)

もしそうなら、現在タスクにあがってるかどうかの判定をする方法もありますね。
これもAPI関数でFindWindowかなんかでできたような気がします。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。(*^_^*)
FindWindow関数でうまくいきました。
この関数でハンドルを取得できたので、後ろに隠れてしまったExcelシートを前面にだすこともできて大助かりです。(^O^)

お礼日時:2003/05/14 18:30

もしVBからshell関数を使ってEXCELを起動してあげれば


以下のようにしてプロセス監視できますよ。


以下の2つを定義してください。

Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal PROCESS As Long, lpExitCode As Long) As Long



Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long


それで、プログラム内で


INST = Shell("EXCEL.EXEのPATH", 2)

PROCESS = OpenProcess(1024 Or 1048576, True, INST)
MODORITI = GetExitCodeProcess(PROCESS, ENDWORK)


If ENDWORK = 259 Then
  「EXCELは起動中です」
Else
  「EXCELは終了しています」
End If

上の"EXCEL.EXEのPATH"の部分に「C:\Program Files\~EXCEL.EXE」を指定してください。
(shell関数のHELP参照)
でENDWORKの値をチェックすれば
一応プロセス監視できます。


わかりづらくてすいません。
また、回答違いでしたらすいません。
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
ここ数日この問題で情報を探しまくっているのですが、CreateObjectで作ったプロセスを監視するのは見つかりませんでした。(GetObjectで調べる方法はうまく動かなかったので)
もう少し探してみて見つからなかったら、Shell関数で起動する方法も検討してみたいと思います。

お礼日時:2003/05/14 13:46

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング