Более одной проблемы с прослушивателем LowLevelKeyboardProcC#

Место общения программистов C#
Ответить
Anonymous
 Более одной проблемы с прослушивателем LowLevelKeyboardProc

Сообщение Anonymous »

Когда я использую Anydesk или Google Remote, приложение не обрабатывает жесты клавиатуры.
Чтобы решить эту проблему, я написал прослушиватель прокси-клавиатуры. Я использую LowLevelKeyboardProc для прослушивания клавиш клавиатуры.
Иногда это работало, а иногда нет. Когда я протестировал это, я понял, что последнее открытое приложение первым обнаруживает клавишу клавиатуры. Если другое приложение открывается первым, у меня нет проблем, потому что мое приложение открывается вторым. Однако, если другое приложение откроется позже, я не смогу обнаружить клавиши.
Я думаю, что другое приложение не позволяет продолжать перемещение клавиш. Отладил собственное приложение, открыв его несколько раз. Если я жду отладки кода в отладчике, движение клавиши не передается в приложения, открытые до меня.
Блок кода, который я жду в отладчике, выглядит следующим образом:

Код: Выделить всё

public IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam)
{
bool fEatKeyStroke = false;

var wparamTyped = wParam.ToInt32();
if (Enum.IsDefined(typeof(KeyboardState), wparamTyped))
{
object o = Marshal.PtrToStructure(lParam, typeof(LowLevelKeyboardInputEvent));
LowLevelKeyboardInputEvent p = (LowLevelKeyboardInputEvent)o;

var eventArguments = new GlobalKeyboardHookEventArgs(p, (KeyboardState)wparamTyped);

var key = (Keys)p.VirtualCode;
if (RegisteredKeys == null || RegisteredKeys.Contains(key))
{
EventHandler handler = KeyboardPressed;
handler?.Invoke(this, eventArguments);

fEatKeyStroke = eventArguments.Handled;
}
}

return fEatKeyStroke ? (IntPtr)1 : CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);
}
Как я могу фиксировать движения клавиатуры независимо от других приложений?

Подробнее здесь: https://stackoverflow.com/questions/793 ... er-problem
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»