HideCaret および ShowCaret 関数が役立つようです
http://msdn.microsoft.com/en-us/library/windows/desktop/ms648406(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ ms648403(v=vs.85).aspx
キャレットを保持するコントロール (Edit、ComobBox など) のハンドルを取得するには、関数 GetWindowThreadProcessId を使用して ThreadId GetGUIThreadInfo を取得し、キャレット ホルダーのハンドルを取得します。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633522(v=vs.85).aspx
[DllImport("User32",
CallingConvention = CallingConvention.Winapi,
ExactSpelling = true,
EntryPoint = "HideCaret",
SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern Boolean HideCaret(IntPtr hWnd);
[DllImport("User32",
CallingConvention = CallingConvention.Winapi,
ExactSpelling = true,
EntryPoint = "ShowCaret",
SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern Boolean ShowCaret(IntPtr hWnd);
// If the window you have to copy is in your process then
// handle = IntPtr.Zero
// Otherwise your have to find it out via GetWindowThreadProcessId and GetGUIThreadInfo
HideCaret(handle);
try {
// Your code to capture the image
}
finally {
ShowCaret(handle);
}