Win32 эквивалент .net SendKeys

Я разрабатываю систему, которая считывает жест с Kinect и выполняет некоторые действия. Я пытаюсь включить систему, чтобы иметь возможность отправлять HotKey в приложение. Моя система пишет на C ++, но пользовательский интерфейс находится на C ++. Net. Я смог использовать SendKeys из части пользовательского интерфейса, и это действительно работает.

Есть ли эквивалент Win32, чтобы я мог использовать его в своей системе?

Заранее спасибо!


person Oni    schedule 27.07.2011    source источник
comment
Вы пытаетесь обмениваться данными между вашим собственным кодом C ++ и C # или пытаетесь отправить горячую клавишу в другое отдельное приложение? (Или, спросив по-другому, жест управляет вашим собственным пользовательским интерфейсом, или вы хотите управлять другими приложениями?)   -  person BrendanMcK    schedule 28.07.2011
comment
Я пытаюсь отправить горячую клавишу в другие приложения, такие как Windows Media Player, Adobe Reader или PowerPoint.   -  person Oni    schedule 28.07.2011
comment
SendInput, вероятно, будет подходящим вариантом. Обратите внимание, что, как и в случае с SendKeys, входные данные попадают в то приложение, которое в данный момент находится в фокусе, вы на самом деле не отправляете входные данные в приложение, вы действительно отправляете входные данные в систему, и система направляет их соответствующим образом.   -  person BrendanMcK    schedule 28.07.2011


Ответы (3)


В WIN32 SendKeys называется SendInput:

http://msdn.microsoft.com/en-us/library/ms646310(v=vs.85).aspx

Он также может имитировать движения мыши и т. Д.

person 500 - Internal Server Error    schedule 27.07.2011
comment
+1 - Незначительное примечание - SendInput не является прямым эквивалентом для SendKeys. SendKeys - это действительно вспомогательная оболочка для SendInput, которая выполняет большую часть работы за вас. Используя SendInput, вы должны заполнять набор структур для каждого нажатия и отпускания клавиши, а не просто передавать простую строку. Тем не менее подходящий API для использования здесь. - person BrendanMcK; 28.07.2011

При наличии нескольких приложений в Vista и более поздних версиях уровни целостности UAC могут помешать приложениям отправлять / получать сообщения Windows таким образом. Возможно, вам потребуется вызвать ChangeWindowMessageFilter, Функции ChangeWindowMessageFilterEx для включения приема сообщений в высшем повышенном процессе.

person Ajay    schedule 27.07.2011
comment
Они влияют только на сообщения Windows (WM_ * и т.п.), отправленные через SendMessage и / или PostMessage, но не на ввод, отправленный через SendInput. (На ввод влияют уровни целостности, но эти API не влияют на то, как он фильтруется.) - person BrendanMcK; 28.07.2011
comment
Вы, наверное, ошибаетесь: эта функция подчиняется UIPI. Приложениям разрешено вводить ввод только в приложения с таким же или меньшим уровнем целостности. - person Ajay; 28.07.2011
comment
Это то, что я имел в виду, говоря, что на ввод влияют уровни целостности, но эти API не влияют на то, как он фильтруется. Как я уже сказал, эти API не влияют на работу SendInput. В любом случае эти API-интерфейсы используются только в целевом приложении, которое может эффективно использовать их для снижения щитов и разрешать сообщения WM_, которые в противном случае были бы отфильтрованы UIPI - они вообще бесполезны в приложении, которое вызывает SendInput в первую очередь. Если вы хотите иметь возможность SendInput в приложение IL более высокого уровня, вам необходимо запустить расширенный. - person BrendanMcK; 28.07.2011
comment
Неправда, настраиваемое сообщение TaskbarCreated проводника Windows отправляется из процесса с более низким IL (explorer.exe) и может быть перехвачено процессом с более высоким IL. social.msdn.microsoft.com/ Форумы / ru / windowsuidevelopment / thread / - person Ajay; 28.07.2011
comment
Я думаю, вы смешиваете ввод / SendInput с сообщениями / SendMessage. Qu здесь касается SendInput, который отправляет низкоуровневый ввод с клавиатуры / нажатия клавиши (или перемещения мыши) в текущий активный поток. Windows фильтрует их на основе уровня IL и не принимает во внимание фильтр сообщений. USER32 в конечном итоге преобразует эти низкоуровневые входные данные в оконные сообщения, связанные с клавишами, но на этом этапе он уже прошел фильтры UIPI. С другой стороны, сообщения, которые приложение с низким IL отправляет приложению с более высоким IL с помощью SendMessage или PostMessage (включая TaskbarCreated), фильтруются этими API. - person BrendanMcK; 28.07.2011

Собственный эквивалент - keybd_event

http://msdn.microsoft.com/en-us/library/ms646304(v=vs.85).aspx

person grivescorbett    schedule 27.07.2011
comment
Согласно MSDN: Примечание: эта функция была заменена. Вместо этого используйте SendInput. - person BrendanMcK; 28.07.2011