1

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

    SetScrollPos(hwnd,SB_VERT,0,TRUE);

    UpdateWindow(hwnd);

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

4

1 回答 1

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);
}
于 2013-09-30T08:22:34.917 回答