FindWindow・・・全プロセスの列挙
初心者 2013/5/20(Mon) 21:45:49|NO.54175
初めまして
HSP初心者です
いきなりですがわからないことがあって質問にきました
FindWindow関数を使って全プロセスタイトルを取得して
特定プロセスタイトルが2個、3個見つかれば自分をExitProcessするようなサンプルコードがほしいです。
よろしくお願いします
fortunehill 2013/5/20(Mon) 23:32:01|NO.54178
/*記事検索で「プロセス」して最初にHITする記事のサンプルが参考に成ると思います。*/
初心者 2013/5/21(Tue) 00:03:14|NO.54179
ありがとうございます。
ですが初心者なので改良の技術が全くないものでして。。。
別の人が書いてくれたソースで勉強したいとおもってます><
どうかお願いします。。
KA 2013/5/21(Tue) 06:48:53|NO.54183
>>初心者なので改良の技術が全くない
なら
>>別の人が書いてくれたソースで勉強
も出来ないでしょう。
まず「初心者」を脱するように勉強してください。
MillkeyStars 2013/5/21(Tue) 16:55:47|NO.54186
ウィンドウ列挙は、WinAPI の「GetTopWindow」と「GetNextWindow」を組み合わせればできる。
普通にソースを書いたら勉強にならないので、自分でがんばって。
ぴょぴょ 2013/5/21(Tue) 18:11:46|NO.54189
> FindWindow関数を使って全プロセスタイトルを取得して
> 特定プロセスタイトルが2個、3個見つかれば自分をExitProcessするようなサンプルコードがほしいです。
私のブログをどうぞ。
・パフォーマンス関連のカテゴリ
http://blog.goo.ne.jp/masaki_goo_2006/e/51983a0b8a9d301988b449d4adfdac95
・ウインドウ関連のカテゴリ
http://blog.goo.ne.jp/masaki_goo_2006/e/488240c44cd598d837bd3696b283a81d
なお、#uselib、#func、#cfunc を使います。
FindWindow関数と書いてあるので API は知ってますよね。
cats 2013/5/23(Thu) 15:18:03|NO.54233
ExitProcessっていうのは自分でつなげてください。
とりあえずタスクマネージャーを探すプログラム。
質問者様が何に使うか分からないので全部のタイトル探す形式にしました。
#module
#uselib "user32.dll"
#cfunc GetDesktopWindow "GetDesktopWindow"
#cfunc GetWindow "GetWindow" int,int
#cfunc GetWindowText "GetWindowTextA" int,int,int
#cfunc IsWindowVisible "IsWindowVisible" int
#uselib "kernel32.dll"
#cfunc lstrcmp "lstrcmp" int,int
#define MAX_PATH 260
#define GW_OWNER $00000004
#define GW_HWNDNEXT $00000002
#define GW_CHILD $00000005
#deffunc getproclist var prm1
WndDesk=GetDesktopWindow()
if WndDesk!0 {
WndCurWin=GetWindow(WndDesk,GW_CHILD)
}else{
return -1
}
buf="" : sdim szClassName,MAX_PATH : sdim chWinTxt,MAX_PATH
count=0
while WndCurWin!0
await
ret=GetWindowText(WndCurWin,varptr(chWinTxt),MAX_PATH)
if chWinTxt!"" {
vs=IsWindowVisible(WndCurWin)
if vs!0 {
owhwnd=GetWindow(WndCurWin,GW_OWNER)
if owhwnd==0 {
if chWinTxt!"Program Manager" {
lpString="Progman"
cp=lstrcmp(varptr(szClassName),varptr(lpString))
if cp!0 {
i=WndCurWin : buf+=str(i)+","+chWinTxt+"\n"
count++
}
}
}
}
}
WndCurWin=GetWindow(WndCurWin,GW_HWNDNEXT)
wend
prm1=buf
sdim szClassName,0 : sdim chWinTxt,0 : sdim buf,0
return count
#global
//タイトル取得開始
sdim buf,256
sdim tit,256
temp=str(temp) : work=str(work)
getproclist temp : num=stat
notepos=0 : count=0
sdim mhwnd,8,num : sdim proctitle,260,num
repeat num
await
repeat 2
getstr work,temp,notepos,',' : notepos+=strsize
if cnt==1 : proctitle(count)=work
loop
buf+=proctitle(count)+"\n";bufにタイトルを詰め込む
count+
loop
mes "取得したタイトル:\n\n"+buf+"\n"
//「Windows タスク マネージャー」のタイトル調べる
notesel buf
count=0
repeat noteinfo(0)
noteget tit,cnt
if tit="Windows タスク マネージャー":count+
loop
if count=0{
mes "「Windows タスク マネージャー」は見つかりませんでした"
}else{
mes "「Windows タスク マネージャー」は"+count+"個見つかりました"
}
stop
(´ω`) 2013/5/23(Thu) 16:16:51|NO.54234
ひょっとして、↓に近いことをしたい、ってことかしら。( ゜ω゜ )
http://hsp.tv/play/pforum.php?mode=pastwch&num=49554
初心者 2013/5/23(Thu) 21:03:16|NO.54248
お返事遅れて申し訳ございません。
みなさんコメント、アドバイスありがとうございます!
【CATS】さん
if count=0{
mes "「Windows タスク マネージャー」は見つかりませんでした"
}else{
mes "「Windows タスク マネージャー」は"+count+"個見つかりました"
}
stop
の所ですがタスクマネージャーを2個起動して
if count=2{
mes "「Windows タスク マネージャー」は見つかりませんでした"
}else{
end
}
stop
としたんですがプロセスが終了しません。。
原因はわかりますか??
cats 2013/5/27(Mon) 18:36:46|NO.54364
初心者さん
タスクマネージャーを2個起動してその処理をしたら
条件分岐は、メッセージ表示した後にストップしてしまいますよ。