Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 12

Символ под курсором в чужом окне

17.08.2011, 15:08. Показов 2769. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
день добрый, спецам. сразу прошу прощения за возможно ламерский вопрос. а вопрос вот в чём - надо прописать в своём textbox'се символ из другого окна(имменно не из своего). всё что мне удалось 'накопать' - это то, что надо использовать api-функцию WindowFromPoint и вероятно прописать WM_GETTEXT. ясно также, что надо сначало определить координаты курсора(это просто), а вот что прописать далее - тут уже у меня тупик пятый день. если у кого есть мысли, большая посьба помогите. вероятно надо сначало определить hwnd - окна и послать SendMessage, а вот как конкретно это сделать - тут у меня тупик.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.08.2011, 15:08
Ответы с готовыми решениями:

Отверстие в окне под курсором
Здравствуйте. Как возможно сделать отверстие в окне под курсором,чтобы нажатие мыши могло распространяться на другое окно.Заранее...

Как считать символ под курсором
Console.SetCursorPosition (3, 5); как проверить является ли символ '#'? Добавлено через 1 час 31 минуту ну что не знаете ответа на...

Рисование в чужом окне
Собственно, я понимаю как рисовать, мне больше интересно 2 момента: 1) Если я просто буду рисовать на окне, то при его перерисовке всё...

17
1 / 1 / 0
Регистрация: 01.05.2011
Сообщений: 203
17.08.2011, 16:05
Если ты знаеш название окна, то hwnd найдеш так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
'В модуль...
Public Declare Function FindWindow Lib 'user32' Alias 'FindWindowA' (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SendMessage Lib 'user32' Alias 'SendMessageA' (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 
'В форму...
Dim sWindowName As String 
Dim hwndForMyProg As Long
sWindowName = 'Безымянный - Блокнот' 'Вот сюда вводиш название окна
hwndForMyProg = FindWindow(vbNullString, sWindowName)
'hwndForMyProg - как ты понял hwnd твоего окна
Msgbox 'Дескриптор окна' & sWindowName & ' = ' & hwndForMyProg
0
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 12
17.08.2011, 16:56  [ТС]
это наверное не совсем то.... названия окна я не буду знать. наверно я не совсем точно прописала свой вопрос. поясню - мне надо послать своей форме (по таймеру)символ который находится в данный момент под курсором. ну например символ из текста какого-то текстовика(открытого), или например символ из названия папки на рабочем столе....
0
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 12
17.08.2011, 19:10  [ТС]
для своей формы ясно как -
Pos = SendMessage(RichTextBox1.hWnd, EM_CHARFROMPOS, 0&, varPoint)
B = Mid$(RichTextBox1.Text, Pos, 1),
а вот как аналогичное прописать для не своего окна, вот чем вопрос....
0
Messir
17.08.2011, 22:02
Насчет символа из названия папки - тут придется помучаться, не все здесь так просто...
А для текстового поля все просто:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Type POINT
 X As Long
 Y As Long
End Type
 
Function GetChar() As String
 Dim pt as POINT, hWin as Long, ppt As Long, pos As Long
 GetCursorPos(pt)
 hWin = WindowFromPoint(pt)
 ScreenToClient(hWin, pt)
 ' For standatd edit control
 ppt = (pt.X And &HFFFF) Or (pt.Y And &HFFFF) * &H10000
 pos = (SendMessage(hWin, EM_CHARFROMPOS, 0&, ByVal ppt) And &HFFFF)
 ' For rich edit control:
 ' pos = SendMessage(hWin, EM_CHARFROMPOS, 0&, pt)
 SendMessage(hWin, WM_GETTEXT, pos + 1, buff)
 GetChar = Mid(buff, pos + 1, 1)
End Function
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 12
17.08.2011, 22:22  [ТС]
спасибо огромное. буду копать дальше. буду рада продолжению темы....
0
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 12
17.08.2011, 23:19  [ТС]
2 Messir
я уже надоела. но у меня ругается на GetChar. и не помогает - Public Shared Function GetChar(ByVal Str As String, ByVal Index As Integer) As Char. что за трабла... я ж в VB только пару месяцев сижу.
0
Messir
18.08.2011, 20:14
Ух, чую - назревает серьезная тема...
С какой целью вообще нужно получать символ под курсором? А то какой-то это ненадежный подход...
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 12
19.08.2011, 01:32  [ТС]
2 Messir
да ничего серьёзного. просто мне надо аналогичный результат, как у одного переводчика (Babylon), кто знаком с ним тот - поймёт принцип действия проги. ну да ладно, вероятно проблема не решаема с наскока. ...
0
Comanche
19.08.2011, 19:16
Тогда уж так:
1. Если под курсором окно класса 'Edit', или 'ThunderTextBox', или ... - то один способ.
2. Если под курсором окно класса 'SysListView32' или 'ListView20WndClass', или ... - то другой способ.
3. Если ... , то ...
и так далее.

Ужас, короче! С другой стороны - не юзать же EM_CHARFROMPOS для листвью, WM_GETTEXT - для иконки десктопа, и т.д.; для каждого класса окна должен быть свой способ определения 'символа под курсором'. И наверняка в серьёзных софтинах постарались сделать поддержку как можно большему числу классов и 'контролов'.

Хотя это просто догадки...
Messir
21.08.2011, 03:12
вижу два способа решения проблемы:
1) не париться с окнами, просто копировать область экрана в районе курсора, а потом распознавать символ... Геморрой с распознаванием образов обеспечен, зато никаких проблем с источником символов.
2) никакой математики + зверское копание в чужих процессах, игры с чужой памятью, манипуляции с окнами и строками...
Comanche
21.08.2011, 13:48
Вряд ли первый вариант реализуем своими силами (без покупки чужих технологий)... по крайней мере - в обозримые сроки...
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 12
21.08.2011, 15:52  [ТС]
2 Messir

