我有一个应用程序A,它监听应用程序B(使用Hook)
ListBox 1 =我桌面上的所有应用程序都带有Button或TextBox
如您所见,我已经有了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);没有工作参数无效(不知道为什么)
提前谢谢
答案 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();
}
}
我隐藏它。