我試圖創建一個程序,我可以將進程的進程ID(可能是firefox,即記事本等)發送到滾動進程窗口的方法。如何使用Win32API在其他進程中滾動窗口
我一直在嘗試GetScrollBarInfo和SetScrollPos,我發現在pinvoke沒有任何成功。我不知道這是否正確。我開始玩GetScrollBarInfo,但它似乎沒有工作。
我試圖在http://www.pinvoke.net/default.aspx/user32.getscrollbarinfo找到的代碼
[StructLayout(LayoutKind.Sequential)]
public struct SCROLLBARINFO
{
public int cbSize;
public Rectangle rcScrollBar;
public int dxyLineButton;
public int xyThumbTop;
public int xyThumbBottom;
public int reserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public int[] rgstate;
}
private const uint OBJID_HSCROLL = 0xFFFFFFFA;
private const uint OBJID_VSCROLL = 0xFFFFFFFB;
private const uint OBJID_CLIENT = 0xFFFFFFFC;
private int Scroll(int ProcessID)
{
IntPtr handle = Process.GetProcessById(ProcessID).MainWindowHandle;
SCROLLBARINFO psbi = new SCROLLBARINFO();
psbi.cbSize = Marshal.SizeOf(psbi);
int nResult = GetScrollBarInfo(handle, OBJID_CLIENT, ref psbi);
if (nResult == 0)
{
int nLatError = Marshal.GetLastWin32Error();
}
}
GetLastWin32Error()返回錯誤代碼122,這意味着「傳遞給系統調用的數據區域太小」,根據http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
林不知道我做錯了什麼。我該如何解決這個問題?
謝謝。我會稍後再試! :) – 2013-03-12 09:21:12
尋找這方面的信息似乎有點難。你的例子很好用。既然你似乎是我所知道的少數人知道的事情之一,你從哪裏得到這些信息?我想進一步概括這個,所以它不僅僅是記事本。我不知道「編輯」來自哪裏。那是什麼?我怎樣才能找到其他程序的等價物? – 2013-03-13 22:56:16
「編輯」是記事本中需要將滾動發送到的控件。許多瀏覽器不會要求它被髮送到控件 - 例如,我只用FindWindow嘗試(null,「當前頁面名稱 - Opera」);和滾動工作正常。我過去使用過WM_MOUSEWHEEL,並且知道在低級別的鼠標鉤子中使用它需要什麼。如果你想得到一個需要發送到其他窗口的控件,可以查看EnumChildWindows或者使用WinSpy ++。 欲瞭解更多信息: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx – Jammerx2 2013-03-14 20:26:44