// // MFCTool.cpp : 実装ファイル // #include "MFCTool.h" using namespace jbxwl; //////////////////////////////////////////////////////////////////////////////////////// // MENU Tool // /** メニューでリソースID id を持つものを探す. */ CMenu* jbxwl::GetMenu_byID(CMenu* pMenu, UINT id) { if (pMenu==NULL) return NULL; UINT n = pMenu->GetMenuItemCount(); for (UINT i=0; iGetMenuItemID(i)==id) return pMenu; CMenu* pSub = GetMenu_byID(pMenu->GetSubMenu(i), id); if (pSub!=NULL) return pSub; } return NULL; } CMenu* jbxwl::GetMenu_byStringID(CMenu* pMenu, UINT id) { if (pMenu==NULL) return NULL; CString str = LoadString_byID(id); if (str=="" || str.IsEmpty()) return NULL; return GetMenu_byName(pMenu, str); } CMenu* jbxwl::GetMenu_byName(CMenu* pMenu, LPCTSTR name) { if (pMenu==NULL) return NULL; CString str; UINT n = pMenu->GetMenuItemCount(); for (UINT i=0; iGetMenuString(i, str, MF_BYPOSITION); if (str==(CString)name) return pMenu->GetSubMenu(i); CMenu* pSub = GetMenu_byName(pMenu->GetSubMenu(i), name); if (pSub!=NULL) return pSub; } return NULL; } //////////////////////////////////////////////////////////////////////////////////////// // プログラムの再起動 // void jbxwl::RebootProgram(void) { TCHAR path[LDATA]; GetModuleFileName(NULL, (LPTSTR)path, (DWORD)LDATA); CString arg; arg.Format(_T("/waitpid %u"), GetCurrentProcessId()); ShellExecute(NULL, NULL, (LPCTSTR)path, (LPCTSTR)arg, NULL, SW_SHOWNORMAL); SendWinMessage(WM_CLOSE); } BOOL jbxwl::WaitPidTerm(int tm) { DWORD pid = 0; for (int i=1; i<__argc; i++) { if (!tcscmp(__targv[i], _T("/waitpid"))) { if (i+1<__argc) { pid = ttoi(__targv[i+1]); break; } } } if (pid==0) return TRUE; HANDLE hdl = OpenProcess(SYNCHRONIZE, FALSE, pid); if (hdl!=NULL) { if (WaitForSingleObject(hdl, tm*1000)==WAIT_TIMEOUT) return FALSE; } return TRUE; }