«前の日記(2006-02-28 [火]) 最新 次の日記(2006-06-01 [木])» 編集
RSS: href="http://endoh-namazu.tierra.ne.jp/diary/index.rdf"


半期 四半期 全カテゴリ

新・なまず日記


2006-05-20 [土]

_ [デスクトップ][カスタマイズ][AHK]その一枚下に用がある

すごく久しぶりの更新になってしまいました。本業の方で、てんてこまいだったのです。どこでもそうだと思うのですが、年度の変わり目の、2月、3月、4月、というのはホントに忙しいものですね。なまずは普段から、本業の仕事はクビにならない程度にとどめ、空いた時間を趣味のプログラミングに充てようと努力しているのですが、そのツケがどっと来るんですよ、年度末に。自業自得といやあそれまでですが、もうクタクタ。温泉でしばらく湯治をしたいですよ。ほんで、温泉宿でプログラムを書きたいですよ。

さて、久しぶりの更新ですが、今回は小ネタ集といった感じです。
パソコンで作業しているときって、Webブラウザとメールソフトとか、Excelとテキストエディタとか、二つのアプリをいったりきたりしながら仕事をする事って多いですよね。今作業しているウインドウの 「一枚下」 のウインドウと仲良くしたい、そんなカスタマイズをご紹介します。

カスタマイズに使用する関数をファイルにまとめましたので、興味がおありでしたら、インクルードして、以下の記載を参考にして、使ってみてください。なお、使用には、AutoHotkeyの ver1.0.43.11以降が必要です。

以下のファイルをダウンロードして、解凍した後、中の"beneath_window.ahk"をインクルードしてお使いください。
beneath_window_v10100.zip

(1) 一枚下をチラっとみたい

例えばWebブラウザで、お気に入りの歌手のコンサートがあることがわかって、お友達にさっそくメールを書く、なんてことはよくありますよね。で、書き始めたのはいいけれど、「あれ?何日だったっけ?」なんて言って、Alt-TabでWebブラウザに戻って、日付を確認して、またAt-Tabでメールソフトに戻って、続きを書いてたら、「あら?時間は何時だったっけ?」またAlt-Tabで...なんてことが何度も続くと、Akt-Tabをガチャガチャするのがイヤになってきたりしませんか?ちょっと一枚下のウインドウをみたいだけなのに、行って戻るのに二度もAlt-Tabを押すなんて...

もっと、チラっと、一枚下を見たい、そんな方は、以下のコードをautohotkey.iniに書いてみてください。

#Persistent
  BNW_FindBnthWin("ahk_class KageWnd",true) ; 「影」は除外
return

#Include, beneath_window.ahk
!space:: actv_win := WinActive("A") WinGet,style,Style,ahk_id %actv_win% if(style & 0x80000000){ ; ポップアップウインドウだったら、一時的に消す WinHide, ahk_id %actv_win% KeyWait, Alt WinShow, ahk_id %actv_win% } else{ bnthWin := BNW_FindBnthWin(actv_win) ; 一枚下のウインドウを取得 WinActivate, ahk_id %bnthWin% KeyWait, Alt WinActivate, ahk_id %actv_win% } return

このコードで、Altとスペースを同時に押している間だけ、一枚下のウインドウが前面に来ます。そして、Altを離すと、元に戻ります。下のウインドウが見えるのはキーを押している間だけですから、チラっと一枚下を見るのに便利です。

もし、一番上のウインドウが、ポップアップウインドウ(例えば、ファイル選択ダイアログなど)だったら、一枚下をActiveにしても、そのウインドウは上に来ないので、その場合は、一番上のウインドウを一時的に消去することにしています。

なお、#Persistentの中に書いたのは、「一枚下」のウインドウを検索する際の、除外条件指定です。なまずは、「陰」というフリーソフトで、ウインドウに陰をつけているのですが、この陰は、ようするに半透明のウインドウなので、そのままでは、「一枚下」のウインドウが単なる陰になってしまって、なんのことやら、ということになるのです。それで、#Persistentの中のBNW_FindBnthWin()で、陰ウインドウを除外しているわけです。

まったく小ネタらしい小ネタですが、意外と便利で、なまずのお気に入りです。だまされたと思ってやってみてくださいよ。結構気に入ると思いますよ。

(2) 下のウインドウを見ながら上のウインドウで作業がしたい

先ほどの、下のウインドウをチラっと見る、だけではなくて、いつも下のウインドウを見ながら作業をしたい、ということもあります。しかし、下のウインドウは、今作業している、上のウインドウで隠れている。二枚を並べられればいいけれど、デスクトップの大きさには限界がある。そんなときどうする?

