IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Заголовок в Delphi 6 (http://www.imho.ws/showthread.php?t=117720)

shift_on_line 07.04.2007 21:42

Заголовок в Delphi 6
 
Как в Delphi 6 получить заголовок активного окна?

Bishop 08.04.2007 17:10

примерно вот так:
var
hWindow: HWND;
sText: array [0..255] of char;
begin
hWindow = GetForegroundWindow();
GetWindowText(hWindow, @sText, 255);
end;

shift_on_line 08.04.2007 20:55

Спасибо. Работает :)

shift_on_line 09.04.2007 12:56

Что-то заголовки неподходят, как получать такие:

http://st1.risunok.net/7620/122.JPG

Например в опере в заголовке отображается название страници, а там получается название программы, как его получить??

Bishop 09.04.2007 18:55

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;
}

Хотя, как-то коряво вышло. Чисто для демонстрации. А на Delphi сам адаптируй :)

Bishop 10.04.2007 15:46

shift_on_line,
или воспользуйся компонентом TCEVersionInfo v.1.0
_http://www.torry.net/vcl/system/versioninfo/TCEVersionInfo.zip

Нужно вызвать функцию GetInfo с именем интересующего exe файла, а потом прочитать описание из свойства FileDescription и версию из FileVersion.


Часовой пояс GMT +4, время: 20:49.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.