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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0202
y.tackエディタへの操作6解決


y.tack

リンク

2016/2/2(Tue) 21:46:16|NO.74417

DSや3DSみたく
いやいやプチコンみたくしたいんですけど
具体的には
エディタの左上の場所を実行画面の左下に配置し
左右の長さを実行画面と同じくしたいので 教えて欲しいです

一応 ググったんですけどウィンドウハンドルとか出てきて苦手分野ですw
ですよね HSP(自分)以外のアプリケーションを操作したいんですから
ウィンドウハンドル必要ですよねw



この記事に返信する


KA

リンク

2016/2/3(Wed) 06:14:59|NO.74422

なんだか愉快で楽しそうですね。

>>エディタの左上の場所を実行画面の左下に配置し
>>左右の長さを実行画面と同じくしたい
ウインドウの下に幅を揃えて配置したいという意味ですか?

>>エディタ
HSPで作ったソフトの実行画面(ウインドウ)ですか?

>>実行画面
他ソフトの実行画面(ウインドウ)ですか?

>>HSP(自分)以外のアプリケーションを操作したいんですから
>>ウィンドウハンドル必要ですよねw
少なくとも相手の幅と位置を取得するのに必要です。

相手の画面が全画面表示だったらどうするんだろう?



Y_repeat(旧y.tack)

リンク

2016/2/3(Wed) 06:49:04|NO.74424

ども。具体的とか書いて、細かいとこ詰めて書いてなかったかもしれません

>>>エディタの左上の場所を実行画面の左下に配置し
>>>左右の長さを実行画面と同じくしたい
>ウインドウの下に幅を揃えて配置したいという意味ですか?
そうです

>>>エディタ
>HSPで作ったソフトの実行画面(ウインドウ)ですか?
HSPのデフォエディタですね
teraPadとかに変更したくなるかもしれませんが

>>>実行画面
>他ソフトの実行画面(ウインドウ)ですか?
HSPで作成したexeの実行画面です

>>>HSP(自分)以外のアプリケーションを操作したいんですから
>>>ウィンドウハンドル必要ですよねw
>少なくとも相手の幅と位置を取得するのに必要です。
なるほど

>相手の画面が全画面表示だったらどうするんだろう?
それでも下に表示でも(つまり表示できない)とか。普通に非表示とか

さくらさんとこに何かありそうかな。と思って探しに行ったら
クリックしたハンドルと名前を表示と
ウィンドゥ移動のモジュールがありました
名前はonipadっていうみたいです
名前からハンドルを調べれたら更に使いやすくなりそうなんですが



Y_repeat(旧y.tack)

リンク

2016/2/3(Wed) 08:19:48|NO.74426

#include "sysval.as"
#include "gblconst.as"
#include "winapi32.as"
の3つのFILEが必要みたいです(stdlibにあります)
stdlibはさくらさんが配布している巨大FILEですw



Y_repeat(旧y.tack)

リンク

2016/2/3(Wed) 08:27:47|NO.74427

なんとか自己解決しました
過去ログのosakanaさんのスクリプトと
さくらさんのstdlibを切り貼りしてなんとなく出来ましたw