Windows2000やXPには、ウインドウを半透明にする機能があります。AutoHotkeyなら簡単に設定できますので、それで、今作業している上のウインドウをスケスケにしてしまえば、下のウインドウが透けて見えます。透けて見える下のウインドウの情報を見ながら、上のウインドウで作業ができるわけです。

それだけでは芸がないので、透明度を、パネルで自由に変更できるようにしてみました。これは結構気持ちがいいですよ。

以下のようなコードを書いてください。

#Include, beneath_window.ahk

$!r:: KeyWait, Alt, T0.3 ; 0.3秒長押しで、透明度設定パネル出力 if(ErrorLevel == 1){ BNW_TransWin("panel") KeyWait, Alt } else{ BNW_TransWin("toggle") KeyWait, Alt ; Send,{Alt} ; もし、Altが残るようなことがあったら、ここでAltを出して } return

このコードでは、Alt-rで透明化、透明化した状態でもう一度Alt-rを押すと透明化解除です。さらに、Alt-rを0.3秒間長押しすると、透明度調整用のパネルがでますので、これをカーソルキーやマウスで動かすと、透明度を変更できます。パネルは、Escキーで消えます。透明度パネルを消さないと、新たな他のウインドウの透明化や、透明化解除は、機能しないようになっていますからよろしく。
Alt-rの使い方などや、「長押し」の秒数などのインタフェースに関しては、お好みで変更してみてください。

※5/23追記
透明化パネルが消去しづらかったので、透明化パネルがアクティブではなくなったら、その時点で透明化パネルを消すように修正しました。
この修正を加えたバージョンをVer1,01として、リリースしました。

(3) 一枚下のウインドウをキーでスクロールしたい。

上記の透明ウインドウを使っていると、透けて見える一枚下のウインドウを、スクロールしたくなることがあります。例えば、Webブラウザの記事の概要を、テキストエディタでまとめる、なんて場合。テキストエディタを透明化して、透けて見える一枚下のWebブラウザの記事を読みながら、テキストエディタで文章を書いていく、そんなとき、Webブラウザの記事の続きを読むためにスクロールしなきゃいけないんだけど、そのためだけにWebブラウザを一番上にもってくるなんてイヤですよね。 テキストエディタを上にしたままで、キーボードから手を離さずに、下のWebブラウザをスクロールさせたいわけですよ!

そんな時は、以下のコードを書いてみてください。

#Persistent
  BNW_FindBnthWin("ahk_class KageWnd",true) ; 「影」は除外
  BNW_ScrlBnthWin("init")
return

#Include, beneath_window.ahk
F1:: BNW_ScrlBnthWin("down") return
F2:: BNW_ScrlBnthWin("up") return

BNW_ScrlBnthWin()は、一枚下のウインドウ(BNW_FindBnthWin()で除外条件指定可)の、真ん中の位置にある子ウインドウ(親ウインドウの真ん中の座標値を含む子ウインドウ)に対して、マウスホイールのメッセージを送る関数です。前記の例では、F1でスクロールダウン、F2でスクロールアップします。

BNW_ScrlBnthWin()は、BNW_ScrlBnthWin("init")を実行してから、一度もActive(一番上)になったことがないウインドウに対しては、スクロールさせることができません。「あれ?スクロールしないや」と思ったら、一枚下のウインドウを一番上にして、それからまた一枚下にして、スクロールさせてみてください。そんなときこそ、(1) 一枚下をチラっとみたいを使って、チラっとでも、一枚下を一番上にしてくれたら助かります。

また、上記の例では、F1とF2をスクロールキーに使っていますが、これを、Ctrlとなんとかとか、Altとなんとかといったような、修飾キーとのコンビネーションでやりたい、ということは、当然考えますよね。でも、その場合は、注意が必要です。
BNW_ScrlBnthWin()は、一枚下のウインドウに、WM_MOUSEWHEELというメッセージを送り込むことによってスクロールさせているのですが、その時に、修飾キーを押していると、アプリによっては、メッセージの解釈が変わるのです。例えば、インターネットエクスプローラ(IE)で、Ctrlを押しながら、マウスホイールをクルクルしてみてください。スクロールするんじゃなくて、字の大きさが変わりますよね。それと同じことが、BNW_ScrlBnthWin()でも起こります。Altとのコンビネーションなら、大概のアプリで大丈夫のようですが、Microsoft Wordでは、Altとのコンビネーションではスクロールできないようです。なまずは、Wordでの動作をあきらめて、Altキーとのコンビネーションを使っています。皆さんも、いろいろ試して、最適なスクロールキーを捜してみてください。

(4) 一枚下(というか全て)のウインドウをマウスホイールでスクロールしたい。

