udi orit Ответов: 1

Как я могу изменить название элемента управления пункта меню в приложении, которое не является моим, используя C++ win32 api?


Например, если я захочу изменить строку "копировать" в меню "Правка" в блокноте.

Что я уже пробовал:

Я пытаюсь сделать следующее:
используйте enumWindowsProc (работает хорошо):
BOOL CALLBACK enumWindowsProc(
    __in  HWND hWnd,
    __in  LPARAM lParam
) {
    int length = ::GetWindowTextLength(hWnd);
    if (0 == length) return TRUE;

    TCHAR* buffer;
    buffer = new TCHAR[length + 1];
    memset(buffer, 0, (length + 1) * sizeof(TCHAR));

    GetWindowText(hWnd, buffer, length + 1);
    wcout << buffer << endl;
    wstring s2(buffer);
    wstring s3(L"Notepad");
    std::string::size_type found = s2.find(s3);
    if (found != std::string::npos)
    {
        EnumChildWindows(hWnd, EnumChildProc, 0);
    }
    delete[] buffer;
    return TRUE;
}

а чем пользоваться EnumChildProc (не дает требуемого поведения. Я надеялся получить дерево управления):
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
    int length = ::GetWindowTextLength(hwnd);
    if (0 == length) return TRUE;

    TCHAR* buffer;
    buffer = new TCHAR[length + 1];
    memset(buffer, 0, (length + 1) * sizeof(TCHAR));

    GetWindowText(hwnd, buffer, length + 1);
    OutputDebugString(buffer);
    OutputDebugString(L"\n");
    
    EnumChildWindows(hwnd, EnumChildProc, 0);

    delete[] buffer;
    return TRUE;
}

1 Ответов

Рейтинг:
1

Richard MacCutchan

Вы не можете легко изменить его, так как меню хранятся в разделе ресурсов приложения. Можно изменять элементы ресурсов, но это должно быть сделано с осторожностью, так как это может легко сделать приложение непригодным для использования.

Видеть Добавление, удаление и замена ресурсов - Win32 apps | Microsoft Docs[^]