Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
3 / 3 / 1
Регистрация: 31.07.2016
Сообщений: 43

Получить Title активного окна из Java

31.07.2016, 06:22. Показов 4303. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужно из java приложения получить заголовок активного в данный момент окна - любого, т.е. не из этого же java приложения.
Ну к примеру пользователь работает с блокнотом - программа должна получить "Безымянный - Блокнот" итд.
Т.е. не нужно получить список всех процессов, нужно получить заголовок активного окна, с которым работает пользователь.

Желательно конечно чтобы код был кросплатформенный, windows и linux но возможно ли такое не знаю.
Как крайний вариант думаю написать dll на Delphi - и подгружать его через jni - но это будет уже не кросплатформенность.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.07.2016, 06:22
Ответы с готовыми решениями:

Скриншот активного окна
Доброго времени суток. Собственно сам вопрос заключается в том, как сделать скриншот активного окна. Сделать скриншот всего экрана...

Выбор активного окна и его полей
Здравствуйте. Подскажите пожалуйста, как с помощью инструментов Java выбрать активное(всплывающее окно в браузере) появляеться...

Как взять title, process, process id активного окна?
Хочу в этом switch, отловить title, process, process id. У меня есть 2 функции LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM...

8
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
31.07.2016, 08:39
Цитата Сообщение от Javagif Посмотреть сообщение
Как крайний вариант думаю написать dll
единственный вариант скорее всего. Джава не работает на том уровне, что вам нужен.
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
04.08.2016, 08:43
Не подойдёт? Или это.
0
3 / 3 / 1
Регистрация: 31.07.2016
Сообщений: 43
04.08.2016, 21:57  [ТС]
Да в принципе тот почти таким же кодом на win api, я уже написал dllку.
Теперь немного другой вопрос интересует - как теперь сделать dllку(или как они там называются) чтобы она выполняла те же функции, но уже на Linux ?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
05.08.2016, 00:50
Javagif, этот вопрос следует задать в другом разделе.
0
3 / 3 / 1
Регистрация: 31.07.2016
Сообщений: 43
12.08.2016, 04:08  [ТС]
Что-то не могу понять из-за чего ошибка возникает.
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/sun/jna/Library
Подскажите, вроде всё правильно, путь до dll корректный
Если грузить так System.load("c:/Java/Projects/JavaSwing/dll/WinMon.dll"); - то грузит, а через Native.loadLibrary - нет

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public static interface wndInterfasor extends Library {
        public String GetActiveWnd();
 
        public Strings GetListWnd();
    }
 
 
    public App() {
        button_msg.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println(System.getProperty("java.library.path"));
 
// На этой строке эта ошибка
 wndInterfasor lib =  (wndInterfasor) Native.loadLibrary("C:/Java/Projects/JavaSwing/dll/WinMon.dll", wndInterfasor.class);
 
                System.out.println(lib.GetActiveWnd());
 
            }
        });
    }
Добавлено через 19 часов 22 минуты
Если надо, то вот полный список ошибок.
Кажется программе не получается загрузить библиотеку по указанному пути, но путь правильный.
System.load("c:/Java/Projects/JavaSwing/dll/WinMon.dll"); - отрабатывает нормально
C:\Java\Projects\JavaSwing\dll - System.out.println(System.getProperty("j ava.library.path"));

