События робота не запускаются при вызове из визуального кода С++

У меня есть проект совместного использования экрана между двумя пользователями, а затем удаленное управление экраном. У меня есть визуальный код С++, с помощью которого я вызываю метод совместного использования экрана Java для совместного использования экрана. Это работает очень хорошо.

Теперь я пытаюсь вызвать другие события робота, такие как (mouseMove, нажатие клавиши и т. д.). Я могу плавно вызывать методы Java (которые содержат вызовы событий робота) из моего кода С++, и функция всегда возвращает true обратно в мой код С++. , тем самым показывая успешное выполнение, но события робота, написанные в методах Java, не запускаются. Может ли кто-нибудь помочь мне двигаться в правильном направлении. Мой код выглядит следующим образом:

Из кода С++:

 status=  m_pJVM->InvokeClassMethod(m_sccObj,"keyPress", 
                                "(D)V", NULL,
                                 keyCode);
   if (status)
    {
      GetLogger()->Log(_T("Successfull key Press"));
   }
    else
    {
      GetLogger()->Log(_T("Unsuccessfull key Press"));
    }

Здесь я всегда получаю «Успешное нажатие клавиши» в качестве вывода на моей консоли.

На стороне Java код:

public boolean keyPress(double key)
    {
        try
        {
            this.robot = new Robot();
            if(robot != null)
            {
            robot.delay(5000);
            robot.keyPress(java.awt.event.KeyEvent.VK_T);
            robot.keyPress(KeyEvent.VK_E);
            robot.keyPress(KeyEvent.VK_S);
            robot.keyPress(KeyEvent.VK_T);
            return true;
            }
            else
            {
               return false;
            }
        }
        catch(Exception e)
        {
          return false;
        }
    }

Может ли кто-нибудь сказать, не упускаю ли я что-нибудь здесь.

Спасибо, любая помощь будет оценена.


person Vipin Nair    schedule 26.09.2012    source источник


Ответы (1)


Процесс Java должен выполняться в пользовательском пространстве, имеющем доступ к current desktop.
Проверьте, под какими учетными данными он запускается. Если он работает через службу, убедитесь, что:

Services.msc > [Your host service] > Log On > Allow service to interact with desktop проверяется.

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

person Ujjwal Singh    schedule 26.09.2012
comment
Спасибо Ujjwal за быстрый ответ, но, как вы предположили, это может быть не проблема. Я создал тестовое приложение, а затем вызвал события робота, он работал как шарм. Кажется, это какая-то проблема при вызове из кода С++ - person Vipin Nair; 26.09.2012
comment
как насчет того, чтобы изменить тип и значение возвращаемого значения KeyPress, чтобы проверить, каков поток кода: измените тип возвращаемого значения на Integer и верните, скажем, 99 в случае успеха и 11 в случае неудачи. Также я не вижу использования входного параметра key для KeyPress java fn. - person Ujjwal Singh; 26.09.2012
comment
Привет, Ujjawal, да, тестовое приложение было в java. А также я вернул значение int из метода java, и я всегда получал 1 для успеха в качестве возвращаемого значения. - person Vipin Nair; 26.09.2012
comment
Есть использование входного параметра, прямо сейчас я его не использовал, я проверял работу робота. - person Vipin Nair; 26.09.2012