Ok, it is possible. For testing purposes, lets move our form when the focus is on some other window.

Module Code
VB Code:
  1. Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
  2. Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  3. Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
  4. Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
  5. Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
  6. Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
  7. Public Const HC_ACTION = 0
  8. Public Const WM_KEYDOWN = &H100
  9. Public Const WM_KEYUP = &H101
  10. Public Const WM_SYSKEYDOWN = &H104
  11. Public Const WM_SYSKEYUP = &H105
  12. Public Const VK_CONTROL = &H11
  13. Private Const VK_RSHIFT = &HA1
  14. Public Const VK_MENU = &H12
  15. Private Const VK_LEFT = &H25
  16. Private Const VK_RIGHT = &H27
  17. Public Const VK_UP = &H26
  18. Public Const VK_DOWN = &H28
  19. Public Const WH_KEYBOARD_LL = 13
  20. Public Const LLKHF_ALTDOWN = &H20
  21.  
  22.  
  23. Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  24.     Dim intFFN As Integer
  25.    
  26.     If (nCode = HC_ACTION) Then
  27.         If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN Then
  28.             If (GetKeyState(VK_CONTROL) And &H8000) <> 0 Then
  29.                 If (GetKeyState(VK_MENU) And &H8000) <> 0 Then
  30.                     If (GetKeyState(VK_UP) And &H8000) <> 0 Then
  31.                         With Form1
  32.                             .Move .Left, .Top - 100
  33.                         End With
  34.                     ElseIf (GetKeyState(VK_DOWN) And &H8000) <> 0 Then
  35.                         With Form1
  36.                             .Move .Left, .Top + 100
  37.                         End With
  38.                     ElseIf (GetKeyState(VK_LEFT) And &H8000) <> 0 Then
  39.                         With Form1
  40.                             .Move .Left - 100, .Top
  41.                         End With
  42.                     ElseIf (GetKeyState(VK_RIGHT) And &H8000) <> 0 Then
  43.                         With Form1
  44.                             .Move .Left + 100, .Top
  45.                         End With
  46.                     End If
  47.                 End If
  48.             End If
  49.         End If
  50.     End If
  51.     KeyboardProc = CallNextHookEx(0, nCode, wParam, ByVal lParam)
  52. End Function
Form Code
VB Code:
  1. Dim m_lngKeyboad As Long
  2.  
  3. Private Sub Form_Unload(Cancel As Integer)
  4.     If m_lngKeyboad <> 0 Then UnhookWindowsHookEx m_lngKeyboad
  5. End Sub
  6.  
  7. Private Sub Form_Load()
  8.     m_lngKeyboad = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KeyboardProc, App.hInstance, 0)
  9. End Sub
By pressing CTRL+ALT+UP, CTRL+ALT+DOWN, CTRL+ALT+LEFT, CTRL+ALT+RIGHT - the form will be moved accordingly even if you have the focus on some other window.