Рисование цифр / графики прямо на экране? - PullRequest
0 голосов
/ 17 октября 2011

Я собираю небольшую программу в Visual Basic Express 2010, и часть ее состоит в том, чтобы сделать отсроченный снимок экрана.

У меня работает основной код, у меня Visual Basic откладывает снимок экрана с System.Threading.Thread.CurrentThread.Sleep (5000), но мне нужен способ рисования напрямую на экране количество оставшихся секунд.

Вы знаете, как в Windows, в Свойствах дисплея в Настройках, когда вы нажимаете Идентифицировать, вы получаете огромное количество отображаемых на каждом мониторе?

Я пытаюсь воссоздать это, с обратным отсчетом числа до тех пор, пока не будет сделан снимок экрана, давая пользователю множество уведомлений, чтобы сфокусировать их необходимые приложения на снимке экрана.

Возможно ли это сделать? Или это что-то, что будет чертовски много писать?

Большое спасибо за любую помощь, которую вы можете предложить

1 Ответ

1 голос
/ 17 октября 2011

Создайте Label элемент управления в Form и используйте что-то вроде следующего, чтобы сделать его прозрачным:

Me.TransparencyKey = Color.Gray ' or any other color.
Me.BackColor = TransparencyKey
Me.FormBorderStyle = FormBorderStyle.None

сделает что-то вроде этого:

Screenshot


Чтобы сделать ваше окно прозрачным для мыши, PInvoke GetWindowLong и SetWindowLong:

<DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function GetWindowLong( _
 ByVal hWnd As IntPtr, _
 ByVal nIndex As Integer) As Integer
End Function

<DllImport("user32.dll")> _
Private Shared Function SetWindowLong( _
 ByVal hWnd As IntPtr, _
 ByVal nIndex As Integer, _
 ByVal dwNewLong As IntPtr) As Integer
End Function

Затем в вашем Form_Load() добавьте следующее:

Dim hwnd As IntPtr = Me.Handle
Dim extendedStyle As Integer = GetWindowLong(hwnd, GWL_EXSTYLE)
SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle Or WS_EX_TRANSPARENT)

Константы:

Const WS_EX_TRANSPARENT As Integer = &H20
Const GWL_EXSTYLE As Integer = -20
...