c#winform。插件在另一个应用程序之上

时间:2018-01-04 11:16:30

标签: c# winforms

我有一个第三方应用程序总是在其他表单上,我想要显示在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);
    }
 }

0 个答案:

没有答案