我正在WPF中编写一个附加到skype的应用程序,随之移动并发送到后面/前面。我唯一缺少的是每当skype被带到前面时,我需要将我的WPF应用程序发送到前面。
我正在考虑的方法是,检测我的桌面上Skype何时进入最顶端(在Z-Order中)并将我的应用程序发送到前面。
这就是我所拥有的: 用于连接过程
public List<Process> skypeProcess;
public IntPtr ptr;
public Rect skypeRect;
public SkypeWindowPosition()
{
skypeProcess = Process.GetProcessesByName("skype").ToList();
ptr = skypeProcess[0].MainWindowHandle;
SetForegroundWindow(ptr);
skypeRect = new Rect();
GetWindowRect(ptr, ref skypeRect);
}
我想从user32.dll使用GetTopWindow,但它不能按我想要的方式工作。
我试过了:
if (lyncWin.ptr == LyncWindowPosition.GetTopWindow(new IntPtr(0)))
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("No");
}
但即使skype位于顶部,它也会评估为“No”。
我也有:
int GetZOrder(IntPtr hWnd)
{
var z = 0;
for (var skypeHandle = hWnd; skypeHandle != IntPtr.Zero; skypeHandle = LyncWindowPosition.GetWindow(skypeHandle, 3)) z++;
return z;
}
它告诉我Skype的Z位置,但Z会有所不同,具体取决于活动窗口的数量。
任何有关如何确定skype是否位于最佳位置的帮助,或任何更好的方法都将受到赞赏。
答案 0 :(得分:0)
我解决了自己的问题:
原来我应该使用GetForegroundWindow()
所以我做了:
if (LyncWindowPosition.GetForegroundWindow().GetHashCode() == lyncWin.ptr.GetHashCode())
{
window.Topmost = true;
window.Topmost = false;
}