Есть ли способ вызвать событие вставки (Ctrl + V) для любого приложения? - PullRequest
0 голосов
/ 23 июня 2009

У меня есть код, который запускает вставку в любое стороннее приложение, отправляя ctrl + v (см. Ниже), но, похоже, это не работает с CITRIX. Есть ли другой метод для запуска Ctrl + V, кроме симуляции клавиш?

keybd_event(VK_CONTROL, Lo(MapVirtualKey(VK_CONTROL,0)), 0,0);
keybd_event(86, Lo(MapVirtualKey(86,0)), 0,0);
keybd_event(86, Lo(MapVirtualKey(86,0)), KEYEVENTF_KEYUP,0);

Ответы [ 4 ]

3 голосов
/ 23 июня 2009

Может быть, вы можете отправить сообщение WM_PASTE в приложение?

1 голос
/ 23 июня 2009

Ах, хорошие проблемы с Citrix!

  1. Я бы сначала проверил на стороне принимающего приложения, что у вас действительно есть что-то в буфере обмена. Попробуйте вставить туда вручную. Если он пуст, это не проблема автоматизации / перехвата клавиатуры.
  2. Если содержимое буфера обмена действительно доступно, я бы тогда попробовал другие способы связи с принимающим приложением: отправка сообщений Windows (WM_PASTE, а также других в случае невозможности увидеть, может ли кто-нибудь пройти), а также поиск Вы можете сделать DDE.
0 голосов
/ 23 июня 2009

Я думаю, что критическое утверждение здесь - с CITRIX.

Мой опыт взаимодействия с приложениями Citrix заключается в том, что многие вещи, которые нормально работают на обычном рабочем столе, не работают при работе в среде Citrix. Сначала я бы попытался отправить сообщение WM_PASTE в соответствии с предложением Gamecat, и если это не удастся, вы можете убедиться, что ваши клиенты запускают ваше приложение через рабочий стол citrix, НЕ запуская приложения непосредственно с ярлыка на рабочем столе. Когда приложение citrix запускается с внешнего ярлыка, оно получает сеанс, отличный от запуска с внутреннего ярлыка на рабочем столе citrix.

0 голосов
/ 23 июня 2009

Вы можете попробовать PostKeyEx32

Я написал статью на португальском, но вы можете прочитать код, это просто.

http://www.cesarromero.com.br/simulando-keypress-com-postkeyex32/

Вы можете отправить CTRL + Vm следующим образом:

PostKeyEx32(Ord('V'), [ssCtrl], False); 
...