Ява вижу, на что ориентирован процесс ОС (т.е. firefox) - PullRequest
2 голосов
/ 15 января 2012

У меня есть Java-программа, которая запускает программу при запуске.Это может быть любой исполняемый файл.Проблема в том, что java-приложение применяет несколько входов к любому запущенному приложению, когда оно сфокусировано (приложение выполняет ввод / вывод с клавиатуры) Кто-то сказал мне, что невозможно сделать такой вызов непосредственно из Java, чтобы увидеть, какая программа сфокусирована.Поэтому я не могу проверить, сфокусировано ли желаемое приложение или нет.как

if(processName == launchedExeName) // Do code

Существуют ли какие-либо инструменты или библиотеки, которые я могу реализовать в своем проекте Java?

спасибо,

Сидар

1 Ответ

2 голосов
/ 15 января 2012

Вы не сможете сделать это напрямую из Java без некоторых собственных вызовов.Некоторая библиотека может уже сделать это для вас, но я не знаю ни о чем.Так что вам придется написать это самостоятельно - и это, очевидно, полностью зависит от ОС.

Для окон это относительно просто (и на самом деле есть какая-то оболочка JNI для API win32, так что вам не нужно делать это самостоятельно, может быть, немного оглядеться), я действительно должен был написать нечто подобное некоторое время назадИтак, вот базовая версия (без проверки ошибок для простоты):

HWND hForeground = GetForegroundWindow();
DWORD pid;
GetWindowThreadProcessId(hForeground, &pid);
HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pid); 

Теперь у нас есть дескриптор процесса, и вы можете делать с ним все, что захотите.Если вам нужен путь процесса, он будет выглядеть примерно так:

DWORD size = MAX_PATH;
TCHAR pathName[MAX_PATH];
QueryFullProcessImageName(hProc, /*win32 path format*/ 0, pathName, &size);

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

Как я уже говорил, я помню, что читал о некоторых оболочках Win32 в Java, поэтому вам, возможно, не придется самостоятельно писать материал JNI / JNA.И понятия не имею о * nix здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...