タスクにあるウインドウ取得
めもりー 2013/5/27(Mon) 08:42:56|NO.54349
タスク上にあるウインドウを
取得し、ある場合のみ
作業を実行すると言う風に
したいのですが、どうしたらよいでしょう?
ツノン 2013/5/27(Mon) 15:46:59|NO.54356
タスク上とはタスクバーの事ですか?
あるいは、実行中のプロセスの事でしょうか?
めもりー 2013/5/27(Mon) 16:32:06|NO.54359
実行中、そのとき開いてる
プロセスのことですね!笑
説明不足ですみませんf^_^;
ht. 2013/5/27(Mon) 16:46:41|NO.54361
ある場合というのがどういう場合か分からないと回答のしようがないです。
woodfields 2013/5/27(Mon) 17:02:41|NO.54362
「hsp プロセス列挙」でググってみたら
私の使ってるのでよかったら
↓(eternallyさんのeternally room(http://eternally.ddo.jp/)のモジュールを参考にしています)
http://homepage1.nifty.com/woodfields/wftool/common/_proccntrol.hsp
めもりー 2013/5/27(Mon) 20:00:18|NO.54370
woodfieldsさんありがとうございますw
さきほど
#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
ってのが投稿されていたのを見たのですが、
これを ”IE” というプロセスだけに指定して
↓のように
mes "「IE」は開いていません"
}else{
mes "「IE」は開いています"
みたいにするには、どうしたらよいでしょう?
woodfields 2013/5/28(Tue) 01:34:56|NO.54384
ウィンドウタイトルで検索したいわけですね
「IE」のウィンドウタイトルには、"- Windows Internet Explorer"という文字列が含まれます。
NO.54370引用スクリプトの
if tit="Windows タスク マネージャー":count+
を
newcom oReg,"VBScript.RegExp"
oReg("Pattern") =" - Windows Internet Explorer" ; 検索パターン($は末尾一致)
oReg("IgnoreCase")=1 ; 大文字小文字を区別しない
val_mach=oReg("Test", tit) : if val_mach : count+
delcom oReg
に変更すればよいとおもいます
cats 2013/5/28(Tue) 12:48:19|NO.54388
>めもりーさん
見たことあると思ったら私の作ったプログラムですね。
IEの場合タイトルがサイトに寄って変わるのてinstrを使いましょう。
#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 instr(tit,,"Internet Explorer")!-1:count+
loop
if count=0{
mes "「Internet Explorer」は見つかりませんでした"
}else{
mes "「Internet Explorer」は"+count+"個見つかりました"
}
stop
めもりー 2013/5/28(Tue) 15:04:29|NO.54390
ありがとうございます!
このソース使わせてもらいます!笑