我正在尝试按进程名称抓取一个窗口并将其关注,然后截取它的截图。除非我打开Teamviewer(即使在使用teamviewer进行屏幕共享时,只是在团队查看器运行时),它的工作方式也很完美。
当teamviewer正在运行时,窗口没有聚焦或被带到前台,而截图的矩形非常小(33x21),通常它是1600x900。
以下是相关代码:
proc = Process.GetProcessesByName(procName)[0];
SetForegroundWindow(proc.MainWindowHandle);
ShowWindow(proc.MainWindowHandle, SW_RESTORE);
Rect rect = new Rect();
GetWindowRect(proc.MainWindowHandle, ref rect);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb);
Graphics.FromImage(bmp).CopyFromScreen(rect.left, rect.top, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy);
以下是我获得这些功能的地方:
[DllImport("user32.dll")]
private static extern IntPtr ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
public static extern IntPtr GetWindowRect(IntPtr hWnd, ref Rect rect);
[DllImport("user32.dll")]
private static extern int SetForegroundWindow(IntPtr hWnd);
答案 0 :(得分:1)
我遇到过类似的问题。在两台Windows 7 Pro计算机上,我注意到在TeamViewer客户端运行时,以下代码停止工作。
var wordProcess = Process.GetProcessesByName("winword")
.FirstOrDefault(process => process.MainWindowTitle.Contains(documentName));
设置断点并检查单个正在运行的WINWORD进程会发现Process.MainWindowTitle属性在大多数情况下都是空白的。而WinWord Windows任务栏图标清晰显示标题。
退出TeamViewer会使事情恢复正常:每次正确填充Process.MainWindowTitle。
我已将此问题报告给TeamViewer团队。
经测试: TeamViewer 9 ver。 9.0.27339,设置为无人值守访问; MS Word 2007
答案 1 :(得分:1)
我也发现teamViewer打破了UI自动化。禁用"呈现此应用程序"函数重新启用UI自动化。