Страница 14 из 24 27)--------------------------------------------------------------------------- Q> Имеется PID процесса,как узнать имя "process executable"? A> #include #pragma comment(lib,"psapi.lib") //psapi.h,lib,dll есть в VC5 и VC6 HANDLE hProc; char szProcessName [80]; HMODULE ahMod [10]; DWORD dwNeeded; hProc = OpenProcess (PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, PID); // PID должен быть обьявлен как DWORD if (hProc) { if (EnumProcessModules (hProc, ahMod, sizeof(ahMod), &dwNeeded)) { if (GetModuleBaseName (hProc, ahMod[0], szProcessName, sizeof(szProcessName))) { } else { } } CloseHandle (hProc); } } 28)-------------------------------------------------------------------------- Q> Как извлечь версию EXE,DLL и т.д.? A> void GetVersionOfFile (char * pszAppName, // file char * pszVerBuff, // receives version int iVerBuffLen, // size of buffer char * pszLangBuff, // receives language int iLangBuffLen) // size of buffer { DWORD dwScratch; DWORD * pdwLangChar; DWORD dwInfSize ; UINT uSize; BYTE * pbyInfBuff; char szVersion [32]; char szResource [80]; char * pszVersion = szVersion; dwInfSize = GetFileVersionInfoSize (pszAppName, &dwScratch); if (dwInfSize) { pbyInfBuff = new BYTE [dwInfSize]; memset (pbyInfBuff, 0, dwInfSize); if (pbyInfBuff) { if (GetFileVersionInfo (pszAppName, 0, dwInfSize, pbyInfBuff)) { if (VerQueryValue (pbyInfBuff, "\\VarFileInfo\\Translation", (void**)(&pdwLangChar), &uSize)) { if (VerLanguageName (LOWORD (*pdwLangChar), szResource, sizeof(szResource))) { strncpy (pszLangBuff, szResource, iLangBuffLen); } wsprintf (szResource, "\\StringFileInfo\\%04X%04X\\FileVersion", LOWORD (*pdwLangChar), HIWORD (*pdwLangChar)); if (VerQueryValue (pbyInfBuff, szResource, (void**)(&pszVersion), &uSize)) { strncpy (pszVerBuff, pszVersion, iVerBuffLen-1); } } } delete [] pbyInfBuff; } } } 29)--------------------------------------------------------------------------- Q> Как узнать имя дефолтового web browsera и , вообще, как узнать - с Q> какой программой ассоциирован данный тип файла (напр .HTM или .ZIP)? A> Создать временный .htm или .zip и использовать апишную FindExecutable 30)--------------------------------------------------------------------------- Q> Как удалить директорию,если она не пустая? A> SHFILEOPSTRUCT sh; sh.hwnd = GetSafeHwnd(); //Для BCB sh.hwnd=FormX->Handle; sh.wFunc = FO_DELETE; sh.pFrom = "c:\\test\0"; sh.pTo = NULL; sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT; sh.hNameMappings = 0; sh.lpszProgressTitle = NULL; SHFileOperation (&sh); Этот код выносит все дерево, начиная с (и включая) с:\test |