📄 jwawincon.pas
字号:
{******************************************************************************}
{ }
{ Console Applications API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: wincon.h, released June 2000. The original Pascal }
{ code is: WinCon.pas, released December 2000. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm@chello.nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI home }
{ page, located at http://delphi-jedi.org or my personal homepage located at }
{ http://members.chello.nl/m.vanbrakel2 }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
unit JwaWinCon;
{$WEAKPACKAGEUNIT}
{$HPPEMIT ''}
{$HPPEMIT '#include "WinCon.h"'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
interface
uses
JwaWinBase, JwaWinType;
type
PCOORD = ^COORD;
{$EXTERNALSYM PCOORD}
_COORD = record
X: SHORT;
Y: SHORT;
end;
{$EXTERNALSYM _COORD}
COORD = _COORD;
{$EXTERNALSYM COORD}
TCoord = _COORD;
PSMALL_RECT = ^SMALL_RECT;
{$EXTERNALSYM PSMALL_RECT}
_SMALL_RECT = record
Left: SHORT;
Top: SHORT;
Right: SHORT;
Bottom: SHORT;
end;
{$EXTERNALSYM _SMALL_RECT}
SMALL_RECT = _SMALL_RECT;
{$EXTERNALSYM SMALL_RECT}
TSmallRect = SMALL_RECT;
PSmallRect = PSMALL_RECT;
TCharUnion = record
case Integer of
0: (UnicodeChar: WCHAR);
1: (AsciiChar: CHAR);
end;
PKEY_EVENT_RECORD = ^KEY_EVENT_RECORD;
{$EXTERNALSYM PKEY_EVENT_RECORD}
_KEY_EVENT_RECORD = record
bKeyDown: BOOL;
wRepeatCount: WORD;
wVirtualKeyCode: WORD;
wVirtualScanCode: WORD;
uChar: TCharUnion;
dwControlKeyState: DWORD;
end;
{$EXTERNALSYM _KEY_EVENT_RECORD}
KEY_EVENT_RECORD = _KEY_EVENT_RECORD;
{$EXTERNALSYM KEY_EVENT_RECORD}
TKeyEventRecord = KEY_EVENT_RECORD;
PKeyEventRecord = PKEY_EVENT_RECORD;
//
// ControlKeyState flags
//
const
RIGHT_ALT_PRESSED = $0001; // the right alt key is pressed.
{$EXTERNALSYM RIGHT_ALT_PRESSED}
LEFT_ALT_PRESSED = $0002; // the left alt key is pressed.
{$EXTERNALSYM LEFT_ALT_PRESSED}
RIGHT_CTRL_PRESSED = $0004; // the right ctrl key is pressed.
{$EXTERNALSYM RIGHT_CTRL_PRESSED}
LEFT_CTRL_PRESSED = $0008; // the left ctrl key is pressed.
{$EXTERNALSYM LEFT_CTRL_PRESSED}
SHIFT_PRESSED = $0010; // the shift key is pressed.
{$EXTERNALSYM SHIFT_PRESSED}
NUMLOCK_ON = $0020; // the numlock light is on.
{$EXTERNALSYM NUMLOCK_ON}
SCROLLLOCK_ON = $0040; // the scrolllock light is on.
{$EXTERNALSYM SCROLLLOCK_ON}
CAPSLOCK_ON = $0080; // the capslock light is on.
{$EXTERNALSYM CAPSLOCK_ON}
ENHANCED_KEY = $0100; // the key is enhanced.
{$EXTERNALSYM ENHANCED_KEY}
NLS_DBCSCHAR = $00010000; // DBCS for JPN: SBCS/DBCS mode.
{$EXTERNALSYM NLS_DBCSCHAR}
NLS_ALPHANUMERIC = $00000000; // DBCS for JPN: Alphanumeric mode.
{$EXTERNALSYM NLS_ALPHANUMERIC}
NLS_KATAKANA = $00020000; // DBCS for JPN: Katakana mode.
{$EXTERNALSYM NLS_KATAKANA}
NLS_HIRAGANA = $00040000; // DBCS for JPN: Hiragana mode.
{$EXTERNALSYM NLS_HIRAGANA}
NLS_ROMAN = $00400000; // DBCS for JPN: Roman/Noroman mode.
{$EXTERNALSYM NLS_ROMAN}
NLS_IME_CONVERSION = $00800000; // DBCS for JPN: IME conversion.
{$EXTERNALSYM NLS_IME_CONVERSION}
NLS_IME_DISABLE = $20000000; // DBCS for JPN: IME enable/disable.
{$EXTERNALSYM NLS_IME_DISABLE}
type
PMOUSE_EVENT_RECORD = ^MOUSE_EVENT_RECORD;
{$EXTERNALSYM PMOUSE_EVENT_RECORD}
_MOUSE_EVENT_RECORD = record
dwMousePosition: COORD;
dwButtonState: DWORD;
dwControlKeyState: DWORD;
dwEventFlags: DWORD;
end;
{$EXTERNALSYM _MOUSE_EVENT_RECORD}
MOUSE_EVENT_RECORD = _MOUSE_EVENT_RECORD;
{$EXTERNALSYM MOUSE_EVENT_RECORD}
TMouseEventRecord = MOUSE_EVENT_RECORD;
PMouseEventRecord = PMOUSE_EVENT_RECORD;
//
// ButtonState flags
//
const
FROM_LEFT_1ST_BUTTON_PRESSED = $0001;
{$EXTERNALSYM FROM_LEFT_1ST_BUTTON_PRESSED}
RIGHTMOST_BUTTON_PRESSED = $0002;
{$EXTERNALSYM RIGHTMOST_BUTTON_PRESSED}
FROM_LEFT_2ND_BUTTON_PRESSED = $0004;
{$EXTERNALSYM FROM_LEFT_2ND_BUTTON_PRESSED}
FROM_LEFT_3RD_BUTTON_PRESSED = $0008;
{$EXTERNALSYM FROM_LEFT_3RD_BUTTON_PRESSED}
FROM_LEFT_4TH_BUTTON_PRESSED = $0010;
{$EXTERNALSYM FROM_LEFT_4TH_BUTTON_PRESSED}
//
// EventFlags
//
MOUSE_MOVED = $0001;
{$EXTERNALSYM MOUSE_MOVED}
DOUBLE_CLICK = $0002;
{$EXTERNALSYM DOUBLE_CLICK}
MOUSE_WHEELED = $0004;
{$EXTERNALSYM MOUSE_WHEELED}
type
PWINDOW_BUFFER_SIZE_RECORD = ^WINDOW_BUFFER_SIZE_RECORD;
{$EXTERNALSYM PWINDOW_BUFFER_SIZE_RECORD}
_WINDOW_BUFFER_SIZE_RECORD = record
dwSize: COORD;
end;
{$EXTERNALSYM _WINDOW_BUFFER_SIZE_RECORD}
WINDOW_BUFFER_SIZE_RECORD = _WINDOW_BUFFER_SIZE_RECORD;
{$EXTERNALSYM WINDOW_BUFFER_SIZE_RECORD}
TWindowBufferSizeRecord = WINDOW_BUFFER_SIZE_RECORD;
PWindowBufferSizeRecord = PWINDOW_BUFFER_SIZE_RECORD;
PMENU_EVENT_RECORD = ^MENU_EVENT_RECORD;
{$EXTERNALSYM PMENU_EVENT_RECORD}
_MENU_EVENT_RECORD = record
dwCommandId: UINT;
end;
{$EXTERNALSYM _MENU_EVENT_RECORD}
MENU_EVENT_RECORD = _MENU_EVENT_RECORD;
{$EXTERNALSYM MENU_EVENT_RECORD}
TMenuEventRecord = MENU_EVENT_RECORD;
PMenuEventRecord = PMENU_EVENT_RECORD;
PFOCUS_EVENT_RECORD = ^FOCUS_EVENT_RECORD;
{$EXTERNALSYM PFOCUS_EVENT_RECORD}
_FOCUS_EVENT_RECORD = record
bSetFocus: BOOL;
end;
{$EXTERNALSYM _FOCUS_EVENT_RECORD}
FOCUS_EVENT_RECORD = _FOCUS_EVENT_RECORD;
{$EXTERNALSYM FOCUS_EVENT_RECORD}
TFocusEventRecord = FOCUS_EVENT_RECORD;
PFocusEventRecord = PFOCUS_EVENT_RECORD;
PINPUT_RECORD = ^INPUT_RECORD;
{$EXTERNALSYM PINPUT_RECORD}
_INPUT_RECORD = record
EventType: WORD;
case Integer of
0: (KeyEvent: KEY_EVENT_RECORD);
1: (MouseEvent: MOUSE_EVENT_RECORD);
2: (WindowBufferSizeEvent: WINDOW_BUFFER_SIZE_RECORD);
3: (MenuEvent: MENU_EVENT_RECORD);
4: (FocusEvent: FOCUS_EVENT_RECORD);
end;
{$EXTERNALSYM _INPUT_RECORD}
INPUT_RECORD = _INPUT_RECORD;
{$EXTERNALSYM INPUT_RECORD}
TInputRecord = INPUT_RECORD;
PInputRecord = PINPUT_RECORD;
//
// EventType flags:
//
const
KEY_EVENT = $0001; // Event contains key event record
{$EXTERNALSYM KEY_EVENT}
MOUSE_EVENT = $0002; // Event contains mouse event record
{$EXTERNALSYM MOUSE_EVENT}
WINDOW_BUFFER_SIZE_EVENT = $0004; // Event contains window change event record
{$EXTERNALSYM WINDOW_BUFFER_SIZE_EVENT}
MENU_EVENT = $0008; // Event contains menu event record
{$EXTERNALSYM MENU_EVENT}
FOCUS_EVENT = $0010; // event contains focus change
{$EXTERNALSYM FOCUS_EVENT}
type
PCHAR_INFO = ^CHAR_INFO;
{$EXTERNALSYM PCHAR_INFO}
_CHAR_INFO = record
uChar: TCharUnion;
Attributes: WORD;
end;
{$EXTERNALSYM _CHAR_INFO}
CHAR_INFO = _CHAR_INFO;
{$EXTERNALSYM CHAR_INFO}
TCharInfo = CHAR_INFO;
PCharInfo = PCHAR_INFO;
//
// Attributes flags:
//
const
FOREGROUND_BLUE = $0001; // text color contains blue.
{$EXTERNALSYM FOREGROUND_BLUE}
FOREGROUND_GREEN = $0002; // text color contains green.
{$EXTERNALSYM FOREGROUND_GREEN}
FOREGROUND_RED = $0004; // text color contains red.
{$EXTERNALSYM FOREGROUND_RED}
FOREGROUND_INTENSITY = $0008; // text color is intensified.
{$EXTERNALSYM FOREGROUND_INTENSITY}
BACKGROUND_BLUE = $0010; // background color contains blue.
{$EXTERNALSYM BACKGROUND_BLUE}
BACKGROUND_GREEN = $0020; // background color contains green.
{$EXTERNALSYM BACKGROUND_GREEN}
BACKGROUND_RED = $0040; // background color contains red.
{$EXTERNALSYM BACKGROUND_RED}
BACKGROUND_INTENSITY = $0080; // background color is intensified.
{$EXTERNALSYM BACKGROUND_INTENSITY}
COMMON_LVB_LEADING_BYTE = $0100; // Leading Byte of DBCS
{$EXTERNALSYM COMMON_LVB_LEADING_BYTE}
COMMON_LVB_TRAILING_BYTE = $0200; // Trailing Byte of DBCS
{$EXTERNALSYM COMMON_LVB_TRAILING_BYTE}
COMMON_LVB_GRID_HORIZONTAL = $0400; // DBCS: Grid attribute: top horizontal.
{$EXTERNALSYM COMMON_LVB_GRID_HORIZONTAL}
COMMON_LVB_GRID_LVERTICAL = $0800; // DBCS: Grid attribute: left vertical.
{$EXTERNALSYM COMMON_LVB_GRID_LVERTICAL}
COMMON_LVB_GRID_RVERTICAL = $1000; // DBCS: Grid attribute: right vertical.
{$EXTERNALSYM COMMON_LVB_GRID_RVERTICAL}
COMMON_LVB_REVERSE_VIDEO = $4000; // DBCS: Reverse fore/back ground attribute.
{$EXTERNALSYM COMMON_LVB_REVERSE_VIDEO}
COMMON_LVB_UNDERSCORE = $8000; // DBCS: Underscore.
{$EXTERNALSYM COMMON_LVB_UNDERSCORE}
COMMON_LVB_SBCSDBCS = $0300; // SBCS or DBCS flag.
{$EXTERNALSYM COMMON_LVB_SBCSDBCS}
type
PCONSOLE_SCREEN_BUFFER_INFO = ^CONSOLE_SCREEN_BUFFER_INFO;
{$EXTERNALSYM PCONSOLE_SCREEN_BUFFER_INFO}
_CONSOLE_SCREEN_BUFFER_INFO = record
dwSize: COORD;
dwCursorPosition: COORD;
wAttributes: WORD;
srWindow: SMALL_RECT;
dwMaximumWindowSize: COORD;
end;
{$EXTERNALSYM _CONSOLE_SCREEN_BUFFER_INFO}
CONSOLE_SCREEN_BUFFER_INFO = _CONSOLE_SCREEN_BUFFER_INFO;
{$EXTERNALSYM CONSOLE_SCREEN_BUFFER_INFO}
TConsoleScreenBufferInfo = CONSOLE_SCREEN_BUFFER_INFO;
PConsoleScreenBufferInfo = PCONSOLE_SCREEN_BUFFER_INFO;
PCONSOLE_CURSOR_INFO = ^CONSOLE_CURSOR_INFO;
{$EXTERNALSYM PCONSOLE_CURSOR_INFO}
_CONSOLE_CURSOR_INFO = record
dwSize: DWORD;
bVisible: BOOL;
end;
{$EXTERNALSYM _CONSOLE_CURSOR_INFO}
CONSOLE_CURSOR_INFO = _CONSOLE_CURSOR_INFO;
{$EXTERNALSYM CONSOLE_CURSOR_INFO}
TConsoleCursorInfo = CONSOLE_CURSOR_INFO;
PConsoleCursorInfo = PCONSOLE_CURSOR_INFO;
_CONSOLE_FONT_INFO = record
nFont: DWORD;
dwFontSize: COORD;
end;
{$EXTERNALSYM _CONSOLE_FONT_INFO}
CONSOLE_FONT_INFO = _CONSOLE_FONT_INFO;
{$EXTERNALSYM CONSOLE_FONT_INFO}
PCONSOLE_FONT_INFO = ^CONSOLE_FONT_INFO;
{$EXTERNALSYM PCONSOLE_FONT_INFO}
TConsoleFontInfo = CONSOLE_FONT_INFO;
PConsoleFontInfo = PCONSOLE_FONT_INFO;
_CONSOLE_SELECTION_INFO = record
dwFlags: DWORD;
dwSelectionAnchor: COORD;
srSelection: SMALL_RECT;
end;
{$EXTERNALSYM _CONSOLE_SELECTION_INFO}
CONSOLE_SELECTION_INFO = _CONSOLE_SELECTION_INFO;
{$EXTERNALSYM CONSOLE_SELECTION_INFO}
PCONSOLE_SELECTION_INFO = ^CONSOLE_SELECTION_INFO;
{$EXTERNALSYM PCONSOLE_SELECTION_INFO}
TConsoleSelectionInfo = CONSOLE_SELECTION_INFO;
PConsoleSelectionInfo = PCONSOLE_SELECTION_INFO;
//
// Selection flags
//
const
CONSOLE_NO_SELECTION = $0000;
{$EXTERNALSYM CONSOLE_NO_SELECTION}
CONSOLE_SELECTION_IN_PROGRESS = $0001; // selection has begun
{$EXTERNALSYM CONSOLE_SELECTION_IN_PROGRESS}
CONSOLE_SELECTION_NOT_EMPTY = $0002; // non-null select rectangle
{$EXTERNALSYM CONSOLE_SELECTION_NOT_EMPTY}
CONSOLE_MOUSE_SELECTION = $0004; // selecting with mouse
{$EXTERNALSYM CONSOLE_MOUSE_SELECTION}
CONSOLE_MOUSE_DOWN = $0008; // mouse is down
{$EXTERNALSYM CONSOLE_MOUSE_DOWN}
//
// typedef for ctrl-c handler routines
//
type
PHANDLER_ROUTINE = function (CtrlType: DWORD): BOOL; stdcall;
{$EXTERNALSYM PHANDLER_ROUTINE}
THandlerRoutine = PHANDLER_ROUTINE;
const
CTRL_C_EVENT = 0;
{$EXTERNALSYM CTRL_C_EVENT}
CTRL_BREAK_EVENT = 1;
{$EXTERNALSYM CTRL_BREAK_EVENT}
CTRL_CLOSE_EVENT = 2;
{$EXTERNALSYM CTRL_CLOSE_EVENT}
// 3 is reserved!
// 4 is reserved!
CTRL_LOGOFF_EVENT = 5;
{$EXTERNALSYM CTRL_LOGOFF_EVENT}
CTRL_SHUTDOWN_EVENT = 6;
{$EXTERNALSYM CTRL_SHUTDOWN_EVENT}
//
// Input Mode flags:
//
ENABLE_PROCESSED_INPUT = $0001;
{$EXTERNALSYM ENABLE_PROCESSED_INPUT}
ENABLE_LINE_INPUT = $0002;
{$EXTERNALSYM ENABLE_LINE_INPUT}
ENABLE_ECHO_INPUT = $0004;
{$EXTERNALSYM ENABLE_ECHO_INPUT}
ENABLE_WINDOW_INPUT = $0008;
{$EXTERNALSYM ENABLE_WINDOW_INPUT}
ENABLE_MOUSE_INPUT = $0010;
{$EXTERNALSYM ENABLE_MOUSE_INPUT}
//
// Output Mode flags:
//
ENABLE_PROCESSED_OUTPUT = $0001;
{$EXTERNALSYM ENABLE_PROCESSED_OUTPUT}
ENABLE_WRAP_AT_EOL_OUTPUT = $0002;
{$EXTERNALSYM ENABLE_WRAP_AT_EOL_OUTPUT}
//
// direct API definitions.
//
function PeekConsoleInputA(hConsoleInput: HANDLE; lpBuffer: PINPUT_RECORD;
nLength: DWORD; var lpNumberOfEventsRead: DWORD): BOOL; stdcall;
{$EXTERNALSYM PeekConsoleInputA}
function PeekConsoleInputW(hConsoleInput: HANDLE; lpBuffer: PINPUT_RECORD;
nLength: DWORD; var lpNumberOfEventsRead: DWORD): BOOL; stdcall;
{$EXTERNALSYM PeekConsoleInputW}
{$IFDEF UNICODE}
function PeekConsoleInput(hConsoleInput: HANDLE; lpBuffer: PINPUT_RECORD;
nLength: DWORD; var lpNumberOfEventsRead: DWORD): BOOL; stdcall;
{$EXTERNALSYM PeekConsoleInput}
{$ELSE}
function PeekConsoleInput(hConsoleInput: HANDLE; lpBuffer: PINPUT_RECORD;
nLength: DWORD; var lpNumberOfEventsRead: DWORD): BOOL; stdcall;
{$EXTERNALSYM PeekConsoleInput}
{$ENDIF}
function ReadConsoleInputA(hConsoleInput: HANDLE; lpBuffer: PINPUT_RECORD;
nLength: DWORD; var lpNumberOfEventsRead: DWORD): BOOL; stdcall;
{$EXTERNALSYM ReadConsoleInputA}
function ReadConsoleInputW(hConsoleInput: HANDLE; lpBuffer: PINPUT_RECORD;
nLength: DWORD; var lpNumberOfEventsRead: DWORD): BOOL; stdcall;
{$EXTERNALSYM ReadConsoleInputW}
{$IFDEF UNICODE}
function ReadConsoleInput(hConsoleInput: HANDLE; lpBuffer: PINPUT_RECORD;
nLength: DWORD; var lpNumberOfEventsRead: DWORD): BOOL; stdcall;
{$EXTERNALSYM ReadConsoleInput}
{$ELSE}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -