VB.NETにてFindWindowの使用


ZAQ  2004-06-23 20:40:06  No: 114202

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

せっかく、.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

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

参考に以下のように記述しましたが、
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

> 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

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

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

さて何でしょう・・・

以上。


楼式  URL  2004-07-12 16:25:32  No: 114207

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


マグ  2004-07-12 17:15:21  No: 114208

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

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


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加