2015-06-04 2 views
0

Чтобы дать краткую предысторию, чтобы принести вещи в моей текущей позиции/причины моего вопроса:On-Screen Keyboard скрыть и запустить в случае первенствовать использовать функциональные возможности

Первоначально я хотел использовать SendKeys для отправки клавиатуры нажимает на приложение удаленного терминала Citrix Xenapp (эмулятор VT320).

  • Это не работает.

После некоторого расследования выяснилось, что это была достаточно распространенная проблема.

В конце концов я нашел работу, которая включала открытие окна «Экранная клавиатура» и отправка mouseclicks с помощью VBA в приложение OSK. Передача ключей будет успешно принята в приложении удаленного терминала.

Это решение является довольно неудобным и не очень практичным решением, поскольку оно зависит от многих факторов, например. разрешение экрана, координаты/текущее положение OSK и т.д.

С учетом вышесказанного, я ищу, чтобы достичь более полного доказательства метод и вот мои мысли:

  • Вместо того чтобы использовать имитацию кликами мыши В идеале я хотел бы либо «внедрить» приложение OSK в экземпляр excel, либо указать каждый ключ
  • или скрыть приложение и найти способ заставить приложение получать запрошенные ключи VBA.

Я знаю, что Sendkeys имеет свои ограничения, поэтому я также попытался использовать SendInput с помощью Keyb_Event, и это также не сработало.

Для любого наполовину опытного специалиста я, очевидно, начинающий, поэтому, возможно, я страдаю от недостатка знаний.

  • Если кто-то может указать мне в правильном направлении для решения этой проблемы, я бы очень признателен!

Большое спасибо.

EDIT

Я посмотрел на это немного больше, и нашел этот пост:

Finding the class name of the On-Screen Keyboard?

Какой бы предположить, что, если я знаю, что класс на экранной клавиатуре, я может использовать свои команды в excel VBA?

  • Я попытался использовать код в вопросе, но не смог заставить его работать.

Так что, надеюсь, мой вопрос немного легче ответить?

Могу ли я использовать имя класса экранной клавиатуры app/объявить функцию API, которая позволит мне отправлять моделируемые ключевые функции, как если бы это приложение OSK было нажато мышью?

Надеюсь, кто-то может помочь !!

ответ

1

Пытаться автоматизировать локальные приложения может быть довольно затруднительным. Выполнение этого через соединение Citrix HDX просто болезненно.

Есть ли у вас какие-либо вопросы в отношении среды Citrix? Если это так, я бы попытался написать приложение автоматизации, которое фактически выполняется на сервере Citrix в том же сеансе, что и опубликованное приложение, которое вы пытаетесь автоматизировать. Это имеет то преимущество, что вы эффективно автоматизировали локальное приложение, которое облегчило бы жизнь.

В зависимости от того, как работает ваша автоматизация, вам может потребоваться установить связь между вашим приложением автоматизации, выполняемым в сеансе Citrix и вашим клиентом. Вы можете использовать WCF для объединения двух.

Так вот, как я хотел бы попробовать и сделать как относительно ваш конкретный вопрос я предоставил некоторые мысли ниже ...

мысли автоматизации OSK

Я сделал некоторую ограниченную автоматизацию OSK. На самом деле есть две OSK, если вы используете Win8. Osk.exe - это старая, которая была вокруг. TabTip.exe - это новая ОС OS для Win8.

Одна из проблем, которые следует иметь в виду, заключается в том, что оба этих процесса выполняются как процессы высокой целостности, что означает, что процессы нормальной (средней) целостности имеют очень ограниченные возможности для их автоматизации. Поэтому, хотя я мог бы автоматизировать некоторые вещи, многие сообщения просто игнорировались. Так что, возможно, поэтому вы обнаруживаете, что OSK не отвечает, как вы ожидаете.

Вы можете обойти это, запустив приложение автоматизации как процесс высокой целостности, но это обычно означает, что вам нужна привилегия локального администратора (или локальной системы) для запуска процесса высокой целостности. Я никогда не рассматривал специфику того, как вы создаете процессы высокой целостности. Я знаю, что есть инструмент командной строки, который вы можете использовать, чтобы заставить процесс работать на определенном уровне (icacls.exe), например.

https://msdn.microsoft.com/en-us/library/bb625960.aspx

Я полагаю, было бы API, чтобы сделать это, а также.

+0

Спасибо за ваш ответ! - Нет контроля над средой citrix, поэтому я думаю, что ключом к вашему высокому методу целостности. Спасибо. – Barkered

Смежные вопросы