タスクバーのリサイズ

2週間くらい前に,sangoがデスクトップのアイコンを全て消しているのをみて,どうせ消すならタスクバーも消した方が・・・
と考えてsoftware/WindowsManagerでタスクバーを消すコードを書いた.

;; タスクバーを消したり出したり
(define (toggle-taskbar)
  (let ((taskbar (find-window "Shell_TrayWnd" ())))
    (cond ((is-window-visible taskbar) (show-window taskbar sw-hide))
      (else                        (show-window taskbar sw-normal)))))

これでたしかに見えなくなるのですが,ウィンドウを最大化しても,元々タスクバーがあったスペースまで広がってくれません.見えなくしただけなので仕方が無い.

で,しばらくほっておいたのですが,Spy++片手にがんばってみた所,タスクバーのサイズを変える事ができました.
なんとなく分かった事は(嘘もあるかも)

  • タスクバーの高さは32の倍数,ただし一番小さいサイズは8
    これ以外だと,サイズが変わってくれません.
  • SetWindowPosのフラグにSW_NOSENDCHANGINGを付ける.
    これがついていないと,ぴくりとも動きません.
  • 最後に,SW_EXITSIZEMOVEを送る.
    これを送らないと,表示がおかしいです^^; の三つです.

残念な事に,幅等は変えられませんでしたが,高さを変えることは,ほぼ自由に出来ます.
(「タスクバーを固定する」にチェックが入っていると,高さ8にはできませんが・・・ 何故?)

で,これらをWindowsManager用コードにすると

(define (find-taskbar)
  (find-window "Shell_TrayWnd" ()))

(define (resize-taskbar height)
  (let ((taskbar (find-taskbar))
    (h (cond ((= height 0) 8)
         (else         (* height 32)))))
    (set-window-pos taskbar 0 0 0 0 h (+ swp-nozorder swp-nosendchanging))
    (send-message taskbar wm-exitsizemove 0 0)))

;; タスクバーを消したり出したり
(define (toggle-taskbar)
  (let ((taskbar (find-taskbar)))
    (if (is-window-visible taskbar)
    (begin
      ; タスクバーをリサイズしてから消さないと
      ; 最大化されたウィンドウのサイズが反映されない
      (resize-taskbar 0)
      (show-window taskbar sw-hide))
    (begin
      ; タスクバーを表示してからリサイズしないと
      ; 最大化されたウィンドウのサイズが反映されない
      (show-window taskbar sw-normal)
      (resize-taskbar 1)))))          ;; 1の部分を変えるとタスクバーの高さを変えれます.

;; Alt+Q でタスクバーの表示,非表示の切り替え
(set-key mod-alt #\q toggle-taskbar)

VirtuaWinを使っていると,色々怪しい挙動をします・・・ プラグインを書けば何とかなりそうな気もしますが,めんどくさい.
Alt+Qや,Alt+Space連打で直してください^^;

URLをかっこよく

kukiki-はURLがきれいで素敵.
pukiwikiはURLが汚くて凹む.

ページ名をアルファベットにすると大分ましになりますが,'/'が%2Fになってしまいます.
で,これを/に戻すとRFC的に合法なのかどうかは知りませんが,試してみたところ,firefoxとIEとw3mで表示できたのでOKという事にする.

オープンソースソフトウェアのコードをいじって使っていると,バージョンアップがめんどくさくて死にそうですが
世の中の人はどうしているんでしょうね? diffとpatchでがんばるのが正統派なのかな?
コミットしちゃえば楽なのでしょうが,機能減らすとかが多いので...
車輪の自作最強?


お名前: