「ファイル名を指定して実行」ダイアログを表示するまたまた隠し関数ネタを含んでます。このダイアログを表示する方法は2種類あるので、簡単な方から(といってもインターフェイス関係を使いますが)ご紹介しましょう。 シェル関係のインターフェイスを利用するのは、ショートカット作成以来2度目ですが、今回はIE4以上限定のコードになります。あまりおすすめできませんので、コードと少しの解説にとどめさせていただきます。 #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <shlobj.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { IShellDispatch *pShell; HRESULT hr; CoInitialize(NULL); hr = CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, IID_IShellDispatch, (void**)&pShell); //↑インターフェイスのポインタを取得 pShell->FileRun(); // ←ダイアログの表示 pShell->Release(); CoUninitialize(); return 0; } IShellDispatchインターフェイスを作成し、そのインターフェイスのFileRunメソッドを呼び出します。呼び出し方がシンプルな分だけ、指定できるオプションがありません。詳細に指定したい・どのアプリを実行したか知りたい場合は下のAPI版をご利用ください。 次は、お待ちかね、Shell32.dllの隠し関数を使用する方法です。もう慣れた思いますが、LoadLibrary、GetProcAddress、呼び出し、FreeLibraryの順で行うだけです。今回の関数のインデックスは、61です。 以前分からなかった引数も判明し、やっと完全になりました(00/05) #include <windows.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { #define SHRD_DEFAULT 0x00 // 通常の画面 #define SHRD_NOBROWSE 0x01 // 参照ボタンを非表示 #define SHRD_NOMRU 0x02 // MRUを非表示 #define SHRD_CALCDIRECTORY 0x04 // 現在のフォルダの中身を探す #define SHRD_NOLABEL 0x08 // エディットボックスのラベルを削除 #define SHRD_OSEPARATEMEM 0x20 // メモリ空間を分けるチェックボックスを削除 // 関数型宣言 typedef void (WINAPI *SHRUNDIALOG) (HWND hWnd, HICON hIcon, LPCTSTR lpszPath, LPCTSTR lpszTitle, LPCTSTR lpszPrompt, int uFlags); SHRUNDIALOG SHRunDialog; HANDLE hShell32; hShell32 = LoadLibrary(TEXT("SHELL32.DLL")); if (hShell32) { SHRunDialog = (SHRUNDIALOG) GetProcAddress((HINSTANCE)hShell32, (LPCSTR)61); if (SHRunDialog){ // 文字列引数に注意 SHRunDialog(NULL, NULL, TEXT("C:\\Windows\\system"), TEXT("アプリの起動"), TEXT("\n起動するパスを設定してね"), 0); } FreeLibrary((HINSTANCE)hShell32); } return 0; } 関数についての情報は、SHRunDialog関数 の解説をごらんください。 記事の無断転載は禁止です。 Copyright 1999-2001 Runan. All Rights Reserved.
|