Как можно изменить GetKeyState только для одного процесса из другого процесса? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть 2 процесса:

  • Процесс пользовательского интерфейса
  • Клиентский процесс

Я пытаюсь, чтобы клиентский процесс отправил сообщение в пользовательский интерфейс Thread / * процесса 1030 * таким образом, что это повлияет на его результат GetKeyState. Я хочу повлиять только на GetKeyState процесса пользовательского интерфейса, а не на любой другой процесс.

SendInput повлияет на все процессы, включая этот, но я не пытаюсь этого достичь.

Отправка WM_KEYDOWN + WM_KEYUP действительно обрабатывается, но не влияет на GetKeyState

Есть ли способ (с помощью сообщения или перехвата), чтобы я мог заставить клиента влиять на пользовательский интерфейс без изменения кода пользовательского интерфейса?

Это часть в окне Pro c Я печатаю значение GetKeyState A:

char* GetTextualKeyState(int nVirtKey) {
    short keyState = GetKeyState(nVirtKey);

    short KEY_DOWN_MASK = 0b1000000000000000;
    short TOGGLED_MASK= 0b1;

    const int TEXTUAL_KEY_STATE_LEN = 128;
    char* textualKeyState = (char *)calloc(TEXTUAL_KEY_STATE_LEN, sizeof(char));

    if (keyState & KEY_DOWN_MASK) {
        char down[] = "Down, ";
        strcpy_s(textualKeyState, TEXTUAL_KEY_STATE_LEN, down);
    }
    else {
        char up[] = "Up, ";
        strcpy_s(textualKeyState, TEXTUAL_KEY_STATE_LEN, up);
    }

    if (keyState & TOGGLED_MASK) {
        char toggled[] = "Toggled";
        strcat_s(textualKeyState, TEXTUAL_KEY_STATE_LEN, toggled);
    }

    return textualKeyState;


BOOL PaintKeyStateOfA(HDC hdc) {
    const int VK_A = 0x41;

    char* state = GetTextualKeyState(VK_A);

    const int CONTENT_LEN = 128;
    char labelContent[CONTENT_LEN] = "A KeyState: ";
    strcat_s(labelContent, CONTENT_LEN, state);

    return TextOutA(hdc, 10, 50, labelContent, strlen(labelContent));

Еще одна вещь, которую я попытался сделать для отладки GetKeyState, - добавить бесконечное l oop внутри GetMessage l oop (сразу после DispatchMessage), который регистрирует выходные данные GetKeyState и видит, что:

  1. Как и ожидалось, окно застыло
  2. На напечатанное значение не повлияло

Что мне здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...