首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

如何按commandbutton有被按下的效果

2013-07-11 
怎么按commandbutton有被按下的效果窗口上面有两个 buttonA 和 B.我在B的 clicked事件里面写上一段 A.trig

怎么按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


  2、模拟鼠标右键单击事件:
  mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
  3、两次连续的鼠标左键单击事件 构成一次鼠标双击事件:
  mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
  mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
  如上面所示如果我们要使用两个dwFlags常数的组合时,可以用Or将其连接起来。本例中我们把dx,dy参数都设为0,是指每次模拟事件的位置是鼠标的当前位置,dx,dy在没有使用MOUSEEVENTF_ABSOLUTE标志时是相对于鼠标当前位置的坐标,如果设置为使用绝对坐标,则dx,dy是相对于屏幕的坐标。
  然后把这些语句放在Timer控件的Timer事件中,就能实现每一定间隔模拟一次鼠标事件了。
[解决办法]
这种小把戏会被杀毒软件误会的
Mouse_Event等过程的API会被杀毒软件HOOK
还是老老实实的用坐标变换,或者自己做两个图片去替换吧

热点排行