【发布时间】:2019-04-02 18:40:39
【问题描述】:
我正在尝试找到一个最小化的窗口并显示它。
该程序可以从三星下载,它的标题是“SideSync”。要完全复制我的问题,您需要安装它并且还需要将三星手机插入您的计算机。
这是完全配置并运行的屏幕截图:
观察有两个窗口,A 和 B。我使用了一个名为 Microsoft Inspect 的工具来确定这两个程序窗口是正常窗口。他们没有孩子父母的关系。但是,当我启动 SideSync 时,只出现 Window A。然后我必须单击“电话屏幕”,然后出现窗口 B(除了窗口 A)。这可能是解决此问题的线索?我们拭目以待。
这是 Microsoft Inspect 中显示的两个窗口:
两个窗口都有窗口标题。使用下面的代码,我可以检索窗口的Process(这是我的目标)。
服务器代码:
public static Process GetProcessByWindowTitle(string windowTitleContains)
{
foreach (var windowProcess in GetWindowProcesses())
if (windowProcess.MainWindowTitle.Contains(windowTitleContains))
return windowProcess;
return null;
}
然而,一些奇怪的行为正在发生。 GetProcessByWindowTitle() 将返回一个而不是两个进程。我假设因为有两个窗口,所以必须有两个进程。
它返回哪个Process 取决于我用鼠标单击的最后一个窗口。
例如,如果我最后一次单击窗口 A;然后GetProcessByWindowTitle("SideSync") 将返回Process,但随后GetProcessByWindowTitle("SAMSUNG") 将返回void。
...反之亦然,如果我最后一次单击窗口 B,GetProcessByWindowTitle("SideSync") 将返回 void,但随后 GetProcessByWindowTitle("SAMSUNG") 将返回 Process。
客户端代码:
[Ignore("Requires starting SideSync and clicking one of the windows. Only the last clicked will return a Process.")]
[Test]
public void NonMinimizedWindowProcessIsDetected()
{
Process p1 = Windows.GetProcessByWindowTitle("SAMSUNG");
if(p1==null) { Console.WriteLine("SAMSUNG process is null.");}
else { Console.WriteLine("SAMSUNG process detected.");}
Process p2 = Windows.GetProcessByWindowTitle("SideSync");
if (p2 == null) { Console.WriteLine("SideSync process is null."); }
else { Console.WriteLine("SideSync process detected."); }
}
我的目标是显示窗口 B。 我的问题是,这只有在我最后单击它时才有可能,这会产生不必要的依赖。 我希望能够独立于任何点击顺序显示窗口 B。
【问题讨论】:
-
您说您相信您正在寻找的窗口是另一个窗口的子窗口。您是否使用 Microsoft 的 Inspect 等工具验证了这一点?
-
截图清楚地显示在该进程名称下打开了2个顶级窗口。两者都不是对方的孩子,他们实际上是兄弟姐妹。
-
@Alejandro - 你可能是对的。但是,当最小化时,GetWindowProcesses() 只返回“SideSync”进程名称。另一方面,如果我最大化两个窗口,GetWindowProcesses() 会返回“SideSync”和“Samsung...”进程。这是一个谜,我发布这个问题的原因是为了找出为什么没有列出“三星...”...
-
@sapbucket 子窗口不能最大化或最小化,它们完全存在于它们的父窗口中,也许这两个是普通窗口和对话框,但绝对不是父子窗口。然而,最有可能的是,两者都属于同一进程。至于GetWindowProcesses,不看它的定义很难说。
-
@Alejandro - 我在服务器代码部分的底部添加了 GetWindowProcesses 的代码 sn-p。如您所见,它只是使用 System.Diagnostic.Process