Created
February 6, 2022 00:30
-
-
Save jarroddavis68/8328c6ee20387484dc329c5697611627 to your computer and use it in GitHub Desktop.
Startup/Shutdown Console
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
procedure PostKey(aKey: word; const aShift: TShiftState; aSpeciaKey: Boolean); | |
{ ************************************************************ | |
* Procedure PostKey | |
* | |
* Parameters: | |
* key : virtual keycode of the key to send. For printable | |
* keys this is simply the ANSI code (Ord(character)). | |
* shift : state of the modifier keys. This is a set, so you | |
* can set several of these keys (shift, control, alt, | |
* mouse buttons) in tandem. The TShiftState type is | |
* declared in the Classes Unit. | |
* specialkey: normally this should be False. Set it to True to | |
* specify a key on the numeric keypad, for example. | |
* Description: | |
* Uses keybd_event to manufacture a series of key events matching | |
* the passed parameters. The events go to the control with focus. | |
* Note that for characters key is always the upper-case version of | |
* the character. Sending without any modifier keys will result in | |
* a lower-case character, sending it with [ssShift] will result | |
* in an upper-case character! | |
************************************************************ } | |
type | |
TShiftKeyInfo = record | |
shift: Byte; | |
vkey: Byte; | |
end; | |
byteset = set of 0 .. 7; | |
const | |
shiftkeys: array [1 .. 3] of TShiftKeyInfo = ((shift: Ord(ssCtrl); | |
vkey: VK_CONTROL), (shift: Ord(ssShift); vkey: VK_SHIFT), | |
(shift: Ord(ssAlt); vkey: VK_MENU)); | |
var | |
flag: DWORD; | |
bShift: byteset absolute aShift; | |
i: Integer; | |
begin | |
for i := 1 to 3 do | |
begin | |
if shiftkeys[i].shift in bShift then | |
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0); | |
end; | |
if aSpeciaKey then | |
flag := KEYEVENTF_EXTENDEDKEY | |
else | |
flag := 0; | |
keybd_event(aKey, MapVirtualKey(aKey, 0), flag, 0); | |
flag := flag or KEYEVENTF_KEYUP; | |
keybd_event(aKey, MapVirtualKey(aKey, 0), flag, 0); | |
for i := 3 downto 1 do | |
begin | |
if shiftkeys[i].shift in bShift then | |
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), | |
KEYEVENTF_KEYUP, 0); | |
end; | |
end; | |
procedure StartupConsole; | |
begin | |
if not AttachConsole(ATTACH_PARENT_PROCESS) then | |
AllocConsole; | |
end; | |
procedure ShutdownConsole; | |
begin | |
FreeConsole; | |
PostKey(VK_RETURN, [], False); | |
end; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment