按标题查找窗口窗口的标题是什么?

时间:2015-12-22 13:37:30

标签: c# wpf window caption

我必须跟踪程序的运行时间。 该程序公开以下窗口 enter image description here

同时我启动计时器中的程序:

private void TimerCheckGroups_Tick(object sender, EventArgs e)
{
  IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Execution");
  if (windowPtr != IntPtr.Zero)
    Console.Beep();<--------
}

但是嘟嘟声线永远不会受到打击。 我误解了窗口标题的含义吗?

- ADD-- 我会尝试让执行阶段更清晰。

启动----&GT;启动我的记录器。

用户-------&GT;启动程序A,启动启动窗口C的程序B(不可见).C具有标题执行。

当我启动dontbyteme提出的解决方案时,只有B程序出现,因此只有1个窗口。

简而言之

  • 记录器:因为它是托盘程序而不可见

  • 程序A:可见,因为它是主程序

  • 程序B:因为它设置为Notvisible而不可见

  • 程序C:不明白为什么?!?!?!?

- 向JARRETT解决方案 -

  • 记录器通过计时器监视进程保持空闲状态

  • 程序A启动但没有人关心它。然后程序A启动程序B

  • 当程序B醒来时,我找到了窗口并开始记录

2 个答案:

答案 0 :(得分:1)

以下问题解决了如何找出程序何时启动的问题。 Detecting the launch of a application此外,您可以使用dll导入和使用EnumWindows枚举计算机上的窗口。将列出帮助您的示例pInvokes。

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern bool EnumWindows(EnumWindowsProc enumProc, IntPtr lParam);
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern int GetWindowText(IntPtr hWnd, StringBuilder strText, int maxCount);
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern int GetWindowTextLength(IntPtr hWnd);
    [DllImport("user32.dll")]
    private static extern bool IsWindowVisible(IntPtr hWnd);

答案 1 :(得分:0)

您可以尝试通过遍历每个窗口来获取窗口并与标题进行比较:

    foreach(Window window in Application.Current.Windows)
    {
        if(window.Title == "Execution")
        {
            Console.Beep();
            // ...
        }
    }

Title属性就是您所谓的Caption