高分征求鼠标控制程序

Raser 2004-06-23 08:21:47
本来应该不难实现,但在下很久没玩VB了,请各位大虾帮忙做一个吧。要求如下:

当按下ctrl键时自动获取当前鼠标坐标位置pointX,pointY并把鼠标定位到新的位置X0,Y0。即使程序处于后台,也可以响应Ctrl事件。

如果源码文件,请发邮件到ser@mota.cn。或者把主程序帖上来也成。先谢谢了。
...全文
141 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
pigpag 2004-06-26
  • 打赏
  • 举报
回复
//我不知道可不可以把单独一个Ctrl键定义成全局热键

用GetAsyncKeyState+Timer扫描
dongge2000 2004-06-26
  • 打赏
  • 举报
回复
TO:pigpag(噼里啪啦 - 阿弥陀佛,祝福各位同仁高考成绩美丽)
大概是这样的
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Function XX(DG)
XX = (GetAsyncKeyState(DG) < 0)
End Function

Private Sub Timer2_Timer()
If XX(vbKeyEscape) Then
'End******
End If
If XX(vbKeyTab) Then
'*******
End If
End Sub
dongge2000 2004-06-26
  • 打赏
  • 举报
回复
.Form1
Private Sub Form_Load()
Dim ret As Long
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc)

idHotKey = 1
Modifiers = MOD_CONTROL
uVirtKey = 0&
ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim ret As Long
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
Call UnregisterHotKey(Me.hwnd, uVirtKey)
End Sub
dongge2000 2004-06-26
  • 打赏
  • 举报
回复
.Moudle
Option Explicit

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long

Public Const WM_HOTKEY = &H312
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4
Public Const GWL_WNDPROC = (-4)
Public Const BM_CLICK = &HF5
Public preWinProc As Long
Public Modifiers As Long, uVirtKey As Long, idHotKey As Long

Private Type taLong
ll As Long
End Type

Private Type t2Int
lWord As Integer
hWord As Integer
End Type
Public iii As Long
Public hWndlong As Long
Public Function Wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_HOTKEY Then
If wParam = idHotKey Then
Dim lp As taLong, i2 As t2Int
lp.ll = lParam
LSet i2 = lp
If (i2.lWord = Modifiers) And i2.hWord = uVirtKey Then
'*你想做的事
End If
End If
End If
Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)

End Function
ssihc 2004-06-26
  • 打赏
  • 举报
回复
你要给我加分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ssihc 2004-06-26
  • 打赏
  • 举报
回复
兄弟,,,你想做什么?????做小外挂啊!!!!
ssihc 2004-06-26
  • 打赏
  • 举报
回复
calss1:
Option Explicit
Public Type ProcData
AppHwnd As Long
title As String
Placement As String
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Type POINTAPI
X As Long
Y As Long
End Type
Public Const WM_GETTEXT = &HD
Public Const WM_GETTEXTLENGTH = &HE
Public Const WM_SETTEXT = &HC
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const GW_CHILD = 5
Public Const GW_HWNDNEXT = 2
Public Const GW_HWNDFIRST = 0
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Function GetForegroundWindow& Lib "user32" ()
Public Declare Function SetCursorPos& Lib "user32" (ByVal X As Long, ByVal Y As Long)
Public Declare Function GetCursorPos& Lib "user32" (lpPoint As POINTAPI)
Public 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)

form1:
Option Explicit
Dim i As Integer
Private Sub Command1_Click()
MsgBox "ddd"

End Sub

Private Sub Command2_Click()
Dim dl&
Dim NewPoint As POINTAPI
Dim myrect As RECT
Dim i As Integer
dl& = GetWindowRect(Command1.hwnd, myrect)
'dl& = GetCursorPos(OldPoint) '获取当前鼠标位置
NewPoint.X = myrect.Left + (myrect.Right - myrect.Left) \ 2
NewPoint.Y = myrect.Top + (myrect.Bottom - myrect.Top) \ 2
SetCursorPos NewPoint.X, NewPoint.Y
mouse_event MOUSEEVENTF_LEFTDOWN, NewPoint.X, NewPoint.Y, 0, 0
For i = 0 To 10 '延时
Sleep 20
DoEvents
Next
mouse_event MOUSEEVENTF_LEFTUP, NewPoint.X, NewPoint.Y, 0, 0
End Sub
Raser 2004-06-25
  • 打赏
  • 举报
回复
Ctrl+F12也成啊
gdami 2004-06-23
  • 打赏
  • 举报
回复
似乎单独一个不行吧.
用过的一些奇迹外挂都是ctrl+F12的.呵呵
BlueBeer 2004-06-23
  • 打赏
  • 举报
回复
控制鼠标位置倒不难,用两个API:GetCursorPos和SetCursorPos
关键是按你要求还需要定义全局热键,我不知道可不可以把单独一个Ctrl键定义成全局热键
gdami 2004-06-23
  • 打赏
  • 举报
回复
这个只能读自己程序上窗体的点啊.

估计他是要做个类似外挂的东东吧.
可能要用到消息函数.
gzhiceberg 2004-06-23
  • 打赏
  • 举报
回复
Dim blnControl As Boolean

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim lngCtrlDown&

lngCtrlDown = (Shift And vbCtrlMask) > 0
If lngCtrlDown Then
blnControl = True
End If
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
blnControl = False
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If blnControl Then
Label1.Caption = "X:" & X & " Y: " & Y
End If
End Sub
ryuginka 2004-06-23
  • 打赏
  • 举报
回复
up
Raser 2004-06-23
  • 打赏
  • 举报
回复
对了,还有一点要求,用VB6实现

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