如何在其他应用程序

时间:2017-11-10 09:15:25

标签: c# winforms

我有一个应用程序A,它监听应用程序B(使用Hook)

[Application A] 1

ListBox 1 =我桌面上的所有应用程序都带有Button或TextBox

[Application B]

如您所见,我已经有了Red Rectangle,我可以使用两种方法:

var dc = GetWindowDC((LBListControl.SelectedItem as Data).Value);
            using (Graphics g = Graphics.FromHdc(dc))
            {
                g.DrawRectangle(Pens.Red, 0,0,50,20);
                g.Dispose();
                g.ReleaseHdc(dc);
            }
            // paintedRectangle = lRectangle[i];
            //ControlPaint.DrawReversibleFrame(paintedRectangle, SystemColors.Highlight, FrameStyle.Dashed);

// - >第二种方法。 我改变ListBox.SelectedIndex

时调用的函数
private void LBListControl_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                PaintRedRectangle(LBListControl.SelectedIndex);
            }
            catch (ArgumentOutOfRangeException)
            {

            }
        }

lRectangle是一个包含我的按钮/文本框的X,Y的列表(Widht / Height由我自己设置)。

我听说使用手柄我可以更改控制器的BorderStyle / BorderColor。如果这是真的我没有找到相关的东西,我想知道你是否知道。

另外,当我想向其他人展示时,我怎么能压制我的RedRectangle?

BTW:使用g.ReleaseHdc(dc);没有工作参数无效(不知道为什么)

提前谢谢

1 个答案:

答案 0 :(得分:0)

感谢Reza Aghaei,我做到了!

我创建了一个新表单:

public partial class InvisibleFrame : Form
    {
        public InvisibleFrame()
        {
            InitializeComponent();
            BackColor = Color.Lime;
            TransparencyKey = Color.Lime;
            FormBorderStyle = FormBorderStyle.None;
            ShowInTaskbar = false;
        }
    }

我在这里打电话:

private void PaintRedRectangle(int i)
    {
        try
        {
            ci.Location = new Point(lRectangle[i].X, lRectangle[i].Y);
            ci.Size = new Size(10, 10);
            ci.BackColor = Color.Red;
            ci.BringToFront();
            ci.Show();
        }
        catch(ObjectDisposedException)
        {
            ci = new InvisibleFrame();
            PaintRedRectangle(i);
        }
    }

我选择按钮和我要挂钩的TextBox:

private void BTHookTB_Click(object sender, EventArgs e)
{
    if (sender != null)
    {
        ControlHook TextBoxHook = new ControlHook
        {
            Text = LBListControl.SelectedItem.ToString(),
            Position = lRectangle[LBListControl.SelectedIndex],
        };
        lControlHook.Add(TextBoxHook);
        LabelTBHook.Text = "TextBox : " + lControlHook[1].Text;
        BTHookTB.Enabled = false;
        BTReset.Enabled = true;
        BTHook.Enabled = true;
        LBListControl.Enabled = false;
        ci.Hide();
    }
}

我隐藏它。