起動されたディレクトリ名を取得する
これにより、起動されたアプリケーションと同じディレクトリにあるファイルに容易にアクセス可能となる。等。
例)
TCHAR szAppDir[_MAX_PATH]; // ディレクトリ(ドライブ有)
TCHAR szFull[_MAX_PATH]; // フルパス
TCHAR szDrive[_MAX_DRIVE]; // ドライブ
TCHAR szDir[_MAX_DIR]; // ディレクトリ(ドライブ無)
// フルパス取得
::GetModuleFileName(NULL, szFull, sizeof(szFull)/sizeof(TCHAR));
TRACE(_T("szFull: %s\n"), szFull);
// フルパスをドライブやディレクトリに分解
_tsplitpath_s(szFull,
szDrive, sizeof(szDrive)/sizeof(TCHAR),
szDir, sizeof(szDir)/sizeof(TCHAR),
NULL, NULL, NULL, NULL);
TRACE(_T("szDrive: %s\n"), szDrive);
TRACE(_T("szDir: %s\n"), szDir);
// ドライブとディレクトリを連結
_tmakepath_s(szAppDir, sizeof(szAppDir)/sizeof(TCHAR),
szDrive, szDir, NULL, NULL);
TRACE(_T("szAppDir: %s\n"), szAppDir);
実行結果)
szFull: c:\Work\Develop\Programing\DumpMem\Debug\DumpMem.exe
szDrive: c:
szDir: \Work\Develop\Programing\DumpMem\Debug\
szAppDir: c:\Work\Develop\Programing\DumpMem\Debug\
二重起動防止
MFCの場合
アプリ名を定義する。
#define APP_NAME (_T("SanpApp.exe"))
アプリクラスのメンバとして、ハンドルを追加する。
HANDLE m_hMutexApp; // 二重起動防止ミューテックス
InitInstance()内で、ミューテックスを作成する。(
SDKの場合はWinMain()内で)
m_hMutexApp = CreateMutex(NULL, TRUE, APP_NAME);
if (ERROR_ALREADY_EXISTS == GetLastError()) return FALSE;
ExitInstance()内で、ミューテックスを削除する。
ReleaseMutex(m_hMutexApp);
CloseHandle(m_hMutexApp);
最小化、最大化、元のサイズに戻す、終了
メイン
ウィンドウに以下のようにメッセージをポストする。
// 最小化
AfxGetMainWnd()->PostMessage(WM_SYSCOMMAND, SC_MINIMIZE);
// 最大化
AfxGetMainWnd()->PostMessage(WM_SYSCOMMAND, SC_MAXIMIZE);
// 元のサイズに戻す
AfxGetMainWnd()->PostMessage(WM_SYSCOMMAND, SC_RESTORE);
// 終了
AfxGetMainWnd()->PostMessage(WM_CLOSE);
コメント
- 元のサイズに戻った時に発行されるメッセージはありますか? -- 重松 宏昌 (2009-08-02 10:20:53)
最終更新:2009年08月02日 10:20