Имитировать нажатие кнопки в неактивном окне в Windows — задача достаточно сложная, так как обычно интерфейс приложений обрабатывает события только для активного окна. Тем не менее, есть несколько подходов, которые вы можете попробовать.
### 1. Использование `SendInput`
Функция `SendInput` позволяет посылать события ввода (например, нажатия клавиш и движения мыши) на уровне системы, что может работать даже с неактивными окнами. Вот пример, как можно использовать `SendInput` для имитации нажатия клавиши:
```cpp
#include <Windows.h>
void PressButton()
{
// Создаем структуру INPUT для нажатия клавиши
INPUT input = { 0 };
input.type = INPUT_KEYBOARD;
input.mi.wVk = VK_RETURN; // примеры для клавиши Enter
// Отправляем нажатие клавиши
SendInput(1, &input, sizeof(INPUT));
// Отпускаем клавишу
input.mi.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &input, sizeof(INPUT));
}
int main()
{
Sleep(2000); // Задержка, чтобы перейти в нужное окно
PressButton();
return 0;
}
```
Этот код имитирует нажатие клавиши Enter. Обратите внимание, что нажатие клавиши будет срабатывать, когда окно будет в фокусе или активно.
### 2. Использование WinAPI для взаимодействия с неактивным окном
Если у вас есть конкретное окно и вы знаете, как оно обрабатывает команды, вы можете использовать `PostMessage` для отправки сообщений напрямую. Однако, это сработает при условии, что целевое приложение обрабатывает такие сообщения.
```cpp
HWND hwnd = FindWindow(NULL, L"Название вашего окна");
if (hwnd != NULL)
{
// Отправляем сообщение WM_COMMAND или WM_SETTEXT в зависимости от вашего случая
PostMessage(hwnd, WM_COMMAND, (WPARAM)BUTTON_ID, 0);
}
```
### 3. Использование библиотек
Иногда проще воспользоваться библиотеками, которые уже реализуют функциональность, необходимую для работы с GUI-приложениями, такими как AutoIt или AutoHotkey, которые смогут справиться с задачей более эффективно, чем расписанные вручную функции WinAPI.
### 4. Процесс инжектирования
Если ваши предыдущие попытки инжектировать DLL не сработали, убедитесь, что ваша DLL действительно выполняет код, который вы ожидаете, и что у вас есть достаточные права доступа для выполнения инжекции.
### Важно
Стоит помнить, что попытки управления интерфейсами приложений, особенно через инжектирование и отправку сообщений, могут привести к непредсказуемому поведению и потенциальным нарушениям лицензионных соглашений с некоторыми программами. Используйте эти методы только для законных целей и приложений, на которые у вас есть право.