当前位置: 代码迷 >> PB >> 如何按commandbutton有被按下的效果
  详细解决方案

如何按commandbutton有被按下的效果

热度:63   发布时间:2016-04-29 06:43:01.0
怎么按commandbutton有被按下的效果
窗口上面有两个 button  A 和 B.

我在B的 clicked事件里面写上一段 A.triggerevent(clicked!)。这个时间会触发执行了A的clicked事件。
但是A按钮,没有被按下去的效果。我想即执行A的cliked事件,又有A按钮被按下去的效果。

各位大佬,有办法不,小弟谢过。

------解决方案--------------------
有办法,模拟鼠标操作

pb11 调用api mouse_event 模拟鼠标点击等操作
Subroutine mouse_event(Ulong dwflag, Ulong dx, Ulong dy, Ulong cbutton, Ulong dwextra) library "user32.dll"
mouse_event(7,x1,y1,0,0) //第一个参数的取值参考下面例子 x1,y1是相对坐标
一个pb例子
//1.声明API函数 
Subroutine mouse_event (long dwFlags,long dx,long dy,long cButtons,long dwExtraInfo) Library "user32.dll" 
Function long SetCursorPos(long x,long y) library 'user32.dll' 
//2.在脚本里调用 

long MOUSEEVENTF_LEFTDOWN = 2 
long MOUSEEVENTF_LEFTUP = 4 

setCursorPos(290,170) 
mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP,0,0,0,0) 

// 以上代码将鼠标指针移动到(x=290,y=170),然后模拟鼠标点击左键一次  
一个vb例子
使用API函数mouse_event可以模拟一次鼠标事件,比如左键单击、双击和右键单击等。这个实例利用此函数产生了十分有趣的效果,无论鼠标处于屏幕的任何位置,每隔一秒程序会使鼠标在那个位置单击或双击一次,这会给我们造成什么样的混乱呢?试一试就知道了。
先在程序中加入如下的声明后,就能引用mouse_event函数:
  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)
  其中各个参数的意义如下表所示:
参数 意义 dwFlags Long,下表中标志之一或它们的组合 dx,dy Long,根据MOUSEEVENTF_ABSOLUTE标志,指定x,y方向的绝对位置或相对位置 cButtons Long,没有使用 dwExtraInfo Long,没有使用 dwFlags常数 意义 MOUSEEVENTF_MOVE &H1,移动鼠标 2*0 MOUSEEVENTF_LEFTDOWN &H2,模拟鼠标左键按下 2 MOUSEEVENTF_LEFTUP &H4,模拟鼠标左键抬起 2*2 4 MOUSEEVENTF_RIGHTDOWN &H8,模拟鼠标右键按下 2*2*2 8 MOUSEEVENTF_RIGHTUP &H10,模拟鼠标右键抬起 2*2*2*2 16 MOUSEEVENTF_MIDDLEDOWN &H20,模拟鼠标中键按下 2*2*2*2*2 32 MOUSEEVENTF_MIDDLEUP &H40,模拟鼠标中键抬起 2*2*2*2*2*2 64 MOUSEEVENTF_ABSOLUTE &H8000,标示是否采用绝对坐标 2*2*2*2*2*2*2 128
  程序中我们这样使用mouse_event函数:
  1、这里是鼠标左键按下和松开两个事件的组合即一次单击:
  mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0