WindowsManagerの使い方
WindowsManagerを起動した状態で,Ctrl+Alt+Dを押すと,以下のような画面が出るはずです.
この画面上では,Schemeというプログラミング言語の命令を評価(実行)する事ができます.
1+2や,変数の定義などもできます.
このように,WindowsManagerでは,評価の結果が画面に表示されます.
また,Schemeは多くの有名な大学のプログラミング入門等にも使われている言語です.
プログラミングを知らない方や,Schemeを知らない方でも,簡単に覚えれます.
もうひとつのScheme入門が入門に向いていると思います.
適当に,加減乗除でもしてみてください.ちょっと高機能な電卓としても使えますね.
system.scmが起動時に読み込まれます.設定を変更する際は,system.scmからloadされる,user.scmを編集すると良いです.
WindowsManager起動中にuser.scmを更新した場合は,インタプリタ上で
(load "user.scm")
とすれば,設定が更新されます.
よく使う機能はインタプリタ上で入力することなく,ショートカットキーで呼び出せるようにすると便利です.
set-key関数を使うことで,ショートカットキーを割り当てる事ができます.
set-key関数は
(set-key メタキー 仮想キーコード クロージャ)
のように使います.メタキーや仮想キーコードは,windef.scmを参考にしてください.
また,アルファベットや数字キーを使う場合は,キャラクタを使ってください.(#\a)等
たとえば,Alt+Enterに前面のウィンドウを最小化する機能を割り当てるには
(set-key mod-alt vk-return (lambda () (show-window (get-foreground-window) sw-minimize)))
のようにuser.scmに書いてください.
複数のメタキーを使いたい場合は
(set-key (+ mod-alt mod-control) vk-space ...)
のように,+で足してください.
ちなみに,多くのキーは奪う事ができるので
(set-key 0 #\a (lambda () (display "type a\n")))
などとすれば,メモ帳などで,'a'を入力する事ができなくなったり
(set-key mod-control #\c (lambda () (display "copy?\n")))
とすれば,コピーを無効にしたりできますが,一部のショートカットは上書きできないようです.
有名所では,Ctrl+Alt+Deleteは上書きできませんが,他の多くのWin+?のキーも上書きできないようです.(Win+L のウィンドウズのロックなど)
これを何とかする方法*1をご存知の方がいらっしゃいましたら,ぜひ教えてください.
基本的な算術関数等が使えます.また,init.scmやmisc.scmで多くの基本的な関数が定義されています.
winmove.scmはウィンドウを動かしたり,選択を切り替えたりに使える関数が定義されていますが
バージョンアップなどで,好き勝手に私がいじる可能性があります^^;
細かい便利な関数が沢山あるのですが,少しずつ説明を書きます・・・
init.scm, misc.scm, winmove.scm辺りを読んでみてください.
また,Windowsの機能を呼び出すための関数が,組み込み関数として定義されています.
多くの関数は,WindowsAPIと同じように使えます.
(私が)よく使うもの以外の説明は,後日・・・.WindowsAPIと同じように使える物がほとんどです.
(show-window ウィンドウハンドル 状態)
(show-window (get-foreground-window) sw-maximize)状態には以下の値が取れます(他にもありますが・・・)
(set-foreground-window ウィンドウハンドル)ウィンドウを最前面に表示します
(get-foreground-window)最前面のウィンドウのウインドウハンドルを取得します
(find-window ウィンドウクラス名 ウィンドウのタイトル)ウインドウクラス名,ウィンドウのタイトルからウィンドウハンドルを取得します.
(find-window () "電卓")
(get-window-text ウィンドウハンドル)ウィンドウのタイトルを取得します.
(sleep ?ms)
(launch コマンド カレントディレクトリ)カレントディレクトリは省略できます
(create-window-ex winproc exstyle class-name name style x y w h)
(create-window winproc class-name name style x y w h)
(destroy-window hwnd)
(post-quit-message 終了コード)
使えるWindowsAPIが非常に少ないので,要望があれば教えてください.
具体的なAPI名でもOKですし,やりたい事を書いていただいてもOKです.実装する保障はありませんが・・・
あと,GetProcAddressを使ってほげほげも考えてはいるのですが・・・ぅーん
;; アイコン状態のウィンドウを前面に表示する (define (restore-window hwnd) (if (is-iconic hwnd) (show-window hwnd sw-restore)) (set-foreground-window hwnd))
;; (next=#t => alt-tab) (next=#f => alt-shift-tab) 的な動き (define (switch-window next) (if next (begin (set-window-pos (get-foreground-window) hwnd-bottom 0 0 0 0 (+ swp-nosize swp-nomove)) (restore-window (get-visible-first-window))) ; z-orderを手前にしただけじゃ,選択されない (restore-window (get-visible-last-window))))
(define (toggle-window-state hwnd) (show-window hwnd (cond ((is-zoomed hwnd) sw-normal) (else sw-maximize))))
(define (toggle-window-icon-state hwnd) (cond ((is-iconic hwnd) (restore-window hwnd)) (else (show-window hwnd sw-minimize)))) (set-key mod-alt #\m (lambda () (toggle-window-icon-state (find-window () "Windows Media Player"))))