ページ 11

ソフトが起動しているかどうか

Posted: 2005年8月25日(木) 02:19
by Mario2
(トピックの件名)を確認するにはどうすればいいのでしょうか?

たとえば、(他に思いつかなかったので、例として)Winny.exeが起動している場合に、メッセージボックス(で警告)を出すには、どうすればいいのでしょうか?

(ちなみに、IEだと、クラス名が「IEFrame」(だったかな…)とはっきり分かっているので、また、タイトルが一定(レジストリ エディタ・電卓等)な物もFindWindowで取得できるので)

(ようするに、)クラス名が不明で、ソフトのタイトルが一定でない(タイトルの一部分は一定の)ソフトが起動しているかチェックをしたいのです。

一部おかしい文もあるのかもしれませんが、よろしくお願いします。

Re: ソフトが起動しているかどうか

Posted: 2005年8月25日(木) 08:32
by hira
EnumWindowでトップレベルのウィンドウを列挙し、ワイルドカードを使ってウィンドウのタイトルを比較すればいいのではないでしょうか。

とりあえずOar32.dllで使っているワイルドカードによる文字列比較の関数を置いておきます。

コード: 全て選択

Declare Function CharNext Lib "user32" Alias "CharNextA" (lpszCurrent As BytePtr) As BytePtr

Function StrMatch(ptn As BytePtr,str As BytePtr) As Long
	Select Case ptn[0]
		Case 0
			StrMatch=(str[0]=0)
		Case Asc("*")
			StrMatch=StrMatch(CharNext(ptn),str)
			If str[0] Then StrMatch=StrMatch Or StrMatch(ptn,CharNext(str))
		Case Asc("?")
			StrMatch=(str[0]<>0) And StrMatch(CharNext(ptn),CharNext(str))
		Case Else
			StrMatch=(memcmp(ptn,str,IsDBCSLeadByte(ptn[0])+1)=0) And StrMatch(CharNext(ptn),CharNext(str))
	End Select
End Function
第1引数がワイルドカードを使ったパターン文字列、第2引数が比較対象の文字列です。
戻り値は正しければ0以外、正しくなければ0となります。
なお、? 記号(今回は使うことがないかもしれませんが)は2バイト文字も表すことができます。
※StrMatch("テ?ト","テスト") <> 0 となります

EnumWindowのコードはお決まり(?)なのでここでは省略します(検索して調べてみてください)。

Re: ソフトが起動しているかどうか

Posted: 2005年8月25日(木) 11:04
by Mario2
hiraさん、サンプル?ありがとうございます。
このコードを参考にがんばってみます。

Re: ソフトが起動しているかどうか

Posted: 2005年8月25日(木) 21:09
by Tomorrow
解決済み? かも知れないですが、
起動中のプロセスを列挙する方法ではどうでしょうか。

http://support.microsoft.com/default.as ... ;ja;175030
http://www.google.co.jp/search?sourceid ... 9%E6%B3%95

Re: ソフトが起動しているかどうか

Posted: 2005年8月25日(木) 21:50
by Mario2
> 解決済み? かも知れないですが、
> 起動中のプロセスを列挙する方法ではどうでしょうか。
>
> http://support.microsoft.com/default.as ... ;ja;175030
> http://www.google.co.jp/search?sourceid ... 9%E6%B3%95

Tomorrowさん、回答ありがとうございます。
解決済みでした(笑)が、こちらも参考にさせてもらいます。