You already know how to create a shortcut:
#include <windows.h> #include <tchar.h> #include <shlobj.h> #include <atlbase.h>// class CCoInitialize incorporated here by reference
int __cdecl _tmain(int argc, TCHAR **argv) { // error checking elided for expository purposes CCoInitialize init; CComPtr<IShellLink> spsl; spsl.CoCreateInstance(CLSID_ShellLink); spsl->SetPath(TEXT(“C:\\Windows\\system32\\cmd.exe”)); CComQIPtr<IPersistFile>(spsl)->Save(L”Here.lnk”, TRUE); return 0; }
If you double-click the resulting shortcut from Explorer, it will run the command processor in a default console window.
Today’s Little Program customizes the other console properties, so you can control settings like the console buffer size and whether QuickEdit is enabled by default.
We use the IShellDataList
interface to attach
“bonus data” to the shell link.
The data we are interested in here is the
NT_CONSOLE_PROPS
.
Remember, Little Programs perform little to no error checking,
use hard-coded paths,
and all that other stuff that make them
unsuitable for shipping-quality code.
int __cdecl _tmain(int argc, TCHAR **argv) { CCoInitialize init; CComPtr<IShellLink> spsl; spsl.CoCreateInstance(CLSID_ShellLink); spsl->SetPath(TEXT(“C:\\Windows\\system32\\cmd.exe”));NT_CONSOLE_PROPS props; ZeroMemory(&props, sizeof(props)); props.dbh.cbSize = sizeof(props); props.dbh.dwSignature = NT_CONSOLE_PROPS_SIG; props.wFillAttribute = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED; // white on black props.wPopupFillAttribute = BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED; // purple on white props.dwWindowSize.X = 132; // 132 columns wide props.dwWindowSize.Y = 50; // 50 lines tall props.dwScreenBufferSize.X = 132; // 132 columns wide props.dwScreenBufferSize.Y = 1000; // large scrollback props.uCursorSize = 25; // small cursor props.bQuickEdit = TRUE; // turn QuickEdit on props.bAutoPosition = TRUE; props.uHistoryBufferSize = 25; props.uNumberOfHistoryBuffers = 4; props.ColorTable[ 0] = RGB(0x00, 0x00, 0x00); props.ColorTable[ 1] = RGB(0x00, 0x00, 0x80); props.ColorTable[ 2] = RGB(0x00, 0x80, 0x00); props.ColorTable[ 3] = RGB(0x00, 0x80, 0x80); props.ColorTable[ 4] = RGB(0x80, 0x00, 0x00); props.ColorTable[ 5] = RGB(0x80, 0x00, 0x80); props.ColorTable[ 6] = RGB(0x80, 0x80, 0x00); props.ColorTable[ 7] = RGB(0xC0, 0xC0, 0xC0); props.ColorTable[ 8] = RGB(0x80, 0x80, 0x80); props.ColorTable[ 9] = RGB(0x00, 0x00, 0xFF); props.ColorTable[10] = RGB(0x00, 0xFF, 0x00); props.ColorTable[11] = RGB(0x00, 0xFF, 0xFF); props.ColorTable[12] = RGB(0xFF, 0x00, 0x00); props.ColorTable[13] = RGB(0xFF, 0x00, 0xFF); props.ColorTable[14] = RGB(0xFF, 0xFF, 0x00); props.ColorTable[15] = RGB(0xFF, 0xFF, 0xFF); CComQIPtr<IShellLinkDataList>(spsl)->AddDataBlock(&props);
CComQIPtr<IPersistFile>(spsl)->Save(L”Here.lnk”, TRUE); return 0; }
0 comments