| imho.ws |
![]() |
|
|
|
# 4 |
|
Guest
Сообщения: n/a
|
Что-то заголовки неподходят, как получать такие:
http://st1.risunok.net/7620/122.JPG Например в опере в заголовке отображается название страници, а там получается название программы, как его получить?? |
|
|
# 5 |
|
Member
Регистрация: 18.08.2004
Пол: Male
Сообщения: 235
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
shift_on_line,
там описание программы и версия файла. На C++ это выглядит так (использовался код отсюда и отсюда): Код:
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <Psapi.h>
#include <strsafe.h>
void PrintProcessNameAndID(DWORD processID)
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
TCHAR szDescription[MAX_PATH];
TCHAR szVersion[MAX_PATH];
// Get a handle to the process.
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID);
// Get the process name.
if (NULL != hProcess)
{
// файл образа
GetModuleFileNameEx(hProcess, NULL, szProcessName, MAX_PATH);
DWORD temp, sizeInfo;
sizeInfo = GetFileVersionInfoSize(szProcessName, &temp);
if (sizeInfo == 0) // не содержит информации о версии
return;
void *pData = new char[sizeInfo];
void *lplpBuffer = new char[sizeInfo];
GetFileVersionInfo(szProcessName, 0, sizeInfo, pData);
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;
UINT cbTranslate;
// список языков, на которых представлена инфа
VerQueryValue(pData,
TEXT("\\VarFileInfo\\Translation"),
(LPVOID*)&lpTranslate,
&cbTranslate);
// описание файла
TCHAR SubStr[50];
StringCchPrintf(SubStr, 50,
TEXT("\\StringFileInfo\\%04x%04x\\FileDescription"),
lpTranslate[0].wLanguage,
lpTranslate[0].wCodePage);// хватит одного
VerQueryValue(pData, SubStr, &lplpBuffer, (PUINT)&temp);
if (temp > 0)
wcscpy_s(szDescription, MAX_PATH, (wchar_t *)lplpBuffer);
// версия файла
StringCchPrintf(SubStr, 50,
TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"),
lpTranslate[0].wLanguage,
lpTranslate[0].wCodePage);// хватит одного
VerQueryValue(pData, SubStr, &lplpBuffer, (PUINT)&temp);
if (temp > 0)
wcscpy_s(szVersion, MAX_PATH, (wchar_t *)lplpBuffer);
delete pData;
_tprintf(TEXT("%s %s \n"), szDescription, szVersion);
}
CloseHandle(hProcess);
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD aProcesses[1024], cbNeeded, cProcesses;
if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
return 1;
cProcesses = cbNeeded / sizeof(DWORD);
for (UINT i = 0; i < cProcesses; i++)
PrintProcessNameAndID(aProcesses[i]);
return 0;
}
|
|
|
|
|
# 6 |
|
Member
Регистрация: 18.08.2004
Пол: Male
Сообщения: 235
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
shift_on_line,
или воспользуйся компонентом TCEVersionInfo v.1.0 _http://www.torry.net/vcl/system/versioninfo/TCEVersionInfo.zip Нужно вызвать функцию GetInfo с именем интересующего exe файла, а потом прочитать описание из свойства FileDescription и версию из FileVersion. |
|
|