找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 28156|回复: 14

【分享】马大哈系列功能模块----模拟按键(使用SendInput)(2011-07-16更新)

 火... [复制链接]

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-4-29 23:11:12 | 显示全部楼层 |阅读模式
以下代码保存为ModSSendKeys.bas:
  1. Option Explicit
  2. '*************************************************************************
  3. '**模 块 名:ModSSendKeys
  4. '**说    明:模拟按键(直接发按键消息到输入队列,多数情况下与直接按键盘效果相等)
  5. '**创 建 人:嗷嗷叫的老马
  6. '**日    期:2006年5月10日
  7. '**描    述:网上收集,更改了部分代码.
  8. '**备    注: 紫水晶工作室 版权所有
  9. '**          更多模块/类模块请访问我站: http://www.m5home.com
  10. '**版    本:V2.0
  11. '**日    期:2011年7月16日
  12. '**描    述:更新了ASCII到虚拟键码的转换.
  13. '*************************************************************************

  14. Private Const KEYEVENTF_KEYUP = &H2
  15. Private Const INPUT_MOUSE = 0
  16. Private Const INPUT_KEYBOARD = 1
  17. Private Const INPUT_HARDWARE = 2

  18. Private Type MOUSEINPUT
  19.     dx As Long
  20.     dy As Long
  21.     mouseData As Long
  22.     dwFlags As Long
  23.     time As Long
  24.     dwExtraInfo As Long
  25. End Type
  26. Private Type KEYBDINPUT
  27.     wVk As Integer
  28.     wScan As Integer
  29.     dwFlags As Long
  30.     time As Long
  31.     dwExtraInfo As Long
  32. End Type
  33. Private Type HARDWAREINPUT
  34.     uMsg As Long
  35.     wParamL As Integer
  36.     wParamH As Integer
  37. End Type
  38. Private Type GENERALINPUT
  39.     dwType As Long
  40.     xi(0 To 23) As Byte
  41. End Type
  42. Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
  43. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
  44. Private Declare Sub Sleep Lib "kernel32.dll" ( _
  45.         ByVal dwMilliseconds As Long)
  46. Private Declare Function VkKeyScan Lib "user32.dll" Alias "VkKeyScanA" ( _
  47.         ByVal cChar As Byte) As Integer

  48. Public Sub SendKey(ByVal bKey As KeyCodeConstants, ByVal PressORRelease As Long)
  49.     Dim GInput(0 To 1) As GENERALINPUT
  50.     Dim KInput As KEYBDINPUT
  51.     Dim I As Long, iH As Integer, iL As Integer
  52.    
  53.     I = VkKeyScan(bKey)
  54.     Call CopyMemory(iL, I, 2)
  55.     Call CopyMemory(iH, I + 2, 2)
  56.    
  57.     Debug.Print Hex(iL), Hex(iH)
  58.    
  59.     If PressORRelease = 0 Then
  60.         I = 0
  61.     Else
  62.         I = 1
  63.     End If
  64.    
  65.     KInput.wVk = iL 'the key we're going to press
  66.     KInput.dwFlags = 0 'press the key
  67.     'copy the structure into the input array's buffer.
  68.     GInput(0).dwType = INPUT_KEYBOARD ' keyboard input
  69.     CopyMemory GInput(0).xi(0), KInput, Len(KInput)
  70.     'do the same as above, but for releasing the key
  71.     KInput.wVk = bKey ' the key we're going to realease
  72.     KInput.dwFlags = KEYEVENTF_KEYUP ' release the key
  73.     GInput(1).dwType = INPUT_KEYBOARD ' keyboard input
  74.     CopyMemory GInput(1).xi(0), KInput, Len(KInput)
  75.     'send the input now
  76.     Call SendInput(1, GInput(I), Len(GInput(I)))
  77.     DoEvents
  78. End Sub

  79. Public Sub SendStr(ByVal theStr As String)
  80.     '发送字符串
  81.     Dim I As Long
  82.    
  83.     For I = 1 To Len(theStr)
  84.         Call SendKey(Asc(Mid(theStr, I, 1)), 0)
  85.         Sleep 100
  86.         Call SendKey(Asc(Mid(theStr, I, 1)), 1)
  87.     Next
  88. End Sub
复制代码
使用:

  1. Call SendStr("www.m5hoome.com")
复制代码
已更新...
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2010-4-29 23:11:54 | 显示全部楼层
我晕,缩进全都没了.

有待改进.
我就是嗷嗷叫的老马了......

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-5-1 15:06:42 | 显示全部楼层
这个要支持一下!

1

主题

14

回帖

0

精华

初来乍到

积分
25
发表于 2010-5-20 18:12:26 | 显示全部楼层
不会用啊,能提示下怎么用吗

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2010-5-21 11:03:36 | 显示全部楼层
回复 4# sgp_003


    注意看完整个帖子

280

主题

203

回帖

0

精华

版主

积分
1808
发表于 2010-7-4 17:42:36 | 显示全部楼层
回复 5# 马大哈


    测试失败啊!

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2010-7-6 02:58:25 | 显示全部楼层
回复 6# 乔丹二世


    如果失败,则有可能是目标进程或安全软件防止了的.

你先在记事本中测试吧,我现在打星际时都用这个输入作弊码呢.....show me the money x 10....

0

主题

36

回帖

0

精华

铜牌会员

积分
50
QQ
发表于 2010-10-18 03:21:25 | 显示全部楼层
不知道文字发到哪里.rar (2.81 KB, 下载次数: 8238)

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2010-10-18 10:01:08 | 显示全部楼层
回复 8# zmh886
  1. Private Sub Form_Load()
  2.     '完全不知道要发到哪里去。
  3.     Call SendStr("www.m5hoome.com")
  4. End Sub
复制代码
你写在这里。。。。。窗体启动时有可以输入的地方么。。。。

用个定时器吧,然后切换焦点到一个可以输入的地方,比如记事本。。。。。

这个函数与SendKeys是一样的使用条件,汗,你还是看看SendKeys的说明吧。

0

主题

36

回帖

0

精华

铜牌会员

积分
50
QQ
发表于 2010-10-19 11:39:03 | 显示全部楼层
哦 知道了 不是后台的啊。 用惯别人的DZ用你这个真不习惯 什么都是在一个窗口打开

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2010-10-19 18:34:34 | 显示全部楼层
别人的DZ是啥样的.

我现在也很不习惯这个.....
我就是嗷嗷叫的老马了......

0

主题

36

回帖

0

精华

铜牌会员

积分
50
QQ
发表于 2010-11-24 21:03:40 | 显示全部楼层
回复 马大哈 的帖子

现在和别人的一样了

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
 楼主| 发表于 2010-11-25 10:26:29 | 显示全部楼层
我就是嗷嗷叫的老马了......

1

主题

5

回帖

0

精华

初来乍到

积分
9
发表于 2011-11-3 13:58:27 | 显示全部楼层
本帖最后由 falcon4585 于 2011-11-3 19:06 编辑

只能发送字符,都说sendinput能发送中文,可我没弄出来。

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-5-22 11:59:40 | 显示全部楼层
马老的代码值得期待
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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