将WM_HSCROLL发送到其他程序

时间:2013-02-05 08:53:50

标签: winapi visual-c++ scrollbar powerpoint

我试图通过发送WM_HSCROLL滚动其他程序(PowerPoint 2013), 只有当我向SendMessage提供正确的LPARAM(非NULL)时它才会起作用。

LPARAM的值是动态的,如果您关闭并打开一个新程序,它将会改变。 现在我只能通过挂钩WM_HSCROLL并手动点击滚动条来获得它的价值。

// This is my code: 
LPARAM lParam = 0x0a616c38;  // Found by hooking WM_HSCROLL
SendMessage(hTarget, WM_HSCROLL, SB_LINERIGHT, lParam);

那么可以以编程方式获得正确的LPARAM吗? 非常感谢!

P.S。滚动条不是PowerPoint 2013中的真实窗口。
附:如果我使用GetScrollInfo(hTarget,SB_CTL和& scrollinfo),它返回1,但scrollinfo内的所有值都为零。
附: Office Home and Student 2013 Official Site

2 个答案:

答案 0 :(得分:0)

您是否尝试过调用GetLastError?

答案 1 :(得分:0)

GetScrollInfo可能不会跨进程边界工作,所以我会说这就是为什么你没有得到有效的值。

标准窗口滚动条的lParam消息的WM_HSCROLL值为NULL,或滚动控件的句柄。滚动控件的句柄显然会在每次运行程序时发生变化,因此您需要先自行查找,然后才能可靠地模拟滚动输入。

为此,您可以使用FindWindowEx函数搜索“SCROLLBAR”类的子窗口的父窗口(示例中为hTarget)。由于您可能会找到多个滚动条子窗口,因此您需要一些方法来区分它们 - 最有可能的是,通过窗口的GWL_ID值,因为这可能不会在运行之间发生变化。