找回密码  加入

AUTOIT CN

搜索
查看: 453|回复: 3

[系统综合] PostMessage后台 鼠标点击 不管用

[复制链接]
发表于 2018-8-24 18:32:12 | 显示全部楼层 |阅读模式

WIN7系统 用PostMessage后台点击鼠标,不管用,求大神指点

  1. #RequireAdmin
  2. Dim $GUIHANDLE
  3. $GUIHANDLE = WinGetHandle("扫雷")
  4. _MouseClick($GUIHANDLE, 100, 100);鼠标单击发送按钮

  5. ;以下是借鉴论坛一个大哥的。

  6. Func _MouseClick($hWnd, $x, $y, $button = 'left', $times = 1, $delay = 250)
  7.         Local $ix
  8.         Local $lParam = BitOR(BitAND($x, 0xFFFF), $y * 0x10000)
  9.         $button = StringLower($button)
  10.         If $button = "left" Then
  11.                 For $ix = 1 To $times
  12.                         _PostMessage($hWnd, 0x200, 0, $lParam);WM_MOUSEMOVE
  13.                         _PostMessage($hWnd, 0x201, 1, $lParam);WM_LBUTTONDOWN
  14.                         _PostMessage($hWnd, 0x202, 0, $lParam);WM_LBUTTONUP
  15.                         If $ix < $times Then Sleep($delay)
  16.                 Next
  17.         ElseIf $button = "right" Then
  18.                 For $ix = 1 To $times
  19.                         _PostMessage($hWnd, 0x200, 0, $lParam);WM_MOUSEMOVE
  20.                         _PostMessage($hWnd, 0x204, 2, $lParam);WM_RBUTTONDOWN
  21.                         _PostMessage($hWnd, 0x205, 0, $lParam);WM_RBUTTONUP
  22.                         If $ix < $times Then Sleep($delay)
  23.                 Next
  24.         EndIf
  25. EndFunc   ;==>_MouseClick
  26.        
  27.        
  28. Func _PostMessage($hWnd, $iMsg, $iwParam, $ilParam)
  29.         DllCall("user32.dll", "bool", "PostMessage", "hwnd", $hWnd, "uint", $iMsg, "wparam", $iwParam, "lparam", $ilParam)
  30. EndFunc   ;==>_WinAPI_PostMessage
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
发表于 2018-8-26 13:19:54 | 显示全部楼层
  1. Opt("MouseClickDelay", 0);设置鼠标移动及点击延时为0
  2. Opt("MouseClickDownDelay", 0)
  3. Opt('MouseCoordMode', 0);设置用于鼠标函数的坐标参照

  4. $i_pid = ProcessExists("winmine.exe")
  5. If $i_pid Then
  6.         WinActivate("扫雷")
  7. Else
  8.         $Ms = MsgBox(32 + 1, "提示", "你要打开扫雷吗?")
  9.         If $Ms <> 1 Then Exit
  10.         $i_pid = Run("winmine.exe")
  11.         WinWaitActive("扫雷")
  12. EndIf

  13. $v_Open = _MemOpen($i_pid)

  14. $i_Width = _MemRead($v_Open, 0x1005334, "Byte") ;列数

  15. $i_Height = _MemRead($v_Open, 0x1005338, "Byte") ;行数

  16. $i_NonMines = _MemRead($v_Open, 0x1005330, "Short") ;雷数
  17. $i_NonMines = $i_Width * $i_Height - $i_NonMines

  18. Dim $i_Array = 0;非雷数
  19. Dim $ai_Loc[$i_NonMines][2];用于存放非雷的坐标
  20. For $y = 0 To $i_Height - 1
  21.         For $x = 0 To $i_Width - 1
  22.                 $Mine = _MemRead($v_Open, 0x1005340 + 32 * ($y + 1) + ($x + 1), "Byte") ;读取每个区域的内存值,从左到右,从上到下
  23.                 If $Mine = 15 Then ;非雷区域的值
  24.                         $ai_Loc[$i_Array][0] = 23 + $x * 16
  25.                         $ai_Loc[$i_Array][1] = 112 + $y * 16
  26.                         $i_Array += 1
  27.                 EndIf
  28.         Next;~
  29. Next ;获取非雷的坐标完毕

  30. _MemClose($v_Open)

  31. For $i = 0 To UBound($ai_Loc) - 1
  32.         MouseClick('left', $ai_Loc[$i][0], $ai_Loc[$i][1], 1, 0)
  33. Next;扫雷主程序结束

  34. Func _MemOpen($i_pid, $i_Access = 0x1F0FFF, $i_Inherit = 0)
  35.         Local $av_Return[2] = [DllOpen('kernel32.dll')]
  36.         Local $ai_Handle = DllCall($av_Return[0], 'int', 'OpenProcess', 'int', $i_Access, 'int', $i_Inherit, 'int', $i_pid)
  37.         If @error Then
  38.                 DllClose($av_Return[0])
  39.                 SetError(1)
  40.                 Return 0
  41.         EndIf
  42.         $av_Return[1] = $ai_Handle[0]
  43.         Return $av_Return
  44. EndFunc   ;==>_MemOpen

  45. Func _MemClose($ah_Mem)
  46.         Local $av_Ret = DllCall($ah_Mem[0], 'int', 'CloseHandle', 'int', $ah_Mem[1])
  47.         DllClose($ah_Mem[0])
  48.         Return $av_Ret[0]
  49. EndFunc   ;==>_MemClose

  50. Func _MemRead($ah_Mem, $i_Address, $s_Type = '')
  51.         If $s_Type = '' Then
  52.                 Local $v_Return = ''
  53.                 Local $v_Struct = DllStructCreate('byte[1]')
  54.                 Local $v_Ret
  55.                 While 1
  56.                         DllCall($ah_Mem[0], 'int', 'ReadProcessMemory', 'int', $ah_Mem[1], 'int', $i_Address, 'ptr', DllStructGetPtr($v_Struct), 'int', 1, 'int', '')
  57.                         $v_Ret = DllStructGetData($v_Struct, 1)
  58.                         If $v_Ret = 0 Then ExitLoop
  59.                         $v_Return &= Chr($v_Ret)
  60.                         $i_Address += 1
  61.                 WEnd
  62.         Else
  63.                 Local $v_Struct = DllStructCreate($s_Type)
  64.                 DllCall($ah_Mem[0], 'int', 'ReadProcessMemory', 'int', $ah_Mem[1], 'int', $i_Address, 'ptr', DllStructGetPtr($v_Struct), 'int', _SizeOf($s_Type), 'int', '')
  65.                 Local $v_Return = DllStructGetData($v_Struct, 1, 1)
  66.         EndIf
  67.         Return $v_Return
  68. EndFunc   ;==>_MemRead

  69. Func _SizeOf($s_Type)
  70.         Local $v_Struct = DllStructCreate($s_Type), $i_Size = DllStructGetSize($v_Struct)
  71.         If @error Then
  72.                 SetError(1)
  73.                 Return 0
  74.         EndIf
  75.         $v_Struct = 0
  76.         Return $i_Size
  77. EndFunc   ;==>_SizeOf
复制代码
 楼主| 发表于 2018-9-8 18:58:38 | 显示全部楼层

谢谢 老大,不过我主要是测试后台点击
发表于 2018-9-16 10:19:32 | 显示全部楼层
扫雷,XP时代经常玩的游戏
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备15028933号-3 )谷歌 百度

GMT+8, 2018-12-17 02:40 , Processed in 0.080517 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表