Windowsの外部プログラムを実行するWinExecとShellExecute関数の使い方
Qtでは、WinExecとShellExecuteは外部プログラムを実行するための関数です。
- WinExec 関数はプログラムを実行し、その実行が終わるのを待ってから戻ります。
UINT WinExec(LPCSTR lpCmdLine, UINT uCmdShow);
lpCmdLineは実行対象プログラムのコマンドライン引数、uCmdShowはプログラムウィンドウの表示方法を指定し、戻り値はプログラムの戻り値です。
使用例:
WinExec("notepad.exe", SW_SHOW);
この例ではメモ帳プログラムが開きます。
- ShellExecute関数は、ファイルを文字通り実行して、ファイルの関連付けられたアプリケーションでどのように開くかを決定する。プロトタイプは以下の通り:
HINSTANCE ShellExecute(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);
ネイティブハンドルhwndで親のウィンドウを識別し、lpOperationで実行する操作(例:”開く”、”編集”)を指定し、lpFileで操作対象とするファイルのパスを指定し、lpParametersでプログラム引数を指定し、lpDirectoryでワーキングディレクトリを指定し、nShowCmdでウィンドウの表示方法を指定します。プログラムインスタンスのハンドルを返します。
使い方:
ShellExecute(NULL, "open", "C:\\path\\to\\file.txt", NULL, NULL, SW_SHOW);
このサンプルでは、関連付けられているプログラムを使用してファイル .txt が開かれます。
Windows特有のWinExecやShellExecute関数を使用する場合は、他プラットフォームで動作させる際にプラットフォームを判別して処理を行う必要があります。また、Qtにはクロスプラットフォームに対応したQProcessクラスが用意されており、外部プログラムの実行に利用できます。