2

我开发了一个访问 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);
4

1 回答 1

2

好吧,我已经解决了这个问题。我还通过类名#32770 调用了带有函数 FindWindowEx 的对话框文件类。

Teamviewer(TV) 快速支持用户界面也使用此类类型。当我运行我的代码时,会对电视界面和工作 user32 功能块进行干预。

为了解决这个问题,我用类名和控件名调用了 FindWindow 函数,这样就不会干预电视,问题就解决了。

于 2020-10-15T22:25:10.537 回答