'1) не париться с окнами, просто копировать область экрана в районе курсора, а потом распознавать символ... Геморрой с распознаванием образов обеспечен, зато никаких проблем с источником символов.'

вероятно, это действительно самый приемлеммый способ. но вот как справиться с тем самым геморроем.... но всё равно - спасибо.
0
Messir
22.08.2011, 15:52
ну, с некоторой вероятностью это путем xor-а с маской символов из каких-нибудь популярных шрифтов выясняется
А по-хорошему тут уже на нейронные сети переходить впору...
0 / 0 / 0
Регистрация: 17.08.2011
Сообщений: 12
22.08.2011, 17:40  [ТС]
2 Messir
нет уж, это для меня СЛИШКОМ. спасибо
0
Comanche
01.09.2011, 00:18
Хе... нашёл тут один топик:
http://www.relib.com/forums/topic.asp?id=822427
Обратите внимание на терминологию и на названия рекомендованных книг. Ужас! И это наверняка лишь крайне малая доля мат. аппарата 'по теме'...
Zalex
29.05.2012, 16:36
Извеняюсь, что поднимаю старый топик, но тема у меня таже:
Как получить текст из окна под мышкой класса "Internet Explorer_Server" ( не HTML - код) .
ну и желательно ещё и позицию символа под курсором. С окнами "Edit" и с некоторыми другими разобрался, а вот с "Internet Explorer_Server" никак не получается...
Zalex
03.06.2012, 16:49
Спасибо всем, за многочисленные ответы на мой ламерский вопрос!...
И всё-таки у кого-то будут мысли по вопросу или мой вопрос на столько сложен для спецов.
Ну на всякий случай напишу, что у меня есть : опеределяется нендл-окна под курсором, название окна, класс окна под курсором, и даже HTML-код страницы выдирается (ну вот последнее не совсем то, что мне нужно - нужно получить слово под курсором мышки, ну или просто отдельный символ). если будут какие мысли, кинте хоть линк или хоть от чего начинать рыть сеть.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.06.2012, 16:49
Помогаю со студенческими работами здесь

Рисование в чужом окне
Дано окно чужой программы. Требуется что-то на нем нарисовать. Скажем, дырку в том месте, куда мышкой кликнули. Гуглил на эту тему,...

Клик в чужом окне
Как можно реализовать множественный клик правой кнопкой мыши в чужом окне?

Рисование в чужом окне
всем привет как рисовать текст в чужом окне не используя своего окна и не имея его

Движение курсора в чужом окне
Доброго времени, подскажите, вот есть хендл окна, как организовать перемещение курсора в координатах этого окна?

Нарисовать линию в чужом окне
Добрый день! С помощью WinAPI я нахожу id сторонней формы и дальше мне нужно нарисовать на ней линию...возможно ли это сделать?


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru