我有一个第三方应用程序总是在其他表单上,我想要显示在winform中开发的自定义按钮。我正在使用具有TopMost属性= true;
的winform在初始化表单后,我会调整Task.Factory.StartNew(() => Repaint());
,它会定期移动应用程序顶部的按钮。我查找应用程序句柄,计算我想要显示按钮的位置,并且它每5ms移动一次。我的问题是,只要第三方应用程序具有焦点,它就可以正常运行,但是当我在另一个应用程序上工作时,我的winform消失可能会让第三方应用程序黯然失色。当焦点不在第三方应用程序上时,是否有任何想法使这项工作?
public void Repaint()
{
while (true)
{
try
{
Invoke(new MethodInvoker(() => MoveButtons()));
Thread.Sleep(5);
}
catch (Exception excpt)
{
}
}
}
public void MoveButtons()
{
IntPtr TPHandle = FindWindow(null, "Communicator");
Rect location = new Rect();
GetWindowRect(AvayaHandle, ref location);
var sizeX = location.Width - location.X;
var sizeY = location.Height - location.Y;
{
var newX = location.X + 130;
var newY = location.Height - 85;
this.Location = new Point(newX, newY);
SetWindowPos(TPHandle, this.Handle, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
}