WIn32API ファイルに関連付けられている実行ファイル名を取得する
ファイルに関連付けられている実行ファイル名を取得するためには、Shell APIのFindExecutable関数を用いる
HINSTANCE FindExecutable( LPCTSTR lpFile, // ファイル名文字列へのポインタ LPCTSTR lpDirectory, // 既定ディレクトリ文字列へのポインタ LPTSTR lpResult // 返される実行可能ファイル文字列を // 保持するバッファへのポインタ );
#include <windows.h> #include <stdio.h> #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") int main() { TCHAR szBuf[MAX_PATH]; if ((int)FindExecutable(TEXT("zipfile.py"), TEXT("C:\\Python27\\Lib"), szBuf) > 32) { _tprintf(TEXT("zipfile.py: %s\n"), szBuf); } else { _tprintf(TEXT("FindExecutable(1) failed")); } if ((int)FindExecutable(TEXT("README.txt"), TEXT("C:\\Python27"), szBuf) > 32) { _tprintf(TEXT("README.txt: %s\n"), szBuf); } else { _tprintf(TEXT("FindExecutable(2) failed")); } if ((int)FindExecutable(TEXT("pyconfig.h"), TEXT("C:\\Python27\\include"), szBuf) > 32) { _tprintf(TEXT("pyconfig.h: %s\n"), szBuf); } else { _tprintf(TEXT("FindExecutable(3) failed")); } if ((int)FindExecutable(TEXT("python.exe"), TEXT("C:\\Python27"), szBuf) > 32) { _tprintf(TEXT("python.exe: %s\n"), szBuf); } else { _tprintf(TEXT("FindExecutable(4) failed")); } if ((int)FindExecutable(TEXT("python27.dll"), TEXT("C:\\Python27"), szBuf) > 32) { _tprintf(TEXT("python27.dll: %s\n"), szBuf); } else { _tprintf(TEXT("FindExecutable(5) failed")); } return 0; }
zipfile.py: C:\Python27\python.exe README.txt: C:\Windows\system32\NOTEPAD.EXE pyconfig.h: c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\VCEx press.exe python.exe: C:\Python27\python.exe FindExecutable(5) failed