Есть ли способ для приложения Windows получить доступ к другим данным приложений, а именно к текстовому полю ввода в графическом интерфейсе и захватить текст там для обработки в нашем собственном приложении? Если это возможно, существует ли способ «защитить» ваше приложение, чтобы предотвратить его?
EDIT: три первых ответа, похоже, касаются получения заголовка другого приложения, а не определенного поля ввода текста в этом окне. Я не ожидаю от Windows API, так что вы можете уточнить, как я могу найти определенное текстовое поле в этом окне, каковы его предварительные требования (кажется, что знание дескриптора окна требует чего-то, требуется ли ему знать текстовое поле, а также?
Как это получить? и т.д.) Фрагменты кода на С++ действительно были бы оценены по достоинству. MSDN-справка трудно просматривать, так как Win32-API имеет такие ужасные соглашения об именах. Завершено! См. мой ответ ниже для справки на С++.
Tuminoid 09 дек. 2008, в 11:17
Поделиться
Поделиться:
user-interface
7 ответов
Лучший ответ
Уроки WinApi C++ | Работа с окнами виндовс | HWND на примерах
Для чтения текстового содержимого из другого текстового окна приложения вам нужно будет как-то обработать окно управления текстовым полем. В зависимости от того, как разработан пользовательский интерфейс приложения (если он имеет пользовательский интерфейс), существует несколько способов, которыми вы можете воспользоваться для получения этого дескриптора. Вы можете использовать «FindWindow» / «FindWindowEx», чтобы найти свой элемент управления или использовать «WindowFromPoint», если это имеет смысл. В любом случае, когда у вас есть дескриптор текстового элемента управления, вы можете отправить ему сообщение «WM_GETTEXT», чтобы получить его содержимое (при условии, что оно является стандартным текстовым полем). Здесь приведенный образец (без ошибок проверки):
HWND hwnd = (HWND)0x00310E3A; char szBuf[2048]; LONG lResult; lResult = SendMessage( hwnd, WM_GETTEXT, sizeof( szBuf ) / sizeof( szBuf[0] ), (LPARAM)szBuf ); printf( «Copied %d characters. Contents: %sn», lResult, szBuf );
Я использовал «Spy ++», чтобы получить дескриптор окна с текстовым полем, который лежал вокруг. Что касается защиты ваших собственных текстовых полей от такого осмотра, вы всегда можете подклассифицировать свое текстовое поле (см. «SetWindowLong» с «GWL_WNDPROC» для параметра «nIndex» ) и выполнить некоторую специальную обработку «WM_GETTEXT» «, чтобы обеспечить обслуживание только запросов одного и того же процесса.
Raj 11 дек. 2008, в 18:05
Поделиться
Хорошо, я немного понял это. Исходная точка теперь точно знает дескриптор окна, мы знаем только частичное название окна, поэтому прежде всего найти это главное окно:
. EnumWindows((WNDENUMPROC)on_enumwindow_cb, 0); .
который перечисляет все окна на рабочем столе. Он выполняет обратный вызов с каждым из этих оконных дескрипторов:
BOOL CALLBACK on_enumwindow_cb(HWND hwndWindow, LPARAM lParam) < TCHAR wsTitle[2048]; LRESULT result; result = SendMessage(hwndWindow, WM_GETTEXT, (WPARAM) 2048, (LPARAM) wsTitle); .
и используя магию wsTitle и мало регулярного выражения, мы можем найти нужное окно. Используя ранее упомянутый Spy ++, я мог бы выяснить имя класса поля редактирования текста и использовать его, чтобы найти нужное поле в hwndWindow:
Изучение Qt Creator | Урок #4 — Работа с окнами и создание приложения для авторизации
hwndEdit = FindWindowEx(hwndWindow, NULL, L»RichEdit20W», NULL);
а затем мы можем прочитать текст из этого поля:
result = SendMessage(hwndEdit, WM_GETTEXT, (WPARAM) 4096, (LPARAM) wsText);
Источник: overcoder.net
Как считать запись из окна приложения?
Добрый день! Есть окно приложения, как я могу получить список элементов интерфейса: слова, цифры? Например такое окно: Как мне получить данные: System Properties , Computer Name , Hardware , Advanced , и т.д.? Есть ли в Python средства для работы с этими API?
Отслеживать
70.6k 12 12 золотых знаков 87 87 серебряных знаков 179 179 бронзовых знаков
задан 3 сен 2013 в 11:40
679 4 4 золотых знака 11 11 серебряных знаков 24 24 бронзовых знака
получай из системы, зачем из этого окна пытаться выдрать?
3 сен 2013 в 11:42
ну в общем в этом и вопрос, как получать из системы? И это окно- просто пример, мне не из него нужно будет вытаскивать записи.
3 сен 2013 в 11:43
Вы решили сдампить всю информацию с этого окна?
3 сен 2013 в 11:55
Да, но не с этого, но думаю, что принцип один и тот же.
3 сен 2013 в 12:27
от оси много зависит, судя по окошку надо курить в сторону Windows API
3 сен 2013 в 13:50
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Если речь не про систему, а просто за окна, то вам в сторону гугла со словами python gui automation. Это могут быть например autoit или pywingui.
Я лично люблю python+autoit.
Autoit
- Установить AutoIt http://www.autoitscript.com/site/autoit/downloads/
- Установить pywin32
Написать что то такое:
import win32com.client autoit = win32com.client.Dispatch(«AutoItX3.Control») autoit.Run(«control.exe sysdm.cpl,,3») autoit.WinWait(‘System Properties’) autoit.WinActive(‘System Properties’) print autoit.ControlGetText(‘System Properties’, «», «[CLASS:Button; INSTANCE:1]») print autoit.ControlGetText(‘System Properties’, «», «[CLASS:Static; INSTANCE:2]») print autoit.ControlGetText(‘System Properties’, «», «[CLASS:Button; INSTANCE:2]»)
Табы кстати в таком autoit-е вроде без поллитры не обработать, но с простыми контролами все удобно. К тому же в в комплекте с autoit-ом поставляется инструмент для анализа окон — главным образом чтобы понять какой номер кнопки.
PyWinAuto
Другой вариант — pywinauto. Тут с табами все просто:
from pywinauto import application app = application.Application() app.Start_(«control.exe sysdm.cpl,,3») app.connect_(title = «System Properties») print app.SystemProperties.TabControl.Texts()
Источник: ru.stackoverflow.com
Возможно ли получить данные из всплывающегося окна python?
Сейчас занимаюсь парсингом сайта с ценами криптовалют, и там иногда если цена токена очень маленькая то она показывается только при наведении мышкой. Можно ли получить ее с помощью requests или может какой то другой библиотекой? Ссылка удалена модератором.
- Вопрос задан 15 мар.
- 94 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 2
non progredi est regredi
ищи как сделан и тащи из тега
пробуй Селениум, точно должен найтись
Источник: qna.habr.com