1

WM_HSCROLL を送信して他のプログラム (PowerPoint 2013) をスクロールしようとしていますが、正しい LPARAM (NULL ではない) を SendMessage に提供した場合にのみ機能します。

LPARAM の値は動的で、新しいプログラムを閉じて開くと変化します。現在、WM_HSCROLL をフックしてスクロール バーを手動でクリックすることによってのみ、その値を取得できます。

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

プログラムで正しい LPARAM を取得することは可能ですか?
どうもありがとう!

ps
GetScrollInfo(hTarget, SB_CTL, &scrollinfo) を使用すると 1 が返されますが、scrollinfo 内の値はすべてゼロです。
ps Office Home and Student 2013 公式サイト

4

2 に答える 2

0

GetLastError を呼び出そうとしましたか?

于 2013-02-05T09:02:28.917 に答える
0

GetScrollInfoおそらくプロセスの境界を越えて機能しないので、有効な値が返されないのはそのためだと思います。

メッセージのlParam値はWM_HSCROLL、標準のウィンドウ スクロール バーの場合は NULL、またはスクロール コントロールのハンドルのいずれかです。スクロール コントロールのハンドルは、プログラムが実行されるたびに明らかに変化するため、スクロール入力を確実にシミュレートするには、自分でそれを見つける必要があります。

これを行うには、FindWindowEx関数を使用して、クラス「SCROLLBAR」の子ウィンドウの親ウィンドウ (例では hTarget) を検索できます。おそらく複数のスクロールバーの子ウィンドウを見つけるので、それらを区別する何らかの方法が必要になるでしょう - 最も可能性が高いのは、ウィンドウの GWL_ID 値を介して、これはおそらく実行ごとに変化しないためです。

于 2013-02-05T10:10:46.717 に答える