Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual Basic .NET

Войти
Регистрация
Восстановить пароль
 
 
Edgar4
4 / 4 / 8
Регистрация: 11.11.2014
Сообщений: 214
#1

Как по дескриптору определить изменение курсора в чужих окнах? - Visual Basic .NET

14.11.2014, 13:16. Просмотров 1137. Ответов 23
Метки нет (Все метки)

Написал код перехвата вида курсора по дескриптору в локальном окне формы.
Как сделать тоже самое но за пределами окна (на чужих приложениях)?

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Class Form1
    Private Declare Function GetCursor Lib "user32" () As Long
 
    Private Curs As Long
 
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Application.DoEvents()
        Curs = GetCursor()
        Label1.Text = Curs
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub
End Class
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2014, 13:16
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как по дескриптору определить изменение курсора в чужих окнах? (Visual Basic .NET):

Как по дескриптору определить размер окна в чужом приложении? - Visual Basic .NET
Здравствуйте! Друзья подскажите, как по дескриптору чужого окна можно определить его размеры? Дескриптор родительского и дочернего...

Как отловить событие изменение вида курсора? - Visual Basic .NET
Здравствуйте друзья! Я новичок в VB.net. Подскажите, пожалуйста, как узнать изменился ли курсор мыши со стрелки на руку с...

Как по дескриптору окна определить где на диске находится прога? - Delphi WinAPI
У меня такой вопрос. Как мне по хендлу(дескриптору) окна определить где на диске находится прога! Например: я запустил DOC файл, и найдя...

Нужно определить границы внутренней области окна по дескриптору - C#
Нужно определить координаты внутренней облости окна относительно всего экрана (окно виртуальной машины orcle) по дискриптору. чтото...

Как сделать в Bash рандомное изменение координат курсора на экране каждые 5 минут? - Bash
Кто может набросать скриптик вот такой в баше? Добавлено через 6 минут Я понимаю что для этого наверное надо считывать какое...

Как отключить изменение цвета рамки TextBox при наведении курсора/выделение его - C# WPF
При использовании *TextBoxName*.BorderBrush рамка окрашивается, но если навести на TextBox курсор или перевести фокус, то цвет меняется....

23
Edgar4
4 / 4 / 8
Регистрация: 11.11.2014
Сообщений: 214
16.11.2014, 10:36  [ТС] #2
Неужели ни кто не знает где в коде ошибка?
Почему за пределами формы не отлавливается дескрипт изменения курсора?
Вроде бы ATI функция "GetCursor()" написана правильно!
Помогите! Горю!
0
Yury Komar
Модератор
2350 / 2155 / 339
Регистрация: 27.01.2014
Сообщений: 3,835
Завершенные тесты: 1
16.11.2014, 13:35 #3
Так а форма может быть твоя стоит OnTop поэтому и не ловит? А когда переходит в фон, то ловит. Незнаю. Надо испробоватт. Пока не у компа

Добавлено через 12 минут
А вообще чтото мне кажется что ты функцию Апишную под NET не подолгнал.
попробуй заменить свои "As Long" на "As Integer",
Мне кажется здесь проблема....
В VB.NET помоему уже нет APIшек с типом LONG...
Почитай про это...
а вообще, недавно пост один скинул сюда, глянь...
0
Edgar4
4 / 4 / 8
Регистрация: 11.11.2014
Сообщений: 214
16.11.2014, 15:12  [ТС] #4
Yury Komar, спасибо за программу. Надеюсь она многим здорово поможет!
Измени код. Даже добавил стандартную функцию мыши за формой для определения дескрипта курсора при ее движении.
Все равно полный ноль! Как определялось внутри формы, так и определяется!
А надо за формой, в любом приложении.

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Public Class Form1
 
    Private Declare Function GetCursor Lib "user32.DLL" Alias "GetCursor" () As Integer
 
    Private Curs As Integer
    Dim Curs1 As Integer
 
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Application.DoEvents()
        Curs = GetCursor()
        Label1.Text = Curs
 
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub
    Private Sub Form2_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
 
        'движение мыши за Формой
 
        Curs1 = GetCursor()
        Label2.Text = Curs1
 
    End Sub
End Class
0
SoftIce
comment ca va
10401 / 3900 / 997
Регистрация: 27.07.2011
Сообщений: 9,443
Завершенные тесты: 1
16.11.2014, 18:40 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Да, действительно, в интернете я тоже не нашел никакой информации об отслеживании вида курсора за пределами своей формы. Только вопросы без ответов. В msdn функция GetCursorInfo описана для C++.
Вот рабочий код для VB.net.
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Imports System.Runtime.InteropServices
Public Class Form1
 
    Private Declare Sub GetCursorInfo Lib "user32" (ByRef CurInfo As CURSORINFO)
 
    Private Structure CURSORINFO
        Dim cbSize As Int32
        Dim flags As Boolean
        Dim hCursor As IntPtr
        Dim ptScreenPos As Point
    End Structure
 
    Dim Cur As New CURSORINFO
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Cur.cbSize = Marshal.SizeOf(Cur)
        GetCursorInfo(Cur)
        Label1.Text = Cur.hCursor.ToString
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = True
    End Sub
