2013-09-29 146 views
1

我目前正试图在当前打开的窗口上模拟鼠标滚动事件。我正在Visual C++中使用setscrollpos()函数来实现它。如何模拟当前窗口的鼠标滚动打开?

SetScrollPos(hwnd,SB_VERT,0,TRUE); 

    UpdateWindow(hwnd); 

如何将打开的当前窗口的名称传递给参数hwnd?

+0

您是否试图将此消息发送给其他应用程序?如果是这样,你的问题会更好地被认为是“如何获得特定窗口的hwnd?”你可以使用SendInput,当你有这个hwnd来正确模拟用户输入设备的活动(鼠标,键盘等) – enhzflep

+0

“当前窗口打开”是什么意思? –

+0

当我使用“当前窗口”阶段时,我指的是笔记本电脑用户打开的任何窗口。鼠标滚动通过网络摄像头使用特定的眼睛手势进行控制。我不知道如何获取打开的窗口的名称传递给参数HWND ?? – Sade

回答

1

在一百万年前,我为我制作了一个可以播放WinMine(Windows'MineSweeper)的程序。

这涉及

  • (a)中获取该窗口的HWND具有标题 “扫雷”
  • 它(B)的呼叫setWindowForeground
  • (c)中打开进程的内存和读取 对应于当前游戏状态的一些数据。
  • (d)检查该存储器,以确定 地雷的数量和位置
  • (e)中移动鼠标到每个“安全”的砖的中心发送 前一个左按钮时,则左按钮向上消息

游戏可以在1秒内完成100%的时间 - 高分的剩余时间部分始终与解决问题的总时间相同。对于踢球,我还添加了将比赛场设置为1比特图像的代码 - 即每个单元格都是安全的。

无论如何,下面的代码适用于我:它只是滚动这个后输入框4行。

如果在调试模式下运行,或者在可见控制台窗口中运行 - 由于它是前台窗口,事件将被吞下。我已经运行这个代码没有窗口。编辑代码,然后敲击构建,然后在构建代码时切换回此窗口,导致滚动此输入框。

#include <windows.h> 
#include <winuser.h> 

const int minWheelMovement = 120; 

int WINAPI WinMain (HINSTANCE hThisInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR lpszArgument, 
        int nCmdShow) 
{ 

    HWND foregroundWindow; 
    foregroundWindow = GetForegroundWindow(); 
    mouse_event(MOUSEEVENTF_WHEEL, 0,0,4*minWheelMovement, 0); 
} 
+0

你会在github上分享这个小应用程序代码吗?看起来很有趣...... –

+0

@AlexandreMarcondes - Nah,我没有github账户,现在也不倾向于设置一个账户。我会把它扔到pastebin上,可以在接下来的24小时内使用。短短一两分钟。但请注意 - 程序不能正常运行,因为它是为WindowsXP附带的MineSweeper版本编写的。 – enhzflep

+1

@AlexandreMarcondes - 在这里,赶上! http://pastebin.com/U2ZuvXuH – enhzflep