Отправка ключей в другое окно с помощью c # - PullRequest
0 голосов
/ 25 мая 2018

Я использую Tobii Eyetracker для проекта на c #.Цель состоит в том, чтобы отправить определенный ключевой ввод (т. Е. F5 для обновления) в окно, на которое в данный момент смотрят.

const UInt32 WM_KEYDOWN = 0x0100;
const int VK_F5 = 0x74;

Hook.GlobalEvents().OnCombination(new Dictionary<Combination, Action> {
    {Combination.FromString("Shift+Alt+L"), () => {

        // get IntPtr of gazed at window and sets it active, this works                    
        IntPtr newWindow = WindowFromPoint(new Point(xCord,yCord));
        SetForegroundWindow(newWindow);
        SetActiveWindow(newWindow);

        // should send "F5" to the window thats gazed at
        PostMessage(newWindow, WM_KEYDOWN, VK_F5, 0);

        }
    }
});

[DllImport("user32.dll")]
static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);

Ввод захватывается с помощью пакета NuGet globalMouseKeyHook и работает.Но PostMessage отправляет команду F5 только в том случае, если другое окно активно и ранее получены входные данные.Таким образом, оно не обновляет текущее окно (даже если оно остается активным), а также не обновляет другое окно, если предыдущее окно не получило никаких входных данных (даже если новое окно правильно установлено как активное).

...