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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0527
めもりータスクにあるウインドウ取得8解決


めもりー

リンク

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

ありがとうございます!
このソース使わせてもらいます!笑



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