なでしこを明後日の方向に

日本語プログラム言語なでしこを応援しています

なでしこで別ウィンドウのサイズを変更する

ソシャゲのウィンドウがでかすぎる! しかも枠をドラッグでサイズ変更できない!

君、画面がでかすぎるって言われない?

こんな時はなでしこ(v1)でサイズ変更をしてみましょう
※ 外部ツール使用にあたるため動作対象外だったりBAN対象だったりの可能性はあります

「窓ハンドルサイズ設定」を使う

なでしこv1で指定したウィンドウのサイズを変更する方法を書いてみます。
使う命令はこれ。窓ハンドルサイズ設定

名前 窓ハンドルサイズ設定 ( まどはんどるさいずせってい )
引数 {=?}HANDLEにSIZEを
説明 HANDLEのウィンドウにSIZE「X1,Y1,X2,Y2」を設定する

引数のHANDLEは窓ハンドル検索などで取得します。

名前 窓ハンドル検索 ( まどはんどるけんさく )
引数 {=?}Aを|Aの
説明 タイトルAを持つウィンドウのハンドルを調べる。(ワイルドカードで指定可能)

窓ハンドルサイズ設定のかんたんなサンプル

//ごくごく簡単なサンプル
HANDLE=「*なでしこエディタ」窓ハンドル検索
HANDLE「100,0,900,300」窓ハンドルサイズ設定

ウィンドウタイトル「なでしこエディタ」を持つウィンドウのハンドルを取得します。(*はワイルドカード)
窓ハンドルサイズ設定でサイズを指定して出来上がり。
成功すればなでしこエディタのサイズが変わるはずです。

HANDLEについて

引数のHANDLEは変数です。 数値が入っています。
今回のHANDLEは1902140でした。

この数値はwindows(OS)がその部品(ウィンドウなど)を作る時に割り当てた番号で、一般的に「ウィンドウハンドル」と呼ばれています。
窓ハンドルサイズ設定は、OSに対して「この番号(HANDLE)のウィンドウのサイズを変更してください」と頼む命令となります。

HANDLEを使ってできること

HANDLEを引数にした命令は以下のものがあります(他にもあります)

・窓ハンドルテキスト取得 - テキスト(ウィンドウの場合はタイトル)を取得する
・窓ハンドル位置移動 - ウィンドウの位置を移動する
・窓ハンドルキー送信 - キーボードのキーを押したことにする
・窓ハンドルキャプチャ - ウィンドウを画像としてイメージ部品に描画する

・窓ハンドルサイズ設定 - ウィンドウのサイズ「X1,Y1,X2,Y2」を設定する
・窓ハンドルサイズ取得 - ウィンドウのサイズ「X1,Y1,X2,Y2」を得る
・窓ハンドル内サイズ取得 - ウィンドウのクライアントサイズ「X1,Y1,X2,Y2」を得る

ハンドルの取得方法いろいろ

ウィンドウタイトルがわかっている場合は「窓ハンドル検索」、 ウィンドウタイトルがわからない場合は「窓ハンドル座標検索」や「窓アクティブハンドル取得」でハンドルを取得します。

名前 窓ハンドル座標検索 (まどはんどるざひょうけんさく)
引数 {=?}X,Yの
説明 X,Yのウィンドウを得る

ヘルプにウィンドウを得るって書いてあるけどハンドルが返るはず

名前 窓アクティブハンドル取得 ( まどあくてぃぶはんどるしゅとく )
引数
説明 現在アクティブなウィンドウのハンドルを取得して返す。

「窓ハンドル検索」の例

//ウィンドウタイトルからHANDLEを取得する例
HANDLE=「*なでしこエディタ」窓ハンドル検索
もしHANDLE0ならば
  「見つからなかった」表示
違えば
  
HANDLE窓ハンドルテキスト取得
  それ表示

ハンドルが0だった場合、「見つからなかった」ということですので、エラー処理を入れておきます。 同じタイトルを持つウィンドウが複数あると誤爆する可能性があります。
タイトルだけでウィンドウを特定できるならこれで十分でしょう。

「窓ハンドル座標検索」の例

窓ハンドル座標検索」ではマウスカーソルの座標にあるウィンドウのハンドルを取得するのに便利です。 「母艦のキー押した時」や「ホットキー登録」のイベントに組み込むとよさそう。

母艦キー押した時~イベント

●イベント
 x=机上マウスX
 y=机上マウスY
 HANDLE=x,y窓ハンドル座標検索
 HANDLE窓ハンドルテキスト取得
 それ表示

窓ハンドルサイズ設定の注意点

ハンドルが取れたらサイズを指定するだけです。
ただし「窓ハンドルサイズ設定」命令の引数SIZEは「X1,Y1,X2,Y2」です。 X,Y,W,Hではないことに注意します。

割合のサイズにする

「ゲームのウィンドウでかいなー80%くらいにならないかなー」という時はまず元のサイズを取得するわけですが・・・

この時、「窓ハンドルサイズ取得」で得たサイズに0.8を掛けると縦横比が歪みます
この場合「窓ハンドル内サイズ取得」で得たサイズを使いましょう。

差はタイトルバーや左右と下のふちの部分です。

//CAPS LOCKを押すとアクティブな窓のサイズが80%になるプログラム
「CAPS LOCK」「変更適用」ホットキー登録

●変更適用
 HANDLE=窓アクティブハンドル取得
 HANDLE窓ハンドル内サイズ取得 //「0,0,640,400」などが返る
 それ「,」区切る
 それ「,,内W,内H」変数分配 //x,yは要らない
 
 HANDLE窓ハンドルサイズ取得 //外枠を含むサイズ
 元SIZEそれ
 それ「,」区切る
 それ「外X1,外Y1,外X2,外Y2」変数分配
 
 //クライアント部分を0.8倍にする
 新内W = 整数部分(内W * 0.8)
 新内H = 整数部分(内H * 0.8)
 新外X2 = 外X2 -内W +新内W
 新外Y2 = 外Y2 -内H +新内H
 新SIZE=「{外X1},{外Y1},{新外X2},{新外Y2}」
 HANDLE新SIZE窓ハンドルサイズ設定

実行結果