#include "sysval.as" #include "gblconst.as" #include "winapi32.as" #uselib "kernel32.dll" ;#func CloseHandle "CloseHandle" sptr #func GetProcessId "GetProcessId" sptr #uselib "user32.dll" ;#func GetDesktopWindow "GetDesktopWindow" ;#func GetTopWindow "GetTopWindow" sptr ;#func GetWindowThreadProcessId "GetWindowThreadProcessId" sptr,sptr ;#func GetNextWindow "GetNextWindow" sptr,sptr ; ないもよう ;#func GetWindow "GetWindow" sptr,sptr ;#func IsWindowVisible "IsWindowVisible" sptr ;#func GetWindowLong "GetWindowLongA" sptr,sptr #uselib "shell32.dll" ;#func ShellExecuteEx "ShellExecuteExA" sptr /* 実行ファイル名からプロセスIDを探す */ #uselib "kernel32.dll" #func CreateToolhelp32Snapshot "CreateToolhelp32Snapshot" sptr,sptr #func Process32First "Process32First" sptr,sptr #func Process32Next "Process32Next" sptr,sptr ;#func CloseHandle "CloseHandle" sptr ;#define SW_SHOW $00000005 #define SEE_MASK_NOCLOSEPROCESS $00000040 #define TH32CS_SNAPPROCESS $00000002 #define th32ProcessID 2 #define szExeFile 9 ;#define SW_SHOW $00000005 ;#define SEE_MASK_NOCLOSEPROCESS $00000040 ;#define GW_HWNDNEXT $00000002 ;#define GW_HWNDPREV $00000003 ;#define GWL_HWNDPARENT $FFFFFFF8 ;#define WM_GETTEXT $0000000D ;#define WM_GETTEXTLENGTH $0000000E ;#define WM_CLOSE $00000010 screen 0,640,250 #define hProcess 14 // 起動 filename = "hsed3.exe" ; exec filename wait 50 // プロセスのスナップショットをとる CreateToolhelp32Snapshot TH32CS_SNAPPROCESS, 0 if stat = -1 :stop hsnapshot = stat dim pe32, 74 ; PROCESSENTRY32 構造体 pe32 = 296 ; 構造体のサイズ // スナップショットから取得 Process32First hsnapshot, varptr(pe32) // 一致するファイル名を探す repeat if stat = 0 :break dupptr exefile, varptr(pe32.szExeFile), 260, 2 ; XP以降はファイル名のみでそれ以前はフルパスらしい。 if exefile = filename { ; 小文字に変換してから調べた方が良いかも。 mes "プロセスID:" + pe32.th32ProcessID + " : " + exefile my_pID=pe32.th32ProcessID } Process32Next hsnapshot, varptr(pe32) loop CloseHandle hsnapshot pid_target = my_pID ; GetDesktopWindow ; GetTopWindow stat GetTopWindow 0 ; これでも良いみたい hw = stat wait 50 sdim wndtxt, 256 repeat if hw = 0 :break IsWindowVisible hw if stat { ; 可視状態のウィンドウ GetWindowLong hw, GWL_HWNDPARENT if stat = 0 { ; 親ウィンドウを持たないウィンドウ GetWindowThreadProcessId hw, varptr(pid) if pid = pid_target { ; 探しているプロセスIDと一致 mes "プロセスID:" + pid mes "ウィンドウハンドル:" + hw my_hw=hw sendmsg hw, WM_GETTEXT, 256, varptr(wndtxt) mes "ウィンドウタイトル:" + wndtxt break } } } GetWindow hw, GW_HWNDNEXT ; 次のウィンドウハンドル取得 hw = stat loop // 実行プロセスをウィンドウハンドルから終了 ; sendmsg hw, WM_CLOSE, 0, 0 mes "終了" goto *_2nd #ifdef __hsp30__ #ifndef __EXWINSTYLE__ #define __EXWINSTYLE__ #module #deffunc Exobjsizepos int prm1,int prm2,int prm3,int prm4,int prm5 ;******************************************************************************* ; ウィンドウのサイズ、位置を変更 (Exobjsizepos) ; ; 戻り値 : 成功 stat=1 ; ; ・書式 Exobjsizepos hwnd,x,y,w,h ; ・引数 nhwnd (int) : ウィンドウハンドル ; x (int) : 0〜(0) 位置 x ; y (int) : 0〜(0) 位置 y ; w (int) : 0〜(winx) 幅 ; h (int) : 0〜(winy) 高さ ; ・タイプ モジュール命令 ; ;-- (NOTE) --------------------------------------------------------------------- ; ; (使用例) ; Exobjsizepos 0,100,100,400,500 ;******************************************************************************* whandle = prm1 : if whandle==0 : whandle=hwnd x = prm2 : if x<=0 : x=0 y = prm3 : if y<=0 : y=0 w = prm4 : if w<=0 : w=ginfo(10) h = prm5 : if h<=0 : h=ginfo(11) MoveWindow whandle,x,y,w,h,1 return stat #undef EDGE_RAISED #undef EDGE_SUNKEN #undef EDGE_ETCHED #undef EDGE_BUMP #undef BF_LEFT #undef BF_TOP #undef BF_RIGHT #undef BF_BOTTOM #undef BF_RECT #undef BF_MIDDLE #undef BF_SOFT #undef BF_ADJUST #undef BF_FLAT #undef BF_MONO #global #endif #endif *_2nd myx=ginfo(4) myy=ginfo(7) Exobjsizepos my_hw,myx-100,myy,800,450
うーん想像ほどカッコよくないw



科学太郎

リンク

2016/2/3(Wed) 11:00:55|NO.74429

> の3つのFILEが必要みたいです(stdlibにあります)
> stdlibはさくらさんが配布している巨大FILEですw
ここまで教えてくれるのならばリンクも張って欲しいですね。



Y_repeat(旧y.tack)

リンク

2016/2/3(Wed) 18:24:21|NO.74435

さくらさんのサイト
http://hspnext.com
の「HSP module & macro Library (stdlib)」
の一番下の方の
「ダウンロード : stdlib110.lzh ダウンロードサイズ : (698KB) 」
ってとこでDL出来ます
直LINK禁止なとこも多いのでご了承ください
(さくらさんのとこがどうだったかは覚えていませんが)

今、確認したら
sysval.as
gblconst.as
winapi32.as

urlmon.as
version.as
wininet.as
が必要です
他にもちょこちょこフォルダ下へincludeしてるのを修正したり
APIをちょこちょこコメントアウトしてください
試すだけならstdlibフォルダにスクリプトを置いて実行するのが楽ですねw

サンプルスクリプトは

screen 0,400,400
入れて
最後を

myx=ginfo(6) myy=ginfo(5) Exobjsizepos my_hw,myx,myy,500,600
と更新するとちょっと楽しいですw



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