ゲーム作成備忘録その2
すみません、また個人的なメモです。
読み流してやってくださいm(_ _)m
前回までのまとめ1.
外部プログラムのHWNDを取得できれば、
sendmsgによって様々な処理ができる。2.
ところが、HSPのシステム変数のhwndは、
HSPから起動されたHWNDしか保持していない。3.
したがって、一番カンタンなのは、
HWNDを取得しなくてもいいような処理で
代用すること。4.
ただし、ウィンドウの移動など
一部の機能が代用できていない
⇒結論、やっぱりHWNDを取得してメッセージを送りたい!
そこで、今回は、HSPから外部プログラムのHWNDを取得する方法を探る。
検索の結果、EnumWindowsというWINDOWSのAPIを使うと、
HWNDを取得することができるらしい。
コールバックルーチンが必要になるので、ちょくとのページから、
hscallbk10をダウンロード。hsphelpに突っ込む用のHSファイルはこちら
以下は、任意のタイトルのウィンドウを捕獲して最小化するコード
(*が全角なのに注意)
#include "hscallbk.as"
#uselib "user32.dll"
#func GetWindowText "GetWindowTextA" int, int, int
#func EnumWindows "EnumWindows" int, int;コールバック関数定義
#uselib ""
#func hogehoge "" int, intsdim tmp, 129
setcallbk pEnumWindowsProc, hogehoge, *EnumWindowsProc
mes "処理中..." : EnumWindows varptr(pEnumWindowsProc)
mes "処理完了"sendmsg hWnd_GET, $112, $F020 ;←(☆)
mes "取得したいウィンドウのタイトルに最小化メッセージを送りました"stop
*EnumWindowsProc
hWindow = callbkarg(0)
GetWindowText hWindow, varptr(tmp), 128
if tmp = "" : return 1 ;名前のないウィンドウは無視(高速化)
if tmp = "取得したいウィンドウのタイトル" : hWnd_GET = hWindow
return
最大化したいときは、←(☆)の部分を
sendmsg hWnd_GET, $112, $F030
終了させたいときは、←(☆)の部分を
sendmsg hWnd_GET, $112, $F060
元のサイズに復元したいときは、←(☆)の部分を
sendmsg hWnd_GET, $112, $F120
ウィンドウを任意の位置に移動するときは、
(??? 調査中)わからずじまい(汗)