Win32 API FAQ
Страница 14.


 

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

 
« Предыдущая статья   Следующая статья »