ShellExecute()を使うと、指定したファイルを「オープン」したり、他のプログラムを引数付きで起動する事が出来ます。この機能を使うと、例えばインストールプログラムの開発ではインストール完了時にドキュメントを自動的に表示する、といった事も出来るでしょう。あるいは、ランチャーソフトを開発する時にも使えるかもしれません。 ・ファイルlpszFnを開く例 ShellExecute(NULL,"open",lpszFn,NULL,NULL,SW_SHOWNORMAL); ・ファイルlpszFnをノートパッドで開く例 ShellExecute(NULL,NULL,"notepad",lpszFn,NULL,SW_SHOWNORMAL); オープンする時には、2番目の引数「オペレーション」指定にopenを、3番目の引数にファイル名へのポインタを設定します。最後の引数は、ファイルを開いたアプリケーションの表示状態ですが、通常の状態で開くのならSW_SHOWNORMALを指定しておけば良いでしょう。これで、指定したファイルタイプに関連付けられたアプリケーションを起動し、指定したファイルを開けます。 ShellExecute()では、2番目の引数で操作を指定しますが、ここでは「print」「explore」も指定出来ます。exploreを指定すると、指定フォルダをエクスプローラで開くようですね。 ・フォルダlpszFnをエクスプローラで開く例 ShellExecute(NULL,"explore",lpszFn,NULL,NULL,SW_SHOWNORMAL); シェル関連のAPIには、他にもいろいろな機能があるので調べてみると面白いと思います。 プログラムメニューで操作を指定してファイルをドロップしてください。openなら、関連付けられたアプリケーションで、NotePadならノートパッドで開きます。メニューはコンボボックスでドロップメニューとして作り、選択された項目はコンボボックスにCB_GETCURSELメッセージを送って取得するようにしました。 ・コンボボックスの作成 hwMenu=CreateWindow("COMBOBOX","LIST", /* コンボボックス */ WS_CHILD | WS_VISIBLE | WS_BORDER |CBS_DROPDOWNLIST, 8,8,128,128,hwnd,(HMENU)0,hInst,NULL); /* コンボボックスに項目追加 */ SendMessage(hwMenu,CB_ADDSTRING,0,(LPARAM)"Open"); SendMessage(hwMenu,CB_ADDSTRING,0,(LPARAM)"Notepad"); /* デフォルトの項目設定 */ SendMessage(hwMenu,CB_SELECTSTRING,0,(LPARAM)"Open"); ファイルがドロップされたら、そのファイル名とコンボボックスの選択項目を引数にファイルをオープンする関数openFile()を呼び出します。 case WM_DROPFILES: /* ファイルがドロップされた時の処理 */ hDrop=(HDROP)wParam; /* HDROPを取得 */ DragQueryFile(hDrop,0,lpszFn,256); /* ファイル名を取得 */ openFile(lpszFn,SendMessage(hwMenu,CB_GETCURSEL,0,0)); DragFinish(hDrop); /* ドラッグ&ドロップ終了処理 */ break; ・openFile void openFile(LPBYTE lpszFn,int m) { /* ShellExecute()でファイルを開く */ if (m==0) /* 関連付けられたアプリケーションでファイルを開く */ ShellExecute(NULL,"open",lpszFn,NULL,NULL,SW_SHOWNORMAL); else /* NotePadでファイルを開く */ ShellExecute(NULL,NULL,"notepad",lpszFn,NULL,SW_SHOWNORMAL); } |