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

Получение Handle объектов под мышью

19.02.2015, 14:12. Показов 3887. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужно получать динамически хендл объектов под мышью как своих так и чужих. API функция WindowFromPoint не дает желаемого результата, вообще не реагирует на движения мыши над объектами, выдает хендл студии или рабочего стола если студию свернуть и все
VB.NET
1
2
Declare Function WindowFromPoint Lib "user32.dll" (ByVal xPoint As Int32, ByVal yPoint As Int32) As Int32
Label1.Text = WindowFromPoint(MousePosition.X, MousePosition.Y)
в VB6 все прекрасно работает

Visual Basic
1
Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Я как то неправильно объявляю функцию?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2015, 14:12
Ответы с готовыми решениями:

Получение Handle окна
Привет. Подскажите простую WinAPI функцию, с помощью которой я могу получить Handle окна. У меня есть только класс окна, в строковом...

Получение Handle окна
Привет. Подскажите простую WinAPI функцию, с помощью которой я могу получить Handle окна. У меня есть только класс окна, в строковом...

Получение Handle открытого окна
Открываю окно - и мне надо получить его Handle Делаю вот так var SEInfo: TShellExecuteInfo; h : THandle; pid : cardinal; ...

21
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
19.02.2015, 15:37
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Structure POINTAPI
    Public x As Int32
    Public y As Int32
End Structure
 
Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Integer, ByVal yPoint As Integer) As Integer
Declare Function GetCursorPos Lib "user32" (ByRef lpPoint As POINTAPI) As Integer
 
        ' получим текущую позицию курсора
        GetCursorPos(pt)
        ' дескриптор окна под курсором
        Dim iret As Integer = WindowFromPoint(pt.x, pt.y)
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 14
19.02.2015, 17:31  [ТС]
так тоже самое и получается, я не получаю хендл элементов управления проводя по ним мышью ( кнопки, текс боксы и т.д. ) да и GetCursorPos ни к чему, MousePosition прекрасно определяет глобальные координаты

Добавлено через 12 минут
возюкая мышью по окну я даже хендл своего окна получить не могу,
VB.NET
1
Me.Text = Me.Handle
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
19.02.2015, 18:02
Реквестирую исходный код в этот ITT-тред.
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 14
20.02.2015, 18:06  [ТС]
собственно разобрался.. функция WindowFromPoint работает некорректно только под OC Windows 8.1 как победить данный недуг? )
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 14
23.02.2015, 16:32  [ТС]
что никого не интересует что его программа не будет работать под виндой 8.1 ?
0
23.02.2015, 16:42

Не по теме:

NEO-55, меня например, не интересует, должно интересовать это только разработчика

0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 14
23.02.2015, 21:36  [ТС]
ну так я сюда и обратился за помощью, если вас это не интересует проходите мимо.. по теме: существует аналог функции WindowFromPoint?
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
24.02.2015, 06:12
Как именно не работает? Какое‐то утверждение из области «У меня компьютер не работает, придите и посмотрите!» Ну и что: пришли, посмотрели на компьютер и ушли. Просили же просто посмотреть.
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 14
24.02.2015, 10:24  [ТС]
если вас не затруднит, проверьте ваш код, который вы мне давали раннее, на ОС 8.1 .. как мог я уже обрисовал проблему постами выше, не снимать же видео ) находил подобные исходники в интернете, готовые exe .. винду переустановил - не работает.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
27.02.2015, 18:30
Цитата Сообщение от NEO-55 Посмотреть сообщение
функция WindowFromPoint работает некорректно только под OC Windows 8.1 как победить данный недуг?
Очень странно, учитывая что это часть WinAPI. Как вы определили, что она неверно работает? Дескриптор окна получили?
У меня Windows 7 и нет возможности это проверить.
Цитата Сообщение от NEO-55 Посмотреть сообщение
винду переустановил - не работает
Это излишнее, как и переустановливать студию, фреймворк и другое, инфа 100%. Проблема наверняка в вашем коде.
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 14
27.02.2015, 18:47  [ТС]
Так в том то и дело что кода и не было, экспериментировал с одной только функцией. Частично разобрался с проблемой, изменив в настройках проект под 32 битную систему, и все заработало. Но тем не мение интересно почему функция не работает под 64 бита ( не работает это – отображает хендл как будто активного окна, никак не реагируя на передвижения мыши над объектами, окнами и т.д.)
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
27.02.2015, 19:02
Потому что для 64‐битной системы нужно объявлять типы аргументов для функции, данных PointApi и возвращаемых значений с учётом 64‐битности.
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 14
27.02.2015, 19:09  [ТС]
Цитата Сообщение от Замабувараев Посмотреть сообщение
Потому что для 64‐битной системы нужно объявлять типы аргументов для функции, данных PointApi и возвращаемых значений с учётом 64‐битности.
а можно пример пожалуйста, не силен в программировании
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
27.02.2015, 19:14
Цитата Сообщение от NEO-55 Посмотреть сообщение
почему функция не работает под 64 бит
Такая особенность присуща не только данной функции, всегда уточняйте размер элементов структуре при работой с WinAPI.
WindowFromPoint doesn't work correctly on 64bit .NET Framework
Попробуйте использовать 64-битную переменную под дескриптор окна
VB.NET
1
Dim lhWnd As Int64 = WindowFromPoint(pt.x, pt.y)
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
27.02.2015, 19:25
Тогда и
VB.NET
1
2
3
4
5
Declare Function WindowFromPoint Lib "user32" (ByVal pPoint As POINTAPI) As Integer
Structure POINTAPI
    Public x As Int64
    Public y As Int64
End Structure
Потому что WindowFromPoint принимает один аргумент — структуру POINTAPI.
1
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 14
27.02.2015, 19:55  [ТС]
tezaurismosis, Замабувараев, Спасибо! Работает!
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
27.02.2015, 20:07
NEO-55, скажите точнее, какой из способов работает, "длинный" POINTAPI или длинный Handle?
Я заметил ещё одну вещь - просто использовать Int64 недостаточно, нужно ещё и возвращать его из метода
VB.NET
1
2
3
Declare Function WindowFromPoint Lib "user32" (ByVal pPoint As POINTAPI) As Int64
' ...
Dim lhWnd As Int64 = WindowFromPoint(pt)
или достаточно использовать длинный POINTAPI, т.е. поменять
VB.NET
1
2
3
4
Structure POINTAPI
    Public x As Int64
    Public y As Int64
End Structure
и только? Хотелось бы уяснить для себя.
0
0 / 0 / 0
Регистрация: 19.02.2015
Сообщений: 14
27.02.2015, 21:15  [ТС]
Похоже я вас ввел в заблуждение, на радостях поспешил, под 64 декларировал неправильно

Работает под x86 не работает под x64

VB.NET
1
2
3
4
5
6
7
8
Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Int32, ByVal yPoint As Int32) As Int32
Structure POINTAPI
        Public X As Int32
        Public Y As Int32
    End Structure
Dim Mouse As POINTAPI 
Dim H As Int32 
H = WindowFromPoint(Mouse.X, Mouse.Y)
Работает как на x86 так и на x64

VB.NET
1
2
3
4
5
6
7
8
Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As POINTAPI) As Int32
Structure POINTAPI
        Public X As Int32
        Public Y As Int32
    End Structure
Dim Mouse As POINTAPI 
Dim H As Int32 
H = WindowFromPoint(Mouse)
правда под x64 выдает два предупреждения но работает

Предупреждение 1 При сборке модуля "Client", возможно, обнаружена ошибка: Сборка "mscorlib.dll", на которую дается ссылка, предназначена для другого процессора Client
Предупреждение 2 При сборке модуля "Client", возможно, обнаружена ошибка: Сборка "System.Data.dll", на которую дается ссылка, предназначена для другого процессора Client
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
27.02.2015, 21:20
tezaurismosis, если используется 64‐битная ШINDOWS, то все данные нужно делать 64‐битными. Потому что 64‐битная не возвращает и не принимает 32‐битных значений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.02.2015, 21:20
Помогаю со студенческими работами здесь

Получение Handle запущенного процесса
Доброго всем дня. Уважаемые, подскажите пожалуйста, что я не так делаю, мне нужно получить хендл запущенного процесса, и... я его получаю,...

Перемещение объектов мышью
Добрый вечер, прошу помощи. У меня есть кнопка "button1", как сделать так, чтобы при зажатии этой кнопки вся форма перемещалась за...

Выделение нескольких объектов мышью
Всем здрасьте! Как вы знаете, в Windows 8 выделение нескольких объектов мышью (замижаем ЛКМ) сопровождается синим контуром. Не знаю, что...

Перемещение объектов по форме мышью
Как можно сделать перемещение объектов на различные места на форме? Т.е, зажимаешь лкм на кнопку и перетаскиваешь ее на нужное место

Перетаскивание объектов на форме мышью
Нужно сделать такое же, только в VB 6: Option Explicit Const SNAP! = 5 Dim Xdown!, Ydown! Private Sub...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru