config.py に以下のように記述することによって、スタートメニューの中のショートカットを自動的にコマンドとして登録することができます。
ただし、スタートメニューの内容が変化した後、それを反映させるには、CraftLaunchのなかで、[Reload]する必要があります。
# -------------------------------------------------------------------- # スタートメニューの中のショートカットをコマンドとして登録する if 1: startmenu_items = [] MAX_PATH = 260 CSIDL_PROGRAMS = 2 CSIDL_COMMON_PROGRAMS = 23 buf = ctypes.create_unicode_buffer(MAX_PATH) ctypes.windll.shell32.SHGetSpecialFolderPathW( None, buf, CSIDL_PROGRAMS, 0 ) programs_dir = buf.value ctypes.windll.shell32.SHGetSpecialFolderPathW( None, buf, CSIDL_COMMON_PROGRAMS, 0 ) common_programs_dir = buf.value startmenu_dirs = [ programs_dir, common_programs_dir ] for startmenu_dir in startmenu_dirs: for location, dirs, files in os.walk( startmenu_dir ): for filename in files: if not filename.lower().endswith(".lnk"): continue name, ext = os.path.splitext(filename) item = ( name, window.command_ShellExecute( None, os.path.join(location,filename), u"", u"" ) ) startmenu_items.append(item) startmenu_items.sort() window.launcher.command_list += startmenu_items CraftLaunchでは、window.commandline_list に独自のオブジェクトを追加することで、コマンドラインの解釈/実行方法をカスタマイズすることが出来ます。
この例では、URLが特定の場所のときだけ、デフォルトのブラウザの変わりに、IEを使って開く処理を追加しています。
import urlparse class commandline_MyExecuteURL: def __init__(self): pass def onCandidate( self, update_info ): return [] def onEnter( self, commandline, text, mod ): if not (text.lower().startswith("http:") or text.lower().startswith("https:")): return False parsed_url = urlparse.urlparse(text) ie_list = [ "yahoo.co.jp", "biglobe.ne.jp", ] browser = None for ie_loc in ie_list: if parsed_url.netloc.lower().endswith(ie_loc): browser = "C:\Program Files\Internet Explorer\iexplore.exe" def jobShellExecute( job_item ): if browser: shellExecute( None, None, browser, text, u"" ) else: shellExecute( None, None, text, u"", u"" ) def jobShellExecuteFinished( job_item ): pass job_item = JobItem( jobShellExecute, jobShellExecuteFinished ) JobQueue.defaultQueue().enqueue(job_item) commandline.appendHistory( text ) commandline.quit() return True def onStatusString( self, text ): return None window.commandline_list = [ commandline_MyExecuteURL() ] + window.commandline_listCraftLaunchでは、window.commandline_list に独自のオブジェクトを追加することで、コマンドラインの解釈/実行方法をカスタマイズすることが出来ます。
下の例では、以下のような処理を行っています。
class commandline_OpenByFiler: def __init__(self): pass def onCandidate( self, update_info ): return [] def onEnter( self, commandline, text, mod ): args = text.split(';') dirname = args[0].replace('/','\\').rstrip('\\') if not os.path.exists(dirname) or not os.path.isdir(dirname): return False def jobOpenByFiler( job_item ): filer = r"c:\ols\cfiler\cfiler.exe" arg = '-L"%s" -R"%s"' % (dirname, dirname) directory = "c:\ols\cfiler" #print [ filer, arg, directory ] clnch_misc.shellExecute( None, None, filer, arg, directory ) def jobOpenByFilerFinished( job_item ): pass job_item = JobItem( jobOpenByFiler, jobOpenByFilerFinished ) JobQueue.defaultQueue().enqueue(job_item) commandline.appendHistory( text ) commandline.quit() return True def onStatusString( self, text ): return None window.commandline_list.insert( 0, commandline_OpenByFiler() );