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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0510
YuukiウィンドウハンドルからウィンドウIDに変換するモジュール8解決


Yuuki

リンク

2017/5/10(Wed) 21:05:29|NO.79662

ウィンドウハンドルからウィンドウIDに変換するモジュールを作ってみました。
間違いがあれば教えてください。

#module "WindowIDconvert" #uselib "user32.dll" #func GetWindowLong "GetWindowLongA" int,int #define GWL_USERDATA -21 #defcfunc WindowID int p1 gselID=ginfo(3) gsel 0 if p1=hwnd:gsel gselID:return 0//ウィンドウIDが0の場合 gsel gselID GetWindowLong p1,GWL_USERDATA//ウィンドウハンドルからウィンドウIDに変換 if stat<=p1:return -1 return stat #global



この記事に返信する


スペース

リンク

2017/5/10(Wed) 21:24:35|NO.79664

すごいですね



Yuuki

リンク

2017/5/11(Thu) 06:29:35|NO.79670

少し微妙だったので修正しました。

#module "WindowIDconvert" #uselib "user32.dll" #func GetWindowLong "GetWindowLongA" int,int #define GWL_USERDATA -21 #defcfunc WindowID int p1 gselID=ginfo(3) gsel 0 if p1=hwnd:gsel gselID:return 0//ウィンドウIDが0の場合 gsel gselID GetWindowLong p1,GWL_USERDATA//ウィンドウハンドルからウィンドウIDに変換 if stat<=0|stat>=ginfo(25):return -1//HSPウィンドウ以外のウィンドウの場合 return stat #global



いののて

リンク

2017/5/17(Wed) 16:49:25|NO.79826

関数名が「WindowID」だと分かりにくいので、「GetWindowIdFromHwnd(ウィンドウハンドルからIDを取得)」
など、具体的にすれば分かりやすいと思います。

モジュール名は「WindowIDconvert」ではなく「ConvertToWindowID」がいいと思います。



Yuuki

リンク

2017/5/17(Wed) 17:08:00|NO.79827

修正しました。

#module "ConvertToWindowID" #uselib "user32.dll" #func GetWindowLong "GetWindowLongA" int,int #define GWL_USERDATA -21 #defcfunc GetWindowIDFromHwnd int p1 gselID=ginfo(3) gsel 0 if p1=hwnd:gsel gselID:return 0//ウィンドウIDが0の場合 gsel gselID GetWindowLong p1,GWL_USERDATA//ウィンドウハンドルからウィンドウIDに変換 if stat<=0|stat>=ginfo(25):return -1//HSPウィンドウ以外のウィンドウの場合 return stat #global repeat 50 screen cnt mes "ウィンドウID="+GetWindowIDFromHwnd(hwnd) loop



掘木

リンク

2017/5/17(Wed) 19:30:14|NO.79828

ふむ…

// // モジュール部分 省略 // repeat 4 screen cnt*cnt mes "ウィンドウID="+GetWindowIDFromHwnd(hwnd) loop button "A",*o button "B",*o mes "B:"+GetWindowIDFromHwnd(objinfo_hwnd(stat)) *o
HSPウィンドウ以外のウィンドウを除外するコードに問題があるよ。

ところでこのコードは、
別に実行しているHSP製のプログラムのウィンドウハンドルを放り込んだ時に、ウィンドウIDを取得するっていうことが
可能な見込みで作っているのか、不可能な見込みで作っているのか、未定義で作っているのか…。



Yuuki

リンク

2017/5/17(Wed) 19:47:42|NO.79829

掘木さん。ありがとうございます。

if stat<=0|stat>=ginfo(25):return -1


if stat<=0|stat>=1000:return -1
にすれば、
うまくいくと思います。



いののて

リンク

2017/5/18(Thu) 13:09:05|NO.79836

ボタンにUserDataを持たせてGetWindowIDFromHwndでIDを取得したら-1が返ってこない。
逆にウィンドウIDが1001以上のウィンドウをGetWindowIDFromHwndでIDを取得したら-1が返ってくる。
GetClassName関数でクラス名が「hspwnd0」かどうかでHSP製ウィンドウか判断するのがいいと思います。


#uselib "user32.dll" #func SetWindowLong "SetWindowLongA" int,int,int button "Button",*dummy:hButton=objinfo(stat,2) SetWindowLong hButton,-21/*GWL_USERDATA*/,10 mes "ウィンドウID="+GetWindowIDFromHwnd(hButton) screen 10000 mes "ウィンドウID="+GetWindowIDFromHwnd(hwnd) *dummy



Yuuki

リンク

2017/5/20(Sat) 21:40:40|NO.79899

ありがとうございます。
これでどうでしょうか...

#module "ConvertToWindowID" #uselib "user32.dll" #func GetClassName "GetClassNameA" int,var,int #cfunc GetWindowLong "GetWindowLongA" int,int #define GWL_USERDATA -21 #defcfunc GetWindowIDFromHwnd int p1 sdim class,256 GetClassName p1,class,256 if class!"hspwnd0":return -1////HSPウィンドウ以外のウィンドウの場合 return GetWindowLong(p1,GWL_USERDATA)//ウィンドウハンドルからウィンドウIDに変換 #global repeat 50 screen cnt wait 2 mes cnt mes GetWindowIDFromHwnd(hwnd) loop



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