g。大量闪烁

时间:2019-05-21 11:53:29

标签: c# winforms

我正在计时器中使用此功能:

IntPtr Handle = FindWindow(null, "Notepad");

if (radioButton1.Checked)
{
    using (Graphics g = Graphics.FromHwnd(Handle))
    {
        Pen PN = new Pen(pictureBox2.BackColor, (Convert.ToInt32(numericUpDown2.Value)));
        g.DrawLine(PN, 961, 520, 961, 560);
        g.DrawLine(PN, 985, 540, 935, 540);
        g.Dispose();
    }
}

但是即使我将计时器间隔设置为1,抽奖也会闪烁很多

1 个答案:

答案 0 :(得分:0)

您的代码将仅获得主窗口的句柄。

大多数应用程序具有覆盖该客户区域的其他控件。

您需要获取记事本文本区域的句柄,而不是绘制在客户区域上。

您可以通过

对此进行测试
  • 测试句柄值。如果是0,那么您只有桌面。这可能是您所看到的。

  • 如果使用自己的形式进行测试,则当且仅当绘图区域未被其他控件覆盖时,它才会显示十字架。

枚举获得正确标题的过程也是一个好主意。这是我在另一篇文章中找到的示例:

public static IntPtr WinGetHandle(string wName)
{
    IntPtr hWnd = IntPtr.Zero;
    foreach (Process pList in Process.GetProcesses())
    {
        if (pList.MainWindowTitle.Contains(wName))
        {
            hWnd = pList.MainWindowHandle;
        }
        Console.WriteLine(pList.MainWindowTitle);
    }
    return hWnd;
}

要找到应用程序表面的合适子句柄,将需要更多的试验和错误代码。