首页
社区
课程
招聘
用WINIO在VB下模拟鼠标左键点击有问题
发表于: 2006-9-21 20:02 9078

用WINIO在VB下模拟鼠标左键点击有问题

2006-9-21 20:02
9078
我用WINIO在VB下模拟鼠标左键点击,具体代码如下:
Private Sub XR()
  Dim Result As Boolean
  
  Result = SetPortVal(Val("&H64"), Val("&HD3"), 1)
  
  If (Result = False) Then
    MsgBox "Whoops ! There is a problem with SetPortByte.", vbOKOnly + vbCritical, "VBDumpPort32"
    Unload FrmVBDumpPort32
  End If
    Sleep 100
  Result = SetPortVal(Val("&H64"), Val("&Hf4"), 1)
  
  If (Result = False) Then
    MsgBox "Whoops ! There is a problem with SetPortByte.", vbOKOnly + vbCritical, "VBDumpPort32"
    Unload FrmVBDumpPort32
  End If
  
  Result = SetPortVal(Val("&H60"), Val("&H09"), 1)
  
  If (Result = False) Then
    MsgBox "Whoops ! There is a problem with SetPortByte.", vbOKOnly + vbCritical, "VBDumpPort32"
    Unload FrmVBDumpPort32
  End If
   
  Result = SetPortVal(Val("&H60"), Val("&H00"), 1)
  
  If (Result = False) Then
    MsgBox "Whoops ! There is a problem with SetPortByte.", vbOKOnly + vbCritical, "VBDumpPort32"
    Unload FrmVBDumpPort32
  End If
   
  Result = SetPortVal(Val("&H60"), Val("&H00"), 1)
  
  If (Result = False) Then
    MsgBox "Whoops ! There is a problem with SetPortByte.", vbOKOnly + vbCritical, "VBDumpPort32"
    Unload FrmVBDumpPort32
  End If
   
  Result = SetPortVal(Val("&H60"), Val("&H08"), 1)
  
  If (Result = False) Then
    MsgBox "Whoops ! There is a problem with SetPortByte.", vbOKOnly + vbCritical, "VBDumpPort32"
    Unload FrmVBDumpPort32
  End If
   
  Result = SetPortVal(Val("&H60"), Val("&H00"), 1)
  
  If (Result = False) Then
    MsgBox "Whoops ! There is a problem with SetPortByte.", vbOKOnly + vbCritical, "VBDumpPort32"
    Unload FrmVBDumpPort32
  End If
   
  Result = SetPortVal(Val("&H60"), Val("&H00"), 1)
  
  If (Result = False) Then
    MsgBox "Whoops ! There is a problem with SetPortByte.", vbOKOnly + vbCritical, "VBDumpPort32"
    Unload FrmVBDumpPort32
  End If
End Sub

在PS2鼠标协议中的要给命令:F4,才能写入,看着论坛上说的要等__

"//无论向0x60,还是0x64写东西前都要等状态寄存器OBF变0"

这个OBF寄存器不懂是什么呵,用VB怎么才能检测到这样寄存器是"0"呢?

我用上面的代码并不是每次都不成,有时也能模拟出单击的效果,但很不稳定,

有时会造成重起,我的是XP系统,对VB也是一知半解的,是不是WINIO在XP下本来

就不稳定还是我的代码不正确?我觉得偶尔能成功,应该是OBF正好是:0了,我的代

码才能写入吧.

期待高手指点,忠心感谢>>>>>>

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
为啥一问到这样的问题就没几个人愿意回复哩.
2006-9-22 10:47
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
要回答你的问题, 必须知道如下知识:
1.VB编程基础(这个不难, 知道的人很多)
2.WinIO库的使用(这个知道的人可能也不少, 但是同时满足1和2的人就少多了)
3.PS/2鼠标协议-_-这个恐怕没有开发需要的话没有多少人去学的

需要同时满足以上3点的人不是很多啊, 再加上还要花时间去看楼主的代码, 恐怕也不是人人都有这个时间, 这样筛选下来, 能够回答楼主问题的人自然就很少了

很遗憾, 我对PS/2鼠标协议不熟悉, 没法帮你, 楼主的心情可以理解, 还请耐心等等.如果楼主有急用, 建议到CSDN这类网站上问问
2006-9-22 11:07
0
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这问题有那么难吗?
应该会用VB使用WINIO模拟鼠标点击的就可以了呵.就没人肯帮帮忙.
2006-9-26 12:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个winio没用过,但我用过mouse_event,比较好用.
定义如下:
mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
2006-10-8 20:14
0
雪    币: 199
活跃值: (74)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
void CEventPlaybackView::SetMouse(char byCode)
{
    //无论向0x60,还是0x64写东西前都要等状态寄存器OBF变0
        _asm
        {
        Loop1:
                in al, 0x64
                and al, 10b
                jnz Loop1

                //向$64端口写命令
                mov al, 0xD3//写鼠标输出缓存命令
                out 0x64,al

        Loop2:
                in al, 0x64
                and al, 10b
                jnz Loop2

                //向$60端口写参数
                mov al, byCode
                out 0x60,al
        }
}

void CEventPlaybackView::SimMouseLButtonDown(int x,int y)
{
       
        SetMouse(0x09);                       
        SetMouse(0x00);
        SetMouse(0x00);
        SetMouse(0x00);

}
2006-10-9 08:26
0
雪    币: 199
活跃值: (74)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
上述代码需在驱动中将此进程IOMAP位打开以便此进程能操纵端口

WINIO库有此功能。

当然你也可直接WINIO库IO操作代替上述代码中的嵌入汇编
2006-10-9 08:31
0
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我就是想直接用WINIO库提供的函数对端口直接操作,可是是不是我延时的100毫秒的时间不对啊,怎么过一会就重起,而且并不是每次都不成,有时也能成功,真搞不懂哈.
2006-10-9 10:14
0
游客
登录 | 注册 方可回帖
返回
//