如何模拟当前窗口打开的鼠标滚动?

时间:2013-09-29 20:14:50

标签: c++ visual-studio-2010 visual-c++

我正在尝试在打开的当前窗口上模拟鼠标滚动事件。我正在使用visual C ++中的setscrollpos()函数实现它。

    SetScrollPos(hwnd,SB_VERT,0,TRUE);

    UpdateWindow(hwnd);

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

1 个答案:

答案 0 :(得分:1)

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

这涉及

  • (a)获取标题为“Minesweeper”的窗口的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);
}