clcmd_exを更新。読み仮名を使えるようにした。コマンドを日本語で登録しても仮名で検索できるようになります。コマンドを日本語で登録していないと、あんまりありがたみがありません。scriptに日本語を使ってもちゃんと動くようになってます。
MenuMode使ったらclcmd_exのmenu機能は必要ない気がしてきた。
clcmd_ex

MenuModeを更新。機能追加とバグを修正。clcmd_exも同封した。
MenuMode
結局config.pyの中でLoadCommandXMLを呼ぶことにした。LoadCommandXMLが2回呼ばれてしまうが、まぁいいか。重複コマンドは片方が削除されるし。
config.pyよりLoadCommandXMLが後に呼ばれているのは、コマンドを拡張した場合config.pyの中で先にimportしとかないといけないからのようだ。ということでコマンドの拡張はMenuModeの初期化よりも先に呼び出すようにして下さい。
あぁ、ReadMeをちゃんと書き直さないとなぁ、かなりいい加減になっている。

clcmd_exにバグがあったので更新。activate-or-shellexecでパラメータが渡っていなかった。
clcmd_ex

追記

clcmd_exに読み仮名のkanaを付けてるのに挑戦.コマンドも仮名で選択できるようになった,それに伴いMenuKeywordから日本語が検索可能に.しかしショートメニューのコマンドの仮名をclcmd_exからとってこようと思ったらconfig.pyがLoadCommandXMLより先に実行されているため,clcm.command_listを見ても空っぽ.仮名がとってこれない....clconfig.pyを書き換えるのもなんだしなぁ.config.pyの中でLoadCommandXMLを実行するか?それもいまいちな気が.
あとショートメニューのコマンドを日本語で使うと文字化けするバグが残ってた.コマンドは日本語登録してないので全然気が付かなかった.

シロさんの要望にこたえてMenuModeを更新。
MenuMode
clcmd_exのキーワードを使ってメニューを出す関数MenuKeyword()を追加.
ショートメニューの正規表現に大文字小文字を区別したりするオプションを追加.
メニューが複数マッチした場合のオプションを追加.

MenuModeが大体出来たので公開してみる。
MenuMode

拡張子別に実行ファイルを選べたり、コマンドを階層メニューの中から選んだり出来るようになります。バグがあったら報告お願いします。改良して欲しい所も受付中。

MenuMode普及推進週間ということで,nakayatoさんとこで話題になっていたメニューからスタックされているモードを選ぶ方法をMenuMode使うとこんな感じ.

def SetMode(name):
    import clmode
    if clmode.Top().__class__.__name__ == 'MenuMode':
        PopMode()
    for n, mode in enumerate(clmode.mode_stack):
        if mode.__class__.__name__ == name:
            mode = clmode.mode_stack.pop(n)
            PushMode(mode)

def SelectMode():
    import os.path, clmode_menu, clmode
    list =[]
    omit_mode =['BaseMode'] #表示しないモード
    for mode in clmode.mode_stack:
        mode_name = mode.__class__.__name__
        if omit_mode.count(mode_name)==0:
            list.append((mode_name, mode_name, u"SetMode('%s')" %mode_name))
    args = {'SetMode':SetMode}
    menu = menu = clmenu.ParentMenu(item_list=[])
    menu.AddMenuItem(list)
    PushMode(clmode_menu.MenuMode(menu, args=args))
SetKeyDownHandler( ord('M'), MODKEY_CTRL|MODKEY_ALT, SelectMode )

ハードウェアの取り外し

UnplugDriveというのを使ってハードウェアの取り外しをする.
シャットダウンや再起動する前にUSBメモリなどを取り外しておきたいのでシャットダウンする前にRemove()を呼び出して取り外して使っている.よく取りはずやつはコマンドに登録しておいても便利.

#UnplugDrive: http://homepage3.nifty.com/yamakox/Others/UnplugDrive.html
def RemoveRemovableDisk(drvl):
    u"""
    Removable Diskを取り外す。取り外せたらTrue、不可能ならFalseを返す。
    """
    import win32com.client
    observer = win32com.client.Dispatch( 'UnplugDrive.Observer' )
    if observer.IsUnpluggable( drvl ):
        observer.Unplug( drvl )
        return True
    else: 
        return False

def RemovableDisk():
    u"""
    Removable Driveのlistを返す.
    """
    list=[]
    import win32file, win32api
    for drv in range(ord('c'), ord('z')):
        if win32file.GetDriveType(chr(drv)+':') == win32file.DRIVE_REMOVABLE:
            VolumeName = win32api.GetVolumeInformation(chr(drv)+':')[0]
            list.append((chr(drv),VolumeName))
    return list

def Remove():
    u"""
    取り外せそうなDriveを取り外す.
    """    
    import clapi, clconst
    for drv in RemovableDisk():
        if clapi.MessageBox(drv[0] + u'ドライブに' + drv[1] + 
                      u'が装着されたままです。取り外しますか?',u'取り外し',
                      clconst.MB_YESNOCANCEL) == clconst.IDYES:
            RemoveRemovableDisk(drv[0])

その他

MessengerModeでExecuteからInstantMessageを呼び出した後のフォーカスがおかしい.ExecuteのあとPopMode()でLancherModeExに戻して,非アクティブを呼んでも非アクティブにならない,なんでだろう.TasktrayModeも実行後のフォーカスがおかしなときがあるんだよなぁ.
MenuModeというのを製作中.コマンドを登録しすぎて忘れがちなのでメニューにまとめておいてそこから呼び出したりできたらなと思って作っている.あと拡張子別にコマンド候補を出したいとう話を良く聞くのでファイルをセットして呼び出したらそのファイルに応じたメニューが出せるようにもする予定.雛形は大体完成.
CraftLaunchExから選んだ画像ファイルの簡易ビューアとしてTkinterを使うってのを挑戦.thread(使ったことないけど)を使えばいけるに違いないと色々試してるけどうまくいかない.すぐに固まってしまう.

メッセンジャーモードはMessenger.UIAutomation.1のCOMオブジェクトを使ってMSN Messengerのオンラインメンバーやら、ファイルの送信やらをやるだけ。ソースは、
1年位前に作ってほったらかしにしたのを現在0.98用に直してる所。しかし、ひとつ問題が。それはMSN Messenger 7では、なにやらファイルを送るSendFileが使えない。困った。自力でキーを送信して実現するという荒業で乗り越えられなくはないんだが・・・