HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0520
初心者FindWindow・・・全プロセスの列挙9未解決


初心者

リンク

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個起動してその処理をしたら
条件分岐は、メッセージ表示した後にストップしてしまいますよ。



ONION software Copyright 1997-2023(c) All rights reserved.