hoge diary - September 28, 2007

[PC環境改善] cygterm で端末エミュレータのウィンドウ位置を指定

いつも cygterm から PuTTY 0.58 (蛭子屋さんのごった煮版) を使っていますが,PuTTY は起動時のウィンドウ位置を指定できません.

PuTTY の要望にもあるみたいですが,実装しないようです (「ウィンドウ位置の設定は PuTTY でやるより,ウィンドウシステムあるいは外部ツールに任せた方がいい」という意見です.ごもっとも).

しかしながら,(私のワガママですが)他アプリのウィンドウ位置は特にどうでもよくて,PuTTY のためだけに外部ツールを入れるのも何か負けた気分になるので,PuTTY を起動する cygterm を改造して,指定した位置に PuTTY のウィンドウを配置させることにしました.

改造対象は cygterm 1.07 です.

以下のように,cygterm.cfg に X_POS と Y_POS を指定することでウィンドウ位置を指定します.

TERM = path\to\putty.exe -telnet %s -P %d
TERM_TYPE = xterm
PORT_START = 20000
PORT_RANGE = 40
SHELL = /bin/zsh --login
X_POS = 0
Y_POS = 326

で,以下技術的な話.

CreateProcess() に渡す STARTUPINFO 構造体の dwFlagsSTARTF_USEPOSITION を設定し,dwX, dwY メンバにウィンドウ位置を入れて起動することで,大抵のアプリケーションの位置は指定できます.ただ,この情報を元にウィンドウ作成時の位置を指定するのはアプリ側の実装次第で,PuTTY は残念ながら STARTUPINFO による指定ができませんでした.

ですので,今回の改造では,CreateProcess() 後,WaitForInputIdle() で待機してから,EnumWindows()GetThreadProcessId() でウィンドウを探し出し,SetWindowPos() するようにしています.

コメント

名前(何でも可):

テキスト(http:// を含む内容は投稿できません):

トラックバック

トラックバック URI: https://www.pakunet.jp/hoge/trackback/2007092801

トラックバックはありません.


Valid XHTML 1.1! Valid CSS!
© 2004-2009 ぱくちゃん.
Last modified: Thu Nov 01 01:17:23 JST 2007