Вы не сможете сделать это напрямую из 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 здесь.