Teamviewer 停止工作 GetWindowText (User32.dll) 功能
Posted
技术标签:
【中文标题】Teamviewer 停止工作 GetWindowText (User32.dll) 功能【英文标题】:Teamviewer stops working GetWindowText (User32.dll) Function 【发布时间】:2021-01-29 15:40:18 【问题描述】:我开发了一个访问 user32.dll 的 C# 代码,它使用 GetWindowText 函数。在 Windows 7 上卸载 Teamviewer 后,代码可以正常运行。
但是如果你安装了Teamviewer,代码不能用GetWindowText函数检索窗口中的控件文本。代码如下。我该如何解决这个问题?
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr FindWindowExW(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass,
string lpszWindow);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr GetWindowText(IntPtr hwndParent, StringBuilder Wintxt, int txtsize);
public void CloseWin(string param)
try
IntPtr hwnD = FindWindowExW(IntPtr.Zero, IntPtr.Zero, "CabinetWClass", null);
IntPtr hwnD2 = FindWindowExW(hwDvar, IntPtr.Zero, "WorkerW", null);
IntPtr hwnD3 = FindWindowExW(hwnD2, IntPtr.Zero, "ReBarWindow32", null);
IntPtr hwnD4 = FindWindowExW(hwnD3, IntPtr.Zero, "Address Band Root", null);
IntPtr hwnD5 = FindWindowExW(hwnD4, IntPtr.Zero, "msctls_progress32", null);
IntPtr hwnD6 = FindWindowExW(hwnD5, IntPtr.Zero, "Breadcrumb Parent", null);
IntPtr hwnD7 = FindWindowExW(hwnD6, IntPtr.Zero, "ToolbarWindow32", null);
StringBuilder sb = new StringBuilder(255);
GetWindowText(hwnD7, sb, 255);
【问题讨论】:
【参考方案1】:好吧,我已经解决了这个问题。我还通过类名#32770 调用了带有函数 FindWindowEx 的对话框文件类。
Teamviewer(TV) 快速支持用户界面也使用此类类型。当我运行我的代码时,会对电视界面和工作 user32 功能块进行干预。
为了解决这个问题,我用类名和控件名调用了 FindWindow 函数,这样就不会干预电视,问题就解决了。
【讨论】:
以上是关于Teamviewer 停止工作 GetWindowText (User32.dll) 功能的主要内容,如果未能解决你的问题,请参考以下文章
QApplication::alert 如果窗口不是活动窗口,则会向窗口显示一个警告(非常好用,效果就和TeamViewer一样)