End Class
3
Миниатюры
Как по дескриптору определить изменение курсора в чужих окнах?  
Yury Komar
Модератор
2350 / 2155 / 339
Регистрация: 27.01.2014
Сообщений: 3,835
Завершенные тесты: 1
16.11.2014, 19:24 #6
SoftIce, работает...
оказывается не ту функцию пользовали ))))

А в чем же различия... зачем тогда GetCursor нужна
0
SoftIce
comment ca va
10401 / 3900 / 997
Регистрация: 27.07.2011
Сообщений: 9,443
Завершенные тесты: 1
16.11.2014, 20:05 #7
Цитата Сообщение от Yury Komar Посмотреть сообщение
А в чем же различия... зачем тогда GetCursor нужна
МСДН как бы намекает
Цитата Сообщение от msdn
GetCursor function

Retrieves a handle to the current cursor.

To get information on the global cursor, even if it is not owned by the current thread, use GetCursorInfo.
0
Yury Komar
Модератор
2350 / 2155 / 339
Регистрация: 27.01.2014
Сообщений: 3,835
Завершенные тесты: 1
16.11.2014, 20:36 #8
Ааааа... ))))
0
Edgar4
4 / 4 / 8
Регистрация: 11.11.2014
Сообщений: 214
17.11.2014, 06:06  [ТС] #9
SoftIce, ну ни фига себе! Здорово!!!
Я пол недели вокруг GetCursorInfo ходил. Все не мог допереть как через нее можно определить дескриптор курсора.
Огромное спасибо!!!!!!!
Раз уж Вы на ты с API, то может подскажите как здесь выявить совпадение с дескриптором указывающим на курсор "hand"!
Смысл такой: Подвести курсор к ссылке и при условии появления "Руки с пальчиком" отражается окно с кратким описанием.
Вот это условие мне и надо отследить.
0
SoftIce
comment ca va
10401 / 3900 / 997
Регистрация: 27.07.2011
Сообщений: 9,443
Завершенные тесты: 1
17.11.2014, 09:20 #10
А так не работает?
vb.net
1
If Cur.hCursor = 65581 Then Label2.Text = "Pyka" Else Label2.Text = "He pyka"
0
Yury Komar
Модератор
2350 / 2155 / 339
Регистрация: 27.01.2014
Сообщений: 3,835
Завершенные тесты: 1
17.11.2014, 10:14 #11
SoftIce, помоему оно не может не работать )))
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
17.11.2014, 13:48 #12
Цитата Сообщение от Edgar4 Посмотреть сообщение
Вроде бы ATI функция "GetCursor()" написана правильно!
Вероятно, что As Long - неверно. Должно быть As IntPtr.
0
Edgar4
4 / 4 / 8
Регистрация: 11.11.2014
Сообщений: 214
17.11.2014, 13:52  [ТС] #13
SoftIce, Не работает!
У меня Cur.hCursor не 65581, а 65567.
Насколько я понимаю Cur.hCursor выдает дескриптор курсора, а он при перезапуску ОС постоянно новый.
Но вот, что странно!
Перезагрузил систему, Cur.hCursor остался тем же.
Это как понять?
0
SoftIce
comment ca va
10401 / 3900 / 997
Регистрация: 27.07.2011
Сообщений: 9,443
Завершенные тесты: 1
17.11.2014, 14:15 #14
Цитата Сообщение от Edgar4 Посмотреть сообщение
У меня Cur.hCursor не 65581, а 65567.
Ну так и ладно Значит у Вас не ХР, или курсор нестандартный.
Для ХР примерно такие цифры
'65581: 'Hand' cursor
'65555: I shape cursor
'65553: Arrow cursor
'65559: Cross cursor
'65557 Hourglass cursor

Можно еще попробовать определять вид курсора по дескриптору, типа так
vb.net
1
 Label2.Text = New Cursor(Cur.hCursor).ToString
Но этим способом распознаются не все курсоры, на непонятных выскакивает ошибка.
0
Edgar4
4 / 4 / 8
Регистрация: 11.11.2014
Сообщений: 214
17.11.2014, 14:44  [ТС] #15
SoftIce, совершенно верно!
У меня windows 7.
А что такое?

'65581: 'Hand' cursor
'65555: I shape cursor
'65553: Arrow cursor
'65559: Cross cursor
'65557 Hourglass cursor

Если можно, дайте ссылку где можно это посмотреть.
0
17.11.2014, 14:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2014, 14:44
Привет! Вот еще темы с ответами:

Изменение цвета Label при наведении на него курсора мыши. Как это сделать? - Lazarus
Изменение цвета Label при наведении на него курсора мыши. Как это сделать? Какое свойство надо поменять?

Как узнать ID процесса (PID) по дескриптору окна (Handle)? - C#
АП. Интересует как узнать PID по Handle.

Как определить координаты курсора - C# WPF
Как в WPF определять координаты мыши ? В Windows Forms делала так: private void Form_1_MouseMove(object sender, MouseEventArgs...

Как по дескриптору процесса получить hWnd порождённого этим процессом окна? - Visual Basic
Как по дескриптору процесса получить hWnd порождённого этим процессом окна? Цель: запустить приложение через Shell (или API...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru