Работаем с функциями windows: (пример программы из области приколов: Догони кнопку Пуск. Для выхода из режима демонстрации кнопка Esc)Option Explicit
'Функция для изменения координат и размера окна
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'Необходимые константы
Const SWP_NOSIZE = &H1 'Сохранить текущие размеры
Const SWP_NOMOVE = &H2 'Сохранить текущее положение
'Функция для получения окна первого уровня
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Функция для получения дочернего окна
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
'Определяет текущую позицию курсора
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
'Структура POINTAPI
Private Type POINTAPI
x As Long
y As Long
End Type
'Функция определяет манипулятор окна по координатам мыши
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
'Функция определяет манипулятор рабочего стола
Private Declare Function GetDesktopWindow Lib "user32" () As Long
'Функция задаёт окну нового родителя
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
'Функция отлавливает нажатия клавиатуры вне программы
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Const VK_ESCAPE = &H1B
Dim hnd As Long
Private Sub Form_Load()
'Кнопка Пуск является дочерним окном панели задач
'Кнопка Пуск относится к классу "BUTTON", Панель задач относится к классу "Shell_TrayWnd"
'Ищем манипулятор панели задач
hnd = FindWindow("Shell_TrayWnd", vbNullString)
'Ищем манипулятор кнопки пуск
hnd = FindWindowEx(hnd, 0, "BUTTON", vbNullString)
End Sub
Private Sub tmrAntiStart_Timer()
Dim hwnd As Long
Dim Curs As POINTAPI
'Определяем координаты курсора
GetCursorPos Curs
'Определяем манипулятор окна
hwnd = WindowFromPoint(Curs.x, Curs.y)
If hnd = hwnd Then
'Задаём для Пуска новые координаты
SetWindowPos hwnd, 0, Int(800 * Rnd + 1), Int(600 * Rnd + 1), 0, 0, SWP_NOSIZE
'Выносим Пуск на Десктоп
SetParent hnd, GetDesktopWindow
End If
'Отлавливаем нажатие клавиатуры
If GetAsyncKeyState(VK_ESCAPE) Then
SetParent hnd, FindWindow("Shell_TrayWnd", vbNullString) 'Возваращаем Пуск на Родину!
SetWindowPos hnd, 0, 0, 0, 0, 0, SWP_NOSIZE
End
End If
End Sub