Hallo
Da es scheinbar keine einfache Lösung für mein Prop. gibt versuchte ich es anders zu lösen.
Gedacht habe ich mir:
Wenn ich auf der Mausposition ein Picture erstelle, müsste ich anschließend erkennen ob der Cursor sich verändert hat.
Denkste… der Picture zeigt mir alles, nur nicht den System - Cursor.
Ein grafischer Cursor wird aber gezeigt.
Frage:
Ist es möglich den System –Cursor welcher auch immer, in einer Picturebox dar zu stellen?
'Form1 1x Picture. 1 x Comand1
Private Sub Command1_Click()
Dim temp
Mausklick 0, 41, 12 ' Maus nur auf Position ohne Klick
temp = Pic_position_einlesen(41, 12)
Pic1.Refresh
End Sub
Private Sub Form_Load()
Set Pic1 = Form1.Picture1
End Sub
'..........Form1 ende......................
'MODUL1
'--------------------------Picture lesen Anfang-----
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc _
As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As _
Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal _
hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As _
Long
'--------------------------Picture lesen Ende-----
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, _
ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINTAPI) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) _
As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, _
ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo _
As Long)
Private Const MOUSEEVENTF_ABSOLUTE = &H8000
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20
Private Const MOUSEEVENTF_MIDDLEUP = &H40
Private Const MOUSEEVENTF_MOVE = &H1
Private Const MOUSEEVENTF_RIGHTDOWN = &H8
Private Const MOUSEEVENTF_RIGHTUP = &H10
Private Type POINTAPI
x As Long
y As Long
End Type
Public Pic1 As Object
'------------------------------------
' Mausklick simulieren mit optionaler Angabe der
' Koordinaten, an welche der Mauszeiger autom.
' positioniert werden soll
Public Sub Mausklick(Optional button As MouseButtonConstants = vbLeftButton, _
Optional XPos As Long = -1, Optional YPos As Long = -1)
XPos = XPos * 15.01: YPos = YPos * 15 ' meine koordinaten umrechnen
' Mauszeiger positionieren
If XPos <> -1 Or YPos <> -1 Then
mouse_event MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE, _
XPos / Screen.Width * 65535, _
YPos / Screen.Height * 65535, 0, 0
End If
' Mausklick simulieren
Select Case button
' linke Maustaste
Case vbLeftButton
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
' mittlere Maustaste
Case vbMiddleButton
mouse_event MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0
' rechte Maustaste
Case vbRightButton
mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
End Select
End Sub
Function Pic_position_einlesen(a1 As Integer, b1 As Integer) ' einlesen vom
' Schirm
Dim hWndScreen As Long
Dim hDCScreen As Long
Pic1.Picture = Nothing
Pic1.AutoRedraw = True
Pic1.AutoSize = True
Pic1.ScaleMode = 3
hWndScreen = GetDesktopWindow
hDCScreen = GetDC(hWndScreen)
BitBlt Pic1.hdc, 0, 0, Pic1.Width, Pic1.Height, hDCScreen, a1, b1, vbSrcCopy
ReleaseDC hWndScreen, hDCScreen
End Function |