My Daily Programming Life...

Showing posts with label Windows. Show all posts
Showing posts with label Windows. Show all posts

Windows Kernel Debuggerの仕組み

WindowsでKernel Debuggerがどうやって動いているのか興味があったけど、なかなかそれについて調べられずにいたら、今日たまたまいい記事を見つけた。

http://www.vsj.co.uk/articles/display.asp?id=265

こういうのあるなら早く言ってほしい・・・。

これでだいたいの動きは納得がいくようになった。
最近IDAを利用してカーネルデバッグができるようになったということで、なかなかおもしろいかもしれない。IDAがないとアセンブラコード読む気にならないし。

Windowsキーを無効にする

今作っているソフトで、一時的にWindowsキーを無効にしたいときがあった。
普通だとスタートメニューが表示されたり、ショートカットがいくつか使えたりするけど、
Windowsキーを利用するアプリを作っていて、自分のウィンドウにフォーカスがあるときだけはWindowsキーを無効にしたかった。

とりあえずその方法

まずは単純に無効にする方法。キーボードフックを利用すればよいらしい。

hHook = SetWindowsHookEx( WH_KEYBOARD_LL , WinKeyHook , hInst , 0 );

以下のURLを見れば全体が書いてある。
http://www.programmersheaven.com/mb/windows/344596/344596/how-to-disable-the-start-menu-button/

で、そこから、自分のウィンドウにフォーカスがあるときだけという条件を付けるカスタマイズ
フック関数を以下のようにする

LRESULT CALLBACK WinKeyHook(int code, WPARAM wparam, LPARAM lparam)
{
PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lparam;
DWORD pid=0;

switch(wparam)
{
case WM_KEYDOWN:
case WiM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
if(key->vkCode==VK_LWIN || key->vkCode==VK_RWIN){
GetWindowThreadProcessId( GetForegroundWindow() , &pid );
if( GetCurrentProcessId() == pid ){
return 1;
}
}
}
return CallNextHookEx(NULL, code, wparam, lparam);
}


これで自分がフォアグラウンドにいるときはWindowsキーが無効になる。
ただし、自分自身のウィンドウもWindowsキーのイベントを取得できなくなるので注意。
自分も必要な場合は・・・これからどうするか考えます。

Windows Kernel

なんだかWindows Kernelのよさげな資料を発見
http://www.i.u-tokyo.ac.jp/edu/training/ss/msprojects/index.html
東大ではこんな授業やってんのかぁ。いいなぁ。でもこれ4年ぐらい前の話だな。
今もやってるのかな。

キーボードを使いやすく

最近どうも右手、右腕が変。なんか気持ち悪い。なんか常に違和感がある。痛い訳じゃないしかゆいわけでもないんだけど。
おそらくマウスの使いすぎなんだと思う。右肩も痛い。プログラマーなんだから、もっとキーボードで操作出来るようになればいいんだと思って、勉強中。エディタももっときちんと使えるように練習しなくちゃ。

今回は、まずWindowsでCapsとCtrlの入れ替え。
http://uguisu.skr.jp/Windows/winCaps.html
を見てやった。
Controlは左下にあるんだけど、それがちょっと使いにくいと感じて替えた。それに慣れてるからまだ間違えるけど、あきらかにCapsよりCtrlの方が使う頻度が高いのに、打ちにくい場所にあってもしょうがないし。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,06,00,00,00,3a,00,1d,00,1d,00,3a,00,\
29,00,79,00,5b,e0,7b,00,38,e0,70,00,00,00,00,00

これをテキストに保存して.regという拡張子を付ければ、僕の設定になる。
Ctrl ←→ Caps Lock
変換(スペースの右) → 全角/半角
無変換 → Windows Key
かな → Alt
に変換しているはず。

あとはキーボードショートカット
http://qune.cside.com/archives/000515.html
http://homepage1.nifty.com/keyboard_maniac/SpecialKT.htm
のとか。

エクスプローラの拡張とか、もっと使いやすいファイラとか誰か知ってたら教えてください。

2009/3/20 追記
各ユーザー別にキーボード設定したい場合はHKEY_CURRENT_USER\Keyboard Layout にScancode mapを作ればよいらしい
feedSubscribe to my feed