接上贴(已结),我已找到“暴风影音”播放视频的窗口的句柄:H2
通过 PostMessage(H2, WM_Close, 0, 0);
可使该窗口关闭(验证了准确性)
现在,我想模拟“点击该窗口”,使它“暂停”和“播放”。
但以下代码不成功!
GetWindowRect(H2, Rect);
mouse_event(MOUSEEVENTF_LEFTDOWN,Rect.Left,Rect.Top,100,100);
mouse_event(MOUSEEVENTF_LEFTUP,Rect.Left,Rect.Top,100,100);
更怪的是,点击的按钮不停地“闪动”,谁能解决此问题?立马结贴
通过 PostMessage(H2, WM_Close, 0, 0);
可使该窗口关闭(验证了准确性)
现在,我想模拟“点击该窗口”,使它“暂停”和“播放”。
但以下代码不成功!
GetWindowRect(H2, Rect);
mouse_event(MOUSEEVENTF_LEFTDOWN,Rect.Left,Rect.Top,100,100);
mouse_event(MOUSEEVENTF_LEFTUP,Rect.Left,Rect.Top,100,100);
更怪的是,点击的按钮不停地“闪动”,谁能解决此问题?立马结贴
解决方案 »
- 现在大家都在用Delphi的那个版本啊?
- 如何实现自己画的GRID实现固定列和固定行的功能???
- 如何在DBGRID中加入恢选框。在每条记录中可以有选择性地对结果进行选择。
- 元芳,此事你怎么看?
- 找一函数。
- 几个小问题,请大家帮帮忙,谢谢!!!!! 1,如何取整,例如将小数2.7取值为2 2,如何判断edit.text的内容是否为integer型
- 来看看一个函数,是返回boolean的,为什么不行?我是初学者
- 在DELPHI中如何调用WIN32API函数,那位高手能指点以下?
- dcc32如何使用?
- 在日期函数中有没有可以只加月的呢?(举个例子更好)
- UDP服务器端数据不能接收
- 怎么得到WebBrowser中某个控件的坐标?
并进而控制另一台电脑的暴风影音的开始播放、继续播放、暂停、停止、手工移动进度条的进度?
hook、子类技术吧 另外,一开机就启动暴风影音,并且是全屏的
我们是想一开机,就自动打开全屏模式
而不是 打开文件之后,才切换到全屏模式"首先这个用简单的方法需要两样技术:
1.键盘鼠标模拟技术
2.Socket技术用VB实现的步骤:
0.窗口操作
GetActiveWindow 获取活动窗口句柄
FindWindow 使用窗口的类或标题找句柄
WindowFromPoint 使用鼠标指向的坐标找句柄
SetWindowPos 设置窗口位置
GetWindowRect 得到窗口矩形键盘鼠标模拟技术
keybd_event 模拟按键
mouse_event 模拟鼠标
SetCursorPos 设置鼠标坐标
GetCursorPos 得到鼠标坐标
只要是全屏播放,就不起作用,在其它状态下播放,都能控制。什么道理,有无办法解决
var
H: HWND;
R: TRect;
begin
H := FindWindow('Baofeng_StormPlayer', nil);
H := FindWindowEx(H, 0, 'ControlPanelWindow', nil);
if H <> 0 then
begin
if GetWindowRect(H, R) then
begin
if SetCursorPos(R.Location.X + R.Width div 2, R.Location.Y + R.Height div 2) then
begin
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;
end;
end;
end;其实你那个关闭的方法是非正常的关闭,会引起暴风影音发生异常(已测)
我觉得严谨的办法是注入dll来调用它内部的事件。当然这个开发难度就较高了
全屏真没有办法吗?
“模拟点击需要一个前提条件就是被按下的地方需要在所有窗口最上层”。其实它就在最上层,我用Spy++(也是最顶层)去测句柄,一动鼠标Spy++就不见了。
人工只要点一下鼠标或按一下空格键就会在在暂停核播放之间切换,代码控制咋就不行?
var
H: HWND;
R: TRect;
begin
H := FindWindow('Baofeng_StormPlayer', nil);
if H <> 0 then
begin
PostMessage(H, WM_KEYDOWN, VK_SPACE, 0);
PostMessage(H, WM_KEYUP, VK_SPACE, 0);
end;
end;
是不是这句标题有问题,不论是否全屏句柄都为0
mouse_event(MOUSEEVENTF_LEFTDOWN,Rect.Left,Rect.Top,100,100);
mouse_event(MOUSEEVENTF_LEFTUP,Rect.Left,Rect.Top,100,100);
我一般都是先
SetCursorPos(X,Y)
然后:
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
SetCursorPos(X,Y)
然后
sleep(1000)
等待暴风影音检查到鼠标是在它按钮上的,最后再
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
有时候用模拟点击,单击是没有效果,要双击才出单击的效果,我也不知道原因,反正
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
连续两次就正常了
PostMessage和sentmessage窗口只要不是hide或最小化都可以