gpt4 book ai didi

c# - 为什么另一个应用程序窗口标题中的文本不正确?

转载 作者:可可西里 更新时间:2023-11-01 14:19:06 26 4
gpt4 key购买 nike

我正在运行一个小工具(在 Windows 7、32 位上),我想查看在我试过的另一个应用程序中打开了什么文档,它适用于 Windows 上的记事本。

        var myProcess = Process.GetProcessesByName("NotePad");
string title = myProcess[0].MainWindowTitle;
MessageBox.Show(title);

输出是:

       "New Text Document - Notepad"

现在,如果我尝试另一个应用程序,它并不总是给我正确的标题,但我注意到大多数 Microsoft 应用程序似乎都没有问题 - NotePad、WordPad、EXCEL 等。这是其他软件的问题。它有一个很长的标题,但只返回一个非常简单的名称。

这是我从我的应用程序中得到的,它有 processName = "FooBar"实际运行的窗口在顶部有这个:

"FooBar Software Verson 1.2 - [Results]"

我的代码给出:

"FooBar"

有什么想法吗?

[编辑} 2012-11-19这个问题的症结在于我试图从窗口中获取打开文件的名称。现在好像我用的软件那里没有显示。我发现一个名为“AutoIT3 Window Spy”的程序可以获得我需要的文本,因为打开文件的文本在窗口上,而不仅仅是在标题中。我下载了源代码(它是 http://www.autohotkey.com/ 的一部分,它是开源的。它似乎依赖于许多已经提出的建议,但我现在还不能弄明白。)我正在查看的源代码是 C++ 并且位于此处 https://github.com/AutoHotkey/AutoHotkey

所以我认为我的问题的解决方案可能在别处。这个问题可能没有答案。

最佳答案

主窗口标题是您进入任务管理器并查看“描述”列时看到的内容,而不是窗口标题本身。

它是进程的标题,而不是进程中特定窗口的标题。给定进程可能同时打开任意数量的窗口。

如果你需要实际的窗口标题,你必须像这样 Hook user32:

using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Security;



namespace Application
{
public class Program
{
public static void Main ( )
{
IntPtr hwnd = UnsafeNativeMethods.FindWindow("Notepad", null);
StringBuilder stringBuilder = new StringBuilder(256);
UnsafeNativeMethods.GetWindowText(hwnd, stringBuilder, stringBuilder.Capacity);
Console.WriteLine(stringBuilder.ToString());
}
}

[SuppressUnmanagedCodeSecurity]
internal static class UnsafeNativeMethods
{
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
internal static extern int GetWindowText ( IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount );
[DllImport("user32.dll", SetLastError = true)]
internal static extern IntPtr FindWindow ( string lpClassName, string lpWindowName );
}

关于c# - 为什么另一个应用程序窗口标题中的文本不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13186340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com