VB.NETにてFindWindowの使用


ZAQ  2004-06-23 20:40:06  No: 114202  IP: [192.*.*.*]

VB.NETにてFindWindow関数を使用し、現在EXCELが起動中かどうかを
取得したいのです。MSDNのヘルプを参考に以下のように記述しましたが、
EXCELの起動の有無に関わらず、返り値が常に0以上の値になってしまい
ます。
どなたかご存知の方がご教授お願い致します。

   Declare Function FindWindow Lib "user32" Alias _
      "FindWindowA" (ByVal lpClassName As String, _
      ByVal lpWindowName As Long) As Long

   Private Sub btnExecute_Click(ByVal sender As System.Object, _   
           ByVal e As System.EventArgs) Handles btnExecute.Click

        Dim hWnd As Long
 
        hWnd = FindWindow("XLMAIN", 0)

        If hWnd = 0 Then
            lblErr.Text = "EXCEL動いてない。"
        Else
            lblErr.Text = "EXCEL動いている。"
        End If

    End Sub

編集 削除
岡田 之仁  2004-06-24 02:10:12  No: 114203  IP: [192.*.*.*]

せっかく、.NETなら・・・
こんな方法もあります。

http://dobon.net/vb/dotnet/process/getprocessesbyname.html
http://dobon.net/vb/dotnet/process/getprocesses.html

ご参考までに・・・

以上。

編集 削除
ZAQ  2004-06-24 09:54:44  No: 114204  IP: [192.*.*.*]

早速のお返事有難う御座います。

参考に以下のように記述しましたが、
System.Diagnostics.Process.GetProcesses()の部分で
"リモート コンピュータからプロセス情報を取得できませんでした。"
の例外が発生します。何が原因でしょうか。
宜しくお願い致します。

Dim ps() As System.Diagnostics.Process = _
    System.Diagnostics.Process.GetProcesses()

Dim p As System.Diagnostics.Process
For Each p In ps
    'プロセス名を出力する
    lblPS.text += p.ProcessName
Next

編集 削除
nanashi  2004-06-24 11:11:09  No: 114205  IP: [192.*.*.*]

> Declare Function FindWindow Lib "user32" Alias _
>     "FindWindowA" (ByVal lpClassName As String, _
>     ByVal lpWindowName As Long) As Long

VB.NETでやるならLongをIntegerに直さなきゃ。
VB6.0のLong型は32bit、VB.NETのLong型は64bitだもん。

編集 削除
岡田 之仁  2004-06-24 20:34:52  No: 114206  IP: [192.*.*.*]

先のURLでのサンプルは、私の環境では、何の問題もなく
動作しました。

2002 でも、2003 ででも、エラーなく動作しましたが・・・

さて何でしょう・・・

以上。

編集 削除
楼式  URL  2004-07-12 16:25:32  No: 114207  IP: [192.*.*.*]

知るか!ぼけ!
氏ね!逝ってよし!

編集 削除
マグ  2004-07-12 17:15:21  No: 114208  IP: [192.*.*.*]

プロセスを取得するってことは
パソコンの種類や取得するエクセルなどに影響などが出てくるのではないでしょうか?

つまり、エクセルの種類が違うとか、パソコンの種類が違ったなどが原因
ではないでしょうか?

編集 削除