OriginalGriff
Первое, что следует отметить, - это плохой код: растровые изображения и графические контексты-это ограниченные ресурсы, и вы несете ответственность за их утилизацию, когда закончите с ними. Особенно в случае графических объектов.
Я бы настоятельно рекомендовал вам использовать using
блок, если вы собираетесь звонить CreateGraphics
:
using (Graphics g = this.CreateGraphics())
{
... use g here ...
}
... g is automatically discarded here
На самом деле, вы можете ускорить процесс и получить точно такие же результаты без каких-либо растровых изображений:
private void T_Tick(object sender, EventArgs e)
{
using (Graphics g = myPictureBox.CreateGraphics())
{
g.CopyFromScreen(MousePosition.X - 100, MousePosition.Y - 10, 0, 0, new Size(300, 300));
}
}
Но... "курсора клавиатуры" не существует; курсор, который показывает, когда пользователь может печатать, не совпадает с курсором мыши - и самое важное отличие заключается в том, что существует не только один для всей системы, каждый элемент управления пользовательским вводом имеет свою собственную каретку, но на самом деле отображается только сфокусированный.
Поэтому, чтобы узнать, когда он переместился, вам в основном придется подключаться к каждому входному элементу управления в системе, а это чрезвычайно сложно в управляемом языке, таком как C# (потому что у вас нет прямого доступа к ОС)
Я бы предположил, что вам придется потратить много времени на то, чтобы заставить это работать, и даже тогда ... там будут приложения, где ваш код не работает, потому что они не используют "стандартные элементы управления" любой формы. Так что он не обязательно будет надежным...