同时我启动计时器中的程序:
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醒来时,我找到了窗口并开始记录
答案 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
。