This uses the inbuilt compilers in Windows 10 - there are three VB.NET compilers and three C# compilers - just copy each text file into the same folder and double click the batch file to make the program.
Window Manipulation Posts
- Hide/Show Window
- Get Windows Rect
- Change Window Title
- Set a Window On Top or Not
- List All Windows
- Moves a Window
- Changes the Size of a Window
- Assigns a hotkey to a window
- Removes a window from the taskbar
- Starts a graphical program and returns when any of its windows is waiting for user input.
There are two types of hotkeys in Windows. RegisterHotkey requires a program to expect it. WM_SetHotkey is supported by the default behaviour of a window so the program doesn't need to be aware of it.
Hotkeys are system keys so work all the time. To take the example below, using sendkeys to send Ctrl+N to any application will activate Notepad. This is one way around restrictions on setting the active window.
REM HotkeyToWindow.bat REM This file compiles TopMost.vb to TopMost.exe REM HotkeyToWindow.exe sets a hotkey to activate the window REM To use REM HotkeyToWindow <Modifier> <virtualkey> <Windowtitle> REM E.G. REM To assign Ctrl (2) and N key (78) to notepad REM HotkeyToWindow 2 78 Untitled - Notepad REM To remove the hotkey send 0 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /target:winexe /out:"%~dp0\HotkeyToWindow.exe" "%~dp0\HotkeyToWindow.vb" pause
'HotkeyToWindow.vb Imports System Imports System.IO Imports System.Runtime.InteropServices Imports Microsoft.Win32 Public Module TopMost Public Declare UNICODE Function FindWindowW Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr Public Declare UNICODE Function SendMessageInt Lib "user32" alias "SendMessageW" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, lParam as Integer) As Integer Public Const WM_SETHOTKEY = &h32 Public const HOTKEYF_SHIFT = 1 Public const HOTKEYF_CONTROL = 2 Public const HOTKEYF_ALT = 4 Public const HOTKEYF_EXT = 8 Sub Main() On Error Resume Next Dim hWindows as IntPtr Dim CmdLine as String Dim Ret as Integer Dim vKey as UInteger CmdLine = Command() Dim A as String() A = Split(CmdLine, Chr(32), 3, 1) hwindows = FindWindowW(vbNullString, A(2)) If hwindows = 0 then Msgbox(A(2) & " cannot be found.") Else vKey = (cByte(A(0)) * &h100) vKey = vKey + cByte(A(1)) Ret = SendMessageInt(hWindows, WM_SETHOTKEY, vkey, 0) If Ret = -1 then MsgBox("Invalid Hotkey") If Ret = 0 then MsgBox("Invalid Window") End If End Sub End Module
Modifiers - add them together to use more than one
SHIFT = 1 CONTROL = 2 ALT = 4 EXT = 8Virtual Keycodes
Key | Virtual Code Decimal |
Virtual Code Hexadecimal |
Left mouse button | 1 | 0x1 |
Right mouse button | 2 | 0x2 |
Control-break processing | 3 | 0x3 |
Middle mouse button (three-button mouse) | 4 | 0x4 |
X1 mouse button | 5 | 0x5 |
X2 mouse button | 6 | 0x6 |
Undefined | 7 | 0x7 |
Backspace | 8 | 0x8 |
Tab | 9 | 0x9 |
Clear | 12 | 0xc |
Enter | 13 | 0xd |
Shift | 16 | 0x10 |
Ctrl | 17 | 0x11 |
Alt | 18 | 0x12 |
Pause | 19 | 0x13 |
Caps Lock | 20 | 0x14 |
IME Kana mode | 21 | 0x15 |
Undefined | 22 | 0x16 |
IME Junja mode | 23 | 0x17 |
IME final mode | 24 | 0x18 |
IME Hanja mode | 25 | 0x19 |
Esc | 27 | 0x1b |
IME Convert | 28 | 0x1c |
IME Nonconvert | 29 | 0x1d |
IME Accept | 30 | 0x1e |
IME Mode Change Request | 31 | 0x1f |
Spacebar | 32 | 0x20 |
Page Up | 33 | 0x21 |
Page Down | 34 | 0x22 |
End | 35 | 0x23 |
Home | 36 | 0x24 |
Left Arrow | 37 | 0x25 |
Up Arrow | 38 | 0x26 |
Right Arrow | 39 | 0x27 |
Down Arrow | 40 | 0x28 |
Select | 41 | 0x29 |
42 | 0x2a | |
Execute | 43 | 0x2b |
Print Screen | 44 | 0x2c |
Ins | 45 | 0x2d |
Del | 46 | 0x2e |
Help | 47 | 0x2f |
0 | 48 | 0x30 |
1 | 49 | 0x31 |
2 | 50 | 0x32 |
3 | 51 | 0x33 |
4 | 52 | 0x34 |
5 | 53 | 0x35 |
6 | 54 | 0x36 |
7 | 55 | 0x37 |
8 | 56 | 0x38 |
9 | 57 | 0x39 |
A | 65 | 0x41 |
B | 66 | 0x42 |
C | 67 | 0x43 |
D | 68 | 0x44 |
E | 69 | 0x45 |
F | 70 | 0x46 |
G | 71 | 0x47 |
H | 72 | 0x48 |
I | 73 | 0x49 |
J | 74 | 0x4a |
K | 75 | 0x4b |
L | 76 | 0x4c |
M | 77 | 0x4d |
N | 78 | 0x4e |
O | 79 | 0x4f |
P | 80 | 0x50 |
Q | 81 | 0x51 |
R | 82 | 0x52 |
S | 83 | 0x53 |
T | 84 | 0x54 |
U | 85 | 0x55 |
V | 86 | 0x56 |
W | 87 | 0x57 |
X | 88 | 0x58 |
Y | 89 | 0x59 |
Z | 90 | 0x5a |
Left Windows key | 91 | 0x5b |
Right Windows key | 92 | 0x5c |
Applications key | 93 | 0x5d |
Reserved | 94 | 0x5e |
Computer Sleep | 95 | 0x5f |
Numeric keypad 0 | 96 | 0x60 |
Numeric keypad 1 | 97 | 0x61 |
Numeric keypad 2 | 98 | 0x62 |
Numeric keypad 3 | 99 | 0x63 |
Numeric keypad 4 | 100 | 0x64 |
Numeric keypad 5 | 101 | 0x65 |
Numeric keypad 6 | 102 | 0x66 |
Numeric keypad 7 | 103 | 0x67 |
Numeric keypad 8 | 104 | 0x68 |
Numeric keypad 9 | 105 | 0x69 |
Multiply | 106 | 0x6a |
Add | 107 | 0x6b |
Separator | 108 | 0x6c |
Subtract | 109 | 0x6d |
Decimal | 110 | 0x6e |
Divide | 111 | 0x6f |
F1 | 112 | 0x70 |
F2 | 113 | 0x71 |
F3 | 114 | 0x72 |
F4 | 115 | 0x73 |
F5 | 116 | 0x74 |
F6 | 117 | 0x75 |
F7 | 118 | 0x76 |
F8 | 119 | 0x77 |
F9 | 120 | 0x78 |
F10 | 121 | 0x79 |
F11 | 122 | 0x7a |
F12 | 123 | 0x7b |
F13 | 124 | 0x7c |
F14 | 125 | 0x7d |
F15 | 126 | 0x7e |
F16 | 127 | 0x7f |
F17 | 128 | 0x80 |
F18 | 129 | 0x81 |
F19 | 130 | 0x82 |
F20 | 131 | 0x83 |
F21 | 132 | 0x84 |
F22 | 133 | 0x85 |
F23 | 134 | 0x86 |
F24 | 135 | 0x87 |
Num Lock | 144 | 0x90 |
Scroll Lock | 145 | 0x91 |
Left Shift | 160 | 0xa0 |
Right Shift | 161 | 0xa1 |
Left Control | 162 | 0xa2 |
Right Control | 163 | 0xa3 |
Left Menu | 164 | 0xa4 |
Right Menu | 165 | 0xa5 |
Browser Back | 166 | 0xa6 |
Browser Forward | 167 | 0xa7 |
Browser Refresh | 168 | 0xa8 |
Browser Stop | 169 | 0xa9 |
Browser Search | 170 | 0xaa |
Browser Favorites | 171 | 0xab |
Browser Start And Home | 172 | 0xac |
Volume Mute | 173 | 0xad |
Volume Down | 174 | 0xae |
Volume Up | 175 | 0xaf |
Next Track | 176 | 0xb0 |
Previous Track | 177 | 0xb1 |
Stop Media | 178 | 0xb2 |
Play/Pause Media | 179 | 0xb3 |
Start Mail | 180 | 0xb4 |
Select Media | 181 | 0xb5 |
Start Application 1 | 182 | 0xb6 |
Start Application 2 | 183 | 0xb7 |
; : | 186 | 0xba |
+ | 187 | 0xbb |
, | 188 | 0xbc |
- | 189 | 0xbd |
. | 190 | 0xbe |
/ ? | 191 | 0xbf |
` ~ | 192 | 0xc0 |
[ { | 219 | 0xdb |
\ | | 220 | 0xdc |
] } | 221 | 0xdd |
' " | 222 | 0xde |
223 | 0xdf | |
Reserved | 224 | 0xe0 |
Oem Specific | 225 | 0xe1 |
Either The Angle Bracket Key Or The Backslash Key On The Rt 102-Key Keyboard | 226 | 0xe2 |
Windows 95/98/Me, Windows Nt 4.0, Ime Process | 229 | 0xe5 |
Used to pass unicode characters as if they were keystrokes | 231 | 0xe7 |
Attn | 246 | 0xf6 |
Crsel | 247 | 0xf7 |
Exsel | 248 | 0xf8 |
Erase Eof | 249 | 0xf9 |
Play | 250 | 0xfa |
Zoom | 251 | 0xfb |
Pa1 | 253 | 0xfd |
Clear | 254 | 0xfe |