今は、大概のマウスにはホイールが付いていて、付いてないマウスを探すほうが大変ですよね。ホイールの主な用途は、やはりスクロールだと思うのですが、標準の環境では、ホイールをまわしてスクロールするのは、一番上のウインドウで、さらに、フォーカスがあたっているコントロールのものに限ります。もっと直感的にスクロールさせたい、と考えるのは、なまずだけではないようで、例えば、なまずが愛用しているArtTipsというツールでは、「快適スクロール」という機能があります。この機能のOnにして、マウスホイールをクリクリすると、マウスカーソルの直下のコントロール(子ウインドウ)が、一番上じゃなかろうがフォーカスがあたっていなかろうがにお構いなく、みんなスクロールするようになります。これはとても便利な機能で、これに慣れてしまうと、もう、標準の環境ではホイールクリクリができない、というくらい、気持ちが良いものです。特に、透明化をしているときなど、なおさらです。

しかし、残念なことに、このArtTipsの「快適スクロール」機能は、(3) 一枚下のウインドウをキーでスクロールしたい。 と相性が悪く、あきらめざるを得ませんでした。今より環境が不便になることには耐えられないなまずは、しかたがないので、自分で、「快適スクロール」機能を作ってみました。なまず版「快適スクロール」なら、もちろん、(3)と共存できます。めでたしめでたし。

以下のようなコードを書いてみてください

#Persistent
  #MaxHotkeysPerInterval 150 ; ホイールを動かしたときに大量に発生する
                             ; ホットキーイベントを処理するため
  BNW_WhlScrlAnyWin("init")
return

#Include, beneath_window.ahk
WheelDown:: BNW_WhlScrlAnyWin("down") return
WheelUp:: BNW_WhlScrlAnyWin("up") return

これで、マウスカーソルの直下のウインドウを全部ホイールでスクロールさせることができます。もし、ArtTipsを使っているのなら、「快適スクロール」機能は、Offでお願いします。

ホイールを速く動かすと、大きくスクロールする、いわゆる「加速機能」も、実装してます。これも、一度慣れてしまうと手放せない機能なのですが、好みによっては、加速はないほうがいい、という方もおられるでしょう。そのような場合は、以下のように、デフォルトのパラメータを設定してください。

#Persistent
  #MaxHotkeysPerInterval 150 ; ホイールを動かしたときに大量に発生する
                             ; ホットキーイベントを処理するため
  BNW_WhlScrlAnyWin("init")
  BNW_WhlScrlAnyWin("setDefault",1,120) ; 加速度"1",最小スクロール幅"120"
return

加速度を"1"にすると、加速機能はなくなります。この値は小数を指定できて、デフォルトでは"1.5"を設定しています。

上記の「最小スクロール幅"120"」は、Microsoftが提唱する数字で、各アプリは、120以上の値が与えられたらなんかしなければならない、という決まりになっています。だから、120以上の値を設定しておけば、どんなアプリでもスクロール動作をしてくれるはずです。しかし、アプリによっては、もっと細かい値を設定できるものもあります。例えば、インターネットエクスプローラ(IE)や、Microsoft Wordなどです。このようなアプリに対しては、120よりもっと小さい値を与えると、ヌメヌメっと滑らかなスクロールして、これがまた気持ちがイイのです。と、いうことで、アプリ毎に、スクロールパラメータを設定できるようにしました。以下のようにコードを書いてください

#Persistent
  #MaxHotkeysPerInterval 150 ; ホイールを動かしたときに大量に発生する
                             ; ホットキーイベントを処理するため
  BNW_WhlScrlAnyWin("init")
  BNW_WhlScrlAnyWin("setEach","ahk_class Internet Explorer_Server",2,35)
                             ; IE(Sleipnirなども)に対する設定
  BNW_WhlScrlAnyWin("setEach","ahk_class _WwG",2.5,50)
                             ; ワード(Word Viewerも)に対する設定
  BNW_WhlScrlAnyWin("setEach","xyzzy",2,120)
                             ; ついでにxyzzyも加速度を上げる
return

特にIEのヌメヌメ感はタマラナイですよ。マイクロソフト インテリマウス エクスプローラのような、ホイールがカチカチしないでヌルっと動くようなマウスと一緒に使うと、ますます気持ちイイんだから。オススメです。

以上です。「一枚下」のウインドウと仲良くなって、快適なデスクトップライフをお送り下さい。



蛇足
今回の記事のタイトルですが、サンボマスターの名曲「そのぬくもりに用がある」のもじりのつもりなんですよ。こんなの、誰もわかんないよね。

本日のツッコミ(全2件) [ツッコミを入れる]
_ Inofrcgv (2010-02-26 [金] 06:18)

FVwF34 この間も俊太郎の詩をお http://www.stlouisbusinesslist.com/business/5021837.htm?info=viagra viagra, 5866624,

_ viagra (2010-03-08 [月] 10:57)

http://www.stlouisbusinesslist.com/business/5021837.htm?info=viagra viagra 袢

[]