我最终试图编写一些东西来检查特定窗口是否存在,并将其设置为活动状态。我能够使用 FindWindow 来查找文字窗口名称。
int hWnd = FindWindow(null, "121226-000377 - company - Oracle RightNow CX Cloud Service");
if (hWnd > 0) //If found
{
SetForegroundWindow(hWnd); //Activate it
}
else
{
MessageBox.Show("Window Not Found!");
}
标题前面的数字会发生变化,并且永远不会两次相同,因此我试图使用正则表达式来查找是否有任何活动窗口具有如上所示的名称结构,但数字可以改变。我有一个适用于此的常规表达式,但我不知道如何实现它。我试过:
int hWnd = FindWindow(null, @"^\d+-\d+\s.*?RightNow CX");
if (hWnd > 0) //If found
{
SetForegroundWindow(hWnd); //Activate it
}
else
{
MessageBox.Show("Window Not Found!");
}
但它不断地失败。那么如何使用 FindWindow/SetForegroundWindow 命令同时让它们使用正则表达式进行检查呢?
更新~~~~我选择了一个最佳答案,但这里是我如何让它工作的实际代码,以防万一有人感兴趣。
protected static bool EnumTheWindows(IntPtr hWnd, IntPtr lParam)
{
int size = GetWindowTextLength(hWnd);
if (size++ > 0 && IsWindowVisible(hWnd))
{
StringBuilder sb = new StringBuilder(size);
GetWindowText(hWnd, sb, size);
Match match = Regex.Match(sb.ToString(), @"^\d+-\d+\s.*?RightNow CX",
RegexOptions.IgnoreCase);
// Here we check the Match instance.
if (match.Success)
{
ActivateRNT(sb.ToString());
}
else
{
//this gets triggered for every single failure
}
//do nothing
}
return true;
}
private static void ActivateRNT(string rnt)
{
//Find the window, using the CORRECT Window Title, for example, Notepad
int hWnd = FindWindow(null, rnt);
if (hWnd > 0) //If found
{
SetForegroundWindow(hWnd); //Activate it
}
else
{
MessageBox.Show("Window Not Found!");
}
}
如果需要的窗口不存在,我仍然需要弄清楚如何在 EnumWindows 方法中进行测试以引发警报,但我稍后会担心。