This commit introduces all of the Windows Terminal and Console Host source, under the MIT license.
365 lines
8.1 KiB
C++
365 lines
8.1 KiB
C++
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
|
|
#include "precomp.h"
|
|
|
|
#include "OneCoreDelay.hpp"
|
|
|
|
BOOLEAN
|
|
__stdcall
|
|
OneCoreDelay::IsIsWindowPresent()
|
|
{
|
|
#ifdef __INSIDE_WINDOWS
|
|
return ::IsIsWindowPresent();
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
|
|
BOOLEAN
|
|
__stdcall
|
|
OneCoreDelay::IsGetSystemMetricsPresent()
|
|
{
|
|
#ifdef __INSIDE_WINDOWS
|
|
return ::IsGetSystemMetricsPresent();
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
|
|
BOOLEAN
|
|
__stdcall
|
|
OneCoreDelay::IsPostMessageWPresent()
|
|
{
|
|
#ifdef __INSIDE_WINDOWS
|
|
return ::IsPostMessageWPresent();
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
|
|
BOOLEAN
|
|
__stdcall
|
|
OneCoreDelay::IsSendMessageWPresent()
|
|
{
|
|
#ifdef __INSIDE_WINDOWS
|
|
return ::IsSendMessageWPresent();
|
|
#else
|
|
return true;
|
|
#endif
|
|
}
|
|
|
|
HMODULE GetUser32()
|
|
{
|
|
static HMODULE _hUser32 = nullptr;
|
|
if (_hUser32 == nullptr)
|
|
{
|
|
_hUser32 = LoadLibraryExW(L"user32.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);
|
|
}
|
|
|
|
return _hUser32;
|
|
}
|
|
|
|
HMODULE GetKernel32()
|
|
{
|
|
static HMODULE _hKernel32 = nullptr;
|
|
if (_hKernel32 == nullptr)
|
|
{
|
|
_hKernel32 = LoadLibraryExW(L"kernel32.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);
|
|
}
|
|
|
|
return _hKernel32;
|
|
}
|
|
|
|
BOOL
|
|
APIENTRY
|
|
OneCoreDelay::AddConsoleAliasA(
|
|
_In_ LPSTR Source,
|
|
_In_ LPSTR Target,
|
|
_In_ LPSTR ExeName)
|
|
{
|
|
HMODULE h = GetKernel32();
|
|
|
|
if (h != nullptr)
|
|
{
|
|
typedef BOOL(WINAPI *PfnAddConsoleAliasA)(LPSTR Source, LPSTR Target, LPSTR ExeName);
|
|
|
|
static PfnAddConsoleAliasA pfn = nullptr;
|
|
|
|
if (pfn == nullptr)
|
|
{
|
|
pfn = (PfnAddConsoleAliasA)GetProcAddress(h, "AddConsoleAliasA");
|
|
}
|
|
|
|
if (pfn != nullptr)
|
|
{
|
|
return pfn(Source, Target, ExeName);
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL
|
|
APIENTRY
|
|
OneCoreDelay::AddConsoleAliasW(
|
|
_In_ LPWSTR Source,
|
|
_In_ LPWSTR Target,
|
|
_In_ LPWSTR ExeName)
|
|
{
|
|
HMODULE h = GetKernel32();
|
|
|
|
if (h != nullptr)
|
|
{
|
|
typedef BOOL(WINAPI *PfnAddConsoleAliasW)(LPWSTR Source, LPWSTR Target, LPWSTR ExeName);
|
|
|
|
static PfnAddConsoleAliasW pfn = nullptr;
|
|
|
|
if (pfn == nullptr)
|
|
{
|
|
pfn = (PfnAddConsoleAliasW)GetProcAddress(h, "AddConsoleAliasW");
|
|
}
|
|
|
|
if (pfn != nullptr)
|
|
{
|
|
return pfn(Source, Target, ExeName);
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
DWORD
|
|
APIENTRY
|
|
OneCoreDelay::GetConsoleAliasA(
|
|
_In_ LPSTR Source,
|
|
_Out_writes_(TargetBufferLength) LPSTR TargetBuffer,
|
|
_In_ DWORD TargetBufferLength,
|
|
_In_ LPSTR ExeName)
|
|
{
|
|
HMODULE h = GetKernel32();
|
|
|
|
if (h != nullptr)
|
|
{
|
|
typedef BOOL(WINAPI *PfnGetConsoleAliasA)(LPSTR Source, LPSTR TargetBuffer, DWORD TargetBufferLength, LPSTR ExeName);
|
|
|
|
static PfnGetConsoleAliasA pfn = nullptr;
|
|
|
|
if (pfn == nullptr)
|
|
{
|
|
pfn = (PfnGetConsoleAliasA)GetProcAddress(h, "GetConsoleAliasA");
|
|
}
|
|
|
|
if (pfn != nullptr)
|
|
{
|
|
return pfn(Source, TargetBuffer, TargetBufferLength, ExeName);
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
DWORD
|
|
APIENTRY
|
|
OneCoreDelay::GetConsoleAliasW(
|
|
_In_ LPWSTR Source,
|
|
_Out_writes_(TargetBufferLength) LPWSTR TargetBuffer,
|
|
_In_ DWORD TargetBufferLength,
|
|
_In_ LPWSTR ExeName)
|
|
{
|
|
HMODULE h = GetKernel32();
|
|
|
|
if (h != nullptr)
|
|
{
|
|
typedef BOOL(WINAPI *PfnGetConsoleAliasW)(LPWSTR Source, LPWSTR TargetBuffer,DWORD TargetBufferLength, LPWSTR ExeName);
|
|
|
|
static PfnGetConsoleAliasW pfn = nullptr;
|
|
|
|
if (pfn == nullptr)
|
|
{
|
|
pfn = (PfnGetConsoleAliasW)GetProcAddress(h, "GetConsoleAliasW");
|
|
}
|
|
|
|
if (pfn != nullptr)
|
|
{
|
|
return pfn(Source, TargetBuffer, TargetBufferLength, ExeName);
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
OneCoreDelay::GetCurrentConsoleFont(
|
|
_In_ HANDLE hConsoleOutput,
|
|
_In_ BOOL bMaximumWindow,
|
|
_Out_ PCONSOLE_FONT_INFO lpConsoleCurrentFont
|
|
)
|
|
{
|
|
HMODULE h = GetKernel32();
|
|
|
|
if (h != nullptr)
|
|
{
|
|
typedef BOOL(WINAPI *PfnGetCurrentConsoleFont)(HANDLE hConsoleOutput, BOOL bMaximumWindow, PCONSOLE_FONT_INFO lpConsoleCurrentFont);
|
|
|
|
static PfnGetCurrentConsoleFont pfn = nullptr;
|
|
|
|
if (pfn == nullptr)
|
|
{
|
|
pfn = (PfnGetCurrentConsoleFont)GetProcAddress(h, "GetCurrentConsoleFont");
|
|
}
|
|
|
|
if (pfn != nullptr)
|
|
{
|
|
return pfn(hConsoleOutput, bMaximumWindow, lpConsoleCurrentFont);
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
OneCoreDelay::GetCurrentConsoleFontEx(
|
|
_In_ HANDLE hConsoleOutput,
|
|
_In_ BOOL bMaximumWindow,
|
|
_Out_ PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx)
|
|
{
|
|
HMODULE h = GetKernel32();
|
|
|
|
if (h != nullptr)
|
|
{
|
|
typedef BOOL(WINAPI *PfnGetCurrentConsoleFontEx)(HANDLE hConsoleOutput, BOOL bMaximumWindow, PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx);
|
|
|
|
static PfnGetCurrentConsoleFontEx pfn = nullptr;
|
|
|
|
if (pfn == nullptr)
|
|
{
|
|
pfn = (PfnGetCurrentConsoleFontEx)GetProcAddress(h, "GetCurrentConsoleFontEx");
|
|
}
|
|
|
|
if (pfn != nullptr)
|
|
{
|
|
return pfn(hConsoleOutput, bMaximumWindow, lpConsoleCurrentFontEx);
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
OneCoreDelay::SetCurrentConsoleFontEx(
|
|
_In_ HANDLE hConsoleOutput,
|
|
_In_ BOOL bMaximumWindow,
|
|
_In_ PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx)
|
|
{
|
|
HMODULE h = GetKernel32();
|
|
|
|
if (h != nullptr)
|
|
{
|
|
typedef BOOL(WINAPI *PfnSetCurrentConsoleFontEx)(HANDLE hConsoleOutput, BOOL bMaximumWindow, PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx);
|
|
|
|
static PfnSetCurrentConsoleFontEx pfn = nullptr;
|
|
|
|
if (pfn == nullptr)
|
|
{
|
|
pfn = (PfnSetCurrentConsoleFontEx)GetProcAddress(h, "SetCurrentConsoleFontEx");
|
|
}
|
|
|
|
if (pfn != nullptr)
|
|
{
|
|
return pfn(hConsoleOutput, bMaximumWindow, lpConsoleCurrentFontEx);
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
COORD
|
|
WINAPI
|
|
OneCoreDelay::GetConsoleFontSize(
|
|
_In_ HANDLE hConsoleOutput,
|
|
_In_ DWORD nFont
|
|
)
|
|
{
|
|
HMODULE h = GetKernel32();
|
|
|
|
if (h != nullptr)
|
|
{
|
|
typedef COORD(WINAPI *PfnGetConsoleFontSize)(HANDLE hConsoleOutput, DWORD nFont);
|
|
|
|
static PfnGetConsoleFontSize pfn = nullptr;
|
|
|
|
if (pfn == nullptr)
|
|
{
|
|
pfn = (PfnGetConsoleFontSize)GetProcAddress(h, "GetConsoleFontSize");
|
|
}
|
|
|
|
if (pfn != nullptr)
|
|
{
|
|
return pfn(hConsoleOutput, nFont);
|
|
}
|
|
}
|
|
|
|
return {0};
|
|
}
|
|
|
|
BOOL
|
|
WINAPI
|
|
OneCoreDelay::GetNumberOfConsoleMouseButtons(
|
|
_Out_ LPDWORD lpNumberOfMouseButtons
|
|
)
|
|
{
|
|
HMODULE h = GetKernel32();
|
|
|
|
if (h != nullptr)
|
|
{
|
|
typedef BOOL(WINAPI *PfnGetNumberOfConsoleMouseButtons)(LPDWORD lpNumberOfMouseButtons);
|
|
|
|
static PfnGetNumberOfConsoleMouseButtons pfn = nullptr;
|
|
|
|
if (pfn == nullptr)
|
|
{
|
|
pfn = (PfnGetNumberOfConsoleMouseButtons)GetProcAddress(h, "GetNumberOfConsoleMouseButtons");
|
|
}
|
|
|
|
if (pfn != nullptr)
|
|
{
|
|
return pfn(lpNumberOfMouseButtons);
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
HMENU
|
|
WINAPI
|
|
OneCoreDelay::GetMenu(
|
|
_In_ HWND hWnd)
|
|
{
|
|
HMODULE h = GetUser32();
|
|
|
|
if (h != nullptr)
|
|
{
|
|
typedef HMENU(WINAPI *PfnGetMenu)(HWND hWnd);
|
|
|
|
static PfnGetMenu pfn = nullptr;
|
|
|
|
if (pfn == nullptr)
|
|
{
|
|
pfn = (PfnGetMenu)GetProcAddress(h, "GetMenu");
|
|
}
|
|
|
|
if (pfn != nullptr)
|
|
{
|
|
return pfn(hWnd);
|
|
}
|
|
}
|
|
|
|
return nullptr;
|
|
}
|
|
|
|
|