Изменение курсора мыши
Вот такой код:
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpMyFileName As String) As Long
Private Declare Function GetCursor Lib "user32" () As Long
Private Declare Function SetSystemCursor Lib "user32" (ByVal hcur As Long, ByVal id As Long) As Long
Private NewCur, OldCur As Long
Dim a
Private Sub Form_Load()
NewCur = LoadCursorFromFile("c:\banana.ani")
OldCur = GetCursor()
OldCur = CopyCursor(OldCur)
SetSystemCursor NewCur, 32512
a = GetCursor()
End Sub
Private Sub Form_Unload(Cancel As Integer)
If OldCur <> 0 Then SetSystemCursor OldCur, 32512
End Sub
Private Sub Timer1_Timer()
If GetCursor <> a Then MsgBox "Change"
End Sub
Может кто-то что подскажет? хотя бы куда копать...
Как изменить курсор
Для версии VB2010 у меня все работает, когда курсор над формой он становиться ani, за пределами формы system cursor
P.S если будут проблемы отпишитесь доведем до ума вместе
Public Class Form1
Private Declare Function CopyCursor Lib "user32" Alias "CopyIcon" (ByVal hcur As Integer) As Integer
Private Declare Function GetCursor Lib "user32" () As Integer
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Integer
Private Declare Function SetSystemCursor Lib "user32" (ByVal hcur As Integer, ByVal id As Integer) As Integer
Private Const OCR_NORMAL = 32512
Dim hCursor As Integer, hOldCursor As Integer
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
'движение мыши над Формой
If hCursor = 0 Then
Dim lRet As Integer
'укажите правильную директорию для курсора
hCursor = LoadCursorFromFile("C:\windows\cursors\hourglas.ani")
If hCursor Then
lRet = GetCursor()
hOldCursor = CopyCursor(lRet)
'Новый курсор
lRet = SetSystemCursor(hCursor, OCR_NORMAL)
End If
End If
End Sub
Private Sub Form1_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
'движение мыши за Формой
Dim lRet As Integer
If hCursor Then
'Востановить системный курсор
lRet = SetSystemCursor(hOldCursor, OCR_NORMAL)
End If
hCursor = 0
End Sub
Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
'при закрытии формы
Dim lRet As Integer
If hCursor Then
'Востановить системный курсор
lRet = SetSystemCursor(hOldCursor, OCR_NORMAL)
End If
hCursor = 0
End Sub
End Class
а вообще мне кажется что правильней будет отлавливать сообщение WM_SETCURSOR которое посылает винда активному окну...ну то есть поставить что-то типа хука, который бы ждал изменение курсора...единственное что по-моему в этом сообщении тока координаты передаются...а сам значок курсора я так и не допер где( уже неделю втыкаю в мсдн)
Это только для 6_ки
Поменяйте везде тип Integer на Long
Как ругается 6_ка , че ей не нравиться ?
Зашел на 6_ку ну не в обиду просто отстой , хотя 12 лет назад это был прорыв технологий
P.S Хотел написать код на 6_ке как открыл так и закрыл. Могу предложить код на 6_ке "ПрЮвет Мир" . Хотя VB2010 тоже не так гладко
Единственное , что 6_ке нормально шли API ФУНКЦИИ
[COLOR="Teal"]правильней будет отлавливать сообщение WM_SETCURSOR которое посылает винда[/COLOR]
Думаю ,что не Виндовоз должен думать, а сам объект(по принципу каждый за себя) так как у каждого объекта есть манипулятор
если тока скомпилить и запускать оттуда эту экзешку)
мне нужно не менять курсор, а отследить изменение системного курсора, причем когда форма свернута...вот если бы была такая функция типа GetSystemCursor, тада всё понятно бы было, а без неё мне на ум приходит тока отлавливать это сообщение...
я уже знаю как отловить нажатие левой или правой кнопки мыши, а вот изменение курсора пока не знаю(
в моем коде все что за пределами формы это системный курсор
А если добавить следующий код когда форма теряет фокус
Private Sub Form1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LostFocus
Me.Text = "LOstFocus"
End Sub
P.S
Visual Basic (Declaration)
Function GetSystemCursor (context As Control ) As Cursor
_*http://docs.yworks.com/yfilessilverlight/html/M_yWorks_Canvas_ICanvasCursor_GetSystemCursor.htm
мне вот как раз и нужно отследить изменение системного курсора, форму можно вообще скрыть и никому не показывать))