関連付けられたプログラムを起動する

指定されたファイルを拡張子で関連付けられたプログラムから起動します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトで[空のプロジェクト](ShellExec) を作成します。
  2. ShellExec.cpp のソースコードです。
    shlobj.h をインクルードして下さい。
    /***************************************************************/
    /*★ ファイルを関連付けられたプログラムで起動する    前田 稔 ★*/
    /***************************************************************/
    #include    <windows.h>
    #include    <shlobj.h>
    
    char    dir[24]=   {  "C:\\TMP\\"  };
    char    fname[24]= {  "A.TXT"  };
    
    //★ Windows Main 関数
    int PASCAL  WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow)
    {   HINSTANCE   rc;
    
        rc= ShellExecute(
                NULL,
                "open",
                fname,          //File Name
                "",             //Parameter
                dir,            //Directry
                SW_SHOW);
        if ((long)rc>32L)
            MessageBox(NULL,fname,"起動しました",MB_OK);
        else
            MessageBox(NULL,fname,"起動できません",MB_OK);
        return 0;
    }
        
  3. ShellExecute() が正常に実行されたときは32より大きい値がリターンされます。
  4. 事前に C:\TMP のフォルダーを作成して "A.TXT" を格納しておいて下さい。
    A.TXT のファイルの中身は何でもかまいません。
  5. 関連付けられたプログラム(メモ帳?)が起動して、ファイルが表示されることを確認して下さい。

【演習】

  1. "起動できません" が表示されたときは rc にエラーの原因が格納されています。
    主な原因はプログラムとの関連付けが出来ていないか、ファイルにアクセス出来ないときです。
    サンプルのプログラムでは c:\tmp に格納するかフルパスで指定して下さい。
  2. .TXT 以外のファイルも試して下さい。
        char    fname[24]= {  "A.TXT"  };
        char    fname[24]= {  "bijin16.gif"  };
        char    fname[24]= {  "index.html"  };
        char    fname[24]= {  "test.xls"  };
        char    fname[24]= {  "test.doc"  };
        char    fname[24]= {  "c:\\data\\test\\ayu.bmp"  };
        
  3. 拡張子が .EXE のファイルを試して下さい。
  4. フォルダーを指定すると、どうなるか試して下さい。

【メモ】

プログラムと関連付ける拡張子を持つファイルには、カレントディレクトリは利きません。
ファイルの格納場所を dir で設定するかフルパスで指定して下さい。
.dsp や .dsw などを起動すると、その中に記述されている関連するファイルが参照されます。
そのような時は .dsp や .dsw が置かれているフォルダーをカレントディレクトリに設定して下さい。

超初心者のプログラム入門(Win32API C++)