Ошибки

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/sun/jna/Library
at java.lang.ClassLoader.defineClass1(Nativ e Method)
at java.lang.ClassLoader.defineClass(Unknow n Source)
at java.security.SecureClassLoader.defineCl ass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unkn own Source)
at java.net.URLClassLoader.access$100(Unkno wn Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivile ged(Native Method)
at java.net.URLClassLoader.findClass(Unknow n Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadCla ss(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.codebind.App$1.actionPerformed(App.j ava:80)
at javax.swing.AbstractButton.fireActionPer formed(Unknown Source)
at javax.swing.AbstractButton$Handler.actio nPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActio nPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPresse d(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListen er.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unk nown Source)
at javax.swing.JComponent.processMouseEvent (Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unk nown Source)
at java.awt.Container.dispatchEventImpl(Unk nown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetM ouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMo useEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchE vent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unk nown Source)
at java.awt.Window.dispatchEventImpl(Unknow n Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Un known Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivile ged(Native Method)
at java.security.ProtectionDomain$JavaSecur ityAccessImpl.doIntersectionPrivilege(Un known Source)
at java.security.ProtectionDomain$JavaSecur ityAccessImpl.doIntersectionPrivilege(Un known Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivile ged(Native Method)
at java.security.ProtectionDomain$JavaSecur ityAccessImpl.doIntersectionPrivilege(Un known Source)
at java.awt.EventQueue.dispatchEvent(Unknow n Source)
at java.awt.EventDispatchThread.pumpOneEven tForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsF orFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsF orHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents( Unknown Source)
at java.awt.EventDispatchThread.pumpEvents( Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.sun.jna.Library
at java.net.URLClassLoader.findClass(Unknow n Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadCla ss(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 49 more

Добавлено через 45 минут
Блин, даже из этого примера, со стандартным winApi - выходит та же ошибка

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
    static class User32DLL {
        static { Native.register("user32"); }
        public static native int GetWindowThreadProcessId(HWND hWnd, PointerByReference pref);
        public static native HWND GetForegroundWindow();
        public static native int GetWindowTextW(HWND hWnd, char[] lpString, int nMaxCount);
    }
}
 
    public static void main(String[] args) throws Exception {
        char[] buffer = new char[MAX_TITLE_LENGTH * 2];
        GetWindowTextW(GetForegroundWindow(), buffer, MAX_TITLE_LENGTH);
        System.out.println("Active window title: " + Native.toString(buffer));
}
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/sun/jna/Native
at com.codebind.App$User32DLL.<clinit>(App. java:80)
at com.codebind.App$1.actionPerformed(App.j ava:97)
at javax.swing.AbstractButton.fireActionPer formed(Unknown Source)
at javax.swing.AbstractButton$Handler.actio nPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActio nPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPresse d(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListen er.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unk nown Source)
at javax.swing.JComponent.processMouseEvent (Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unk nown Source)
at java.awt.Container.dispatchEventImpl(Unk nown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetM ouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMo useEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchE vent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unk nown Source)
at java.awt.Window.dispatchEventImpl(Unknow n Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Un known Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivile ged(Native Method)
at java.security.ProtectionDomain$JavaSecur ityAccessImpl.doIntersectionPrivilege(Un known Source)
at java.security.ProtectionDomain$JavaSecur ityAccessImpl.doIntersectionPrivilege(Un known Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivile ged(Native Method)
at java.security.ProtectionDomain$JavaSecur ityAccessImpl.doIntersectionPrivilege(Un known Source)
at java.awt.EventQueue.dispatchEvent(Unknow n Source)
at java.awt.EventDispatchThread.pumpOneEven tForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsF orFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsF orHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents( Unknown Source)
at java.awt.EventDispatchThread.pumpEvents( Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.sun.jna.Native
at java.net.URLClassLoader.findClass(Unknow n Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadCla ss(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 38 more

Подскажите, может как то надо Intellij Idea правильно настроить чтобы работала с JNI ?
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
13.08.2016, 16:01
java.lang.NoClassDefFoundError: com/sun/jna/Native
Библиотеку-то с JNA подключать надо.
0
3 / 3 / 1
Регистрация: 31.07.2016
Сообщений: 43
13.08.2016, 17:08  [ТС]
Библиотеку-то с JNA подключать надо.
Не понял, что имеете ввиду.
import com.sun.jna.Native; - Такая строка в коде есть
0
3 / 3 / 1
Регистрация: 31.07.2016
Сообщений: 43
21.08.2016, 03:54  [ТС]
Вобщем разобрался как подключить jna - оказывается надо было отдельные библиотеки качнуть и добавить в проект.
Пришлось также функцию в dll переписать чтобы она возвращала строку не как String, а как Pchar - иначе java программа зависала.

Теперь не зависает, строка получается, НО если функция возвращает строку на кириллице, то кирилица выходит с кракозябрами - ������.
Вопрос как сделать чтобы и килилица в java нормально выводилась ?

Ещё - как вернуть из dll - массив строк ? или объект(экземпляр схожего класса - например TStringList - как в Delphi) ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.08.2016, 03:54
Помогаю со студенческими работами здесь

Получить заголовок активного окна
Приветствую. Хочу получать лог смены активности окон. Пытаюсь использовать такой код в dll: var WinAct: HHook = 0; F:textfile; ...

Получить заголовок активного окна C++
Ребят помогите пожалуйста . Нужна узнать заголовок активного окна и вывести его в консоль . Вот написал код &gt;&gt; #include...

Получить HWND активного дочернего окна
Дайте минимальный проверочный код который даст HWND активного дочернего окна. Если кто-то скажет GetFocus то либо приведите пример либо...

Получить заголовок активного окна (Ubuntu)
Возникла необходимость написать программу учета времени работы в определенной программе. Смысл работы в принципе простой, каждую минуту...

Получить заголовок активного окна в системе
Есть способ получения имени окна string wTitle = GetActiveWindowTitle(); Нужно сделать такое условие if (wTitle = &quot;MS...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru