我正在计时器中使用此功能:
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,抽奖也会闪烁很多
答案 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;
}
要找到应用程序表面的合适子句柄,将需要更多的试验和错误代码。