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
せっかく、.NETなら・・・
こんな方法もあります。
http://dobon.net/vb/dotnet/process/getprocessesbyname.html
http://dobon.net/vb/dotnet/process/getprocesses.html
ご参考までに・・・
以上。
早速のお返事有難う御座います。
参考に以下のように記述しましたが、
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
> 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だもん。
先のURLでのサンプルは、私の環境では、何の問題もなく
動作しました。
2002 でも、2003 ででも、エラーなく動作しましたが・・・
さて何でしょう・・・
以上。
知るか!ぼけ!
氏ね!逝ってよし!
プロセスを取得するってことは
パソコンの種類や取得するエクセルなどに影響などが出てくるのではないでしょうか?
つまり、エクセルの種類が違うとか、パソコンの種類が違ったなどが原因
ではないでしょうか?