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



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.79662への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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