3 / 3 / 1
Регистрация: 31.07.2016
Сообщений: 43

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

31.07.2016, 06:22. Показов 4364. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru