void CDialogProcess::OnNMRClickListProc(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); int index = pNMLV->iItem; CString szCid; CPoint pt; DWORD dwCid; if( index == -1 ) return; HMENU hMenu = ::CreatePopupMenu(); AppendMenu( hMenu, MF_STRING, 10001, _T("进程模块") ); AppendMenu( hMenu, MF_STRING, 10002, _T("结束进程") ); GetCursorPos(&pt); UINT Cmd = (UINT)::TrackPopupMenu( hMenu, TPM_LEFTALIGN|TPM_RETURNCMD, pt.x, pt.y, 0, m_hWnd, NULL ); switch( Cmd ) { case 10001: { m_DialogDll.ShowWindow(SW_SHOW); m_DialogDll.m_ListDll.DeleteAllItems(); szCid = m_ListProc.GetItemText(index, 0); dwCid = _tcstoul(szCid, 0, 10); GetDll(dwCid); } break; case 10002: { szCid = m_ListProc.GetItemText(index, 0); dwCid = _tcstoul(szCid, 0, 10); if( KillProcess(dwCid) ) { m_ListProc.DeleteItem(index); } else { MessageBoxA(NULL, "Kill process failed.","ERROR", MB_OK); } } break; } *pResult = 0; }
BOOL CallbackTable::GetCallbackMethods(Interface *ip) { int i; LPCTSTR lpSection = _T("Dlls"); LPCTSTR lpKey = NULL; LPCTSTR lpDefault = _T("none"); TCHAR lpBuf[MAX_PATH]; DWORD nSize = sizeof(lpBuf); const TCHAR *maxPlugCfgPath = ip->GetDir(APP_PLUGCFG_DIR); TCHAR lpINIFileName[MAX_PATH]; _stprintf(lpINIFileName, _T("%s\\%s"), maxPlugCfgPath, _T("vrmlexp.ini")); // see if the INI files exists. WIN32_FIND_DATA file; HANDLE findhandle = FindFirstFile(lpINIFileName, &file); FindClose(findhandle); if (findhandle == INVALID_HANDLE_VALUE) { /* if the .ini file is missing assume they aren't using the API TSTR buf = "couldn't find INI file"; MessageBox(GetActiveWindow(), buf, " ", MB_OK|MB_TASKMODAL); */ return FALSE; } // get dllKeys GetPrivateProfileString(lpSection, lpKey, lpDefault, (LPTSTR)lpBuf, nSize, (LPCTSTR)lpINIFileName); TCHAR *tmpPtr = lpBuf; while (tmpPtr[0] != '\0') { TCHAR *dllKey = (TCHAR *)malloc(_tcslen(tmpPtr) * sizeof(TCHAR)); _tcscpy(dllKey, tmpPtr); AddKey(dllKey); tmpPtr = _tcschr(tmpPtr, '\0') + 1; } // check validity of INI file if (!lstrcmp(lpBuf, _T("none"))) { TSTR buf = _T("couldn't find [dlls] section in INI file"); MessageBox(GetActiveWindow(), buf, _T(" "), MB_OK | MB_TASKMODAL); return FALSE; } // get dlls for (i = 0; i < GetKeyCount(); i++) { GetPrivateProfileString(lpSection, GetKey(i), lpDefault, (LPTSTR)lpBuf, nSize, lpINIFileName); TCHAR *dllPtr = (TCHAR *)malloc(_tcslen(lpBuf) * sizeof(TCHAR)); _tcscpy(dllPtr, lpBuf); AddDll(dllPtr); } // load the dlls for (i = GetDllCount(); i--;) { HINSTANCE libInst = (HINSTANCE)LoadLibraryEx(GetDll(i), NULL, 0); if (libInst) { AddDLLHandle(libInst); FARPROC lpCallbackType = NULL; FARPROC lpProc = NULL; TCHAR lpStr[64]; __int64 CallbackType; lpCallbackType = GetProcAddress((HMODULE)libInst, (LPCSTR) "ExportLibSupport"); if (lpCallbackType) { CallbackType = (*(lpCallbackType))(); } // Export Lib support for pre-scene export if (PreSceneCallback & CallbackType) { _tcscpy(lpStr, _T("PreSceneExport")); DllPreScene lpProc = (DllPreScene)GetProcAddress((HMODULE)libInst, (LPCSTR)lpStr); if (!lpProc) { TCHAR buf[256]; _stprintf(buf, _T("method %s not implimented"), lpStr); MessageBox(GetActiveWindow(), buf, _T("Export Lib"), MB_OK | MB_TASKMODAL); } AddPreScene(lpProc); } // Export Lib support for post-scene export if (PostSceneCallback & CallbackType) { _tcscpy(lpStr, _T("PostSceneExport")); DllPostScene lpProc = (DllPostScene)GetProcAddress((HMODULE)libInst, (LPCSTR)lpStr); if (!lpProc) { TCHAR buf[256]; _stprintf(buf, _T("method %s not implimented"), lpStr); MessageBox(GetActiveWindow(), buf, _T("Export Lib"), MB_OK | MB_TASKMODAL); } AddPostScene(lpProc); } // Export Lib support for pre-node export if (PreNodeCallback & CallbackType) { _tcscpy(lpStr, _T("PreNodeExport")); DllPreNode lpProc = (DllPreNode)GetProcAddress((HMODULE)libInst, (LPCSTR)lpStr); if (!lpProc) { TCHAR buf[256]; _stprintf(buf, _T("method %s not implimented"), lpStr); MessageBox(GetActiveWindow(), buf, _T("Export Lib"), MB_OK | MB_TASKMODAL); } AddPreNode(lpProc); } // Export Lib support for post-node export if (PostNodeCallback & CallbackType) { _tcscpy(lpStr, _T("PostNodeExport")); DllPostNode lpProc = (DllPostNode)GetProcAddress((HMODULE)libInst, (LPCSTR)lpStr); if (!lpProc) { TCHAR buf[256]; _stprintf(buf, _T("method %s not implimented"), lpStr); MessageBox(GetActiveWindow(), buf, _T("Export Lib"), MB_OK | MB_TASKMODAL); } AddPostNode(lpProc); } } else { TCHAR buf[256]; _stprintf(buf, _T("Lib [%s] Load Failed"), GetDll(i)); MessageBox(GetActiveWindow(), buf, _T("Export Lib"), MB_OK | MB_TASKMODAL); } } return TRUE; }