Используйте подпись pinvoke для GetKeyState под Windows, MSDN о GetKeyState здесь. Что касается моно, я не уверен.
Нет такой вещи, как кроссплатформенный API, если p / invoke используется, поскольку Mono в Linux не имеет эквивалента Win32 API, помните, что все упражнение в отношении Win32 API заключается в том, что они предназначены специально для системы Windows , в котором Linux нет!
Чтобы быть по-настоящему независимым от платформы с .NET и Mono под Linux, требуется, чтобы не использовались определенные Win32 API и p / Invokes.
Надеюсь, это поможет,
С наилучшими пожеланиями,
Том.