Finished Win32 GUI (First time in my life)
This commit is contained in:
parent
602ad90f67
commit
70e2c6fbfd
|
@ -88,7 +88,7 @@
|
||||||
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
|
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
|
||||||
</Midl>
|
</Midl>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>lib\libcrypto.lib;comctl32.lib;uxtheme.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>lib\libcrypto.lib;comctl32.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
|
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
@ -99,6 +99,7 @@
|
||||||
<ProgramDataBaseFile>$(OutDir)$(TargetName).pdb</ProgramDataBaseFile>
|
<ProgramDataBaseFile>$(OutDir)$(TargetName).pdb</ProgramDataBaseFile>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<AdditionalManifestDependencies>"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"</AdditionalManifestDependencies>
|
<AdditionalManifestDependencies>"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"</AdditionalManifestDependencies>
|
||||||
|
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
|
||||||
</Link>
|
</Link>
|
||||||
<ProjectReference>
|
<ProjectReference>
|
||||||
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||||
|
@ -133,7 +134,7 @@
|
||||||
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
|
<ProxyFileName>%(Filename)_p.c</ProxyFileName>
|
||||||
</Midl>
|
</Midl>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>lib\libcrypto.lib;comctl32.lib;uxtheme.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>lib\libcrypto.lib;comctl32.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
|
<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||||
|
|
5
header.h
5
header.h
|
@ -43,10 +43,14 @@
|
||||||
#define IDC_LABEL1 1055
|
#define IDC_LABEL1 1055
|
||||||
#define IDC_LABEL2 1056
|
#define IDC_LABEL2 1056
|
||||||
#define IDC_LABEL3 1057
|
#define IDC_LABEL3 1057
|
||||||
|
#define IDC_LABEL4 1058
|
||||||
|
#define IDC_LABEL5 1059
|
||||||
|
|
||||||
typedef unsigned long ul32;
|
typedef unsigned long ul32;
|
||||||
|
|
||||||
extern HANDLE hConsole;
|
extern HANDLE hConsole;
|
||||||
|
|
||||||
|
extern ul32 dwSeed;
|
||||||
extern byte charset[];
|
extern byte charset[];
|
||||||
|
|
||||||
extern const char pXP[];
|
extern const char pXP[];
|
||||||
|
@ -128,6 +132,7 @@ void generateServerKey(
|
||||||
// utilities.cpp
|
// utilities.cpp
|
||||||
void cprintf(const char *Format, int nColor, ...);
|
void cprintf(const char *Format, int nColor, ...);
|
||||||
void endiannessConvert(byte *data, int length);
|
void endiannessConvert(byte *data, int length);
|
||||||
|
ul32 randomRange(ul32 dwLow, ul32 dwHigh);
|
||||||
|
|
||||||
EC_GROUP *initializeEllipticCurve(
|
EC_GROUP *initializeEllipticCurve(
|
||||||
const char *pSel,
|
const char *pSel,
|
||||||
|
|
7
main.cpp
7
main.cpp
|
@ -6,6 +6,7 @@
|
||||||
#include "header.h"
|
#include "header.h"
|
||||||
|
|
||||||
HANDLE hConsole;
|
HANDLE hConsole;
|
||||||
|
ul32 dwSeed;
|
||||||
byte charset[] = "BCDFGHJKMPQRTVWXY2346789";
|
byte charset[] = "BCDFGHJKMPQRTVWXY2346789";
|
||||||
|
|
||||||
int mainServer() {
|
int mainServer() {
|
||||||
|
@ -143,12 +144,12 @@ int main() {
|
||||||
|
|
||||||
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
|
|
||||||
|
srand(GetTickCount64());
|
||||||
|
|
||||||
HINSTANCE hInstance = GetModuleHandleW(nullptr);
|
HINSTANCE hInstance = GetModuleHandleW(nullptr);
|
||||||
|
|
||||||
int p = InitializeWindow(hInstance);
|
int p = InitializeWindow(hInstance);
|
||||||
|
|
||||||
SetConsoleTitleA("Windows XP VLK Keygen");
|
|
||||||
|
|
||||||
system("cls");
|
system("cls");
|
||||||
cprintf("Windows XP VLK Keygen\n\n", 0x08);
|
cprintf("Windows XP VLK Keygen\n\n", 0x08);
|
||||||
|
|
||||||
|
@ -173,6 +174,4 @@ int main() {
|
||||||
printf("\t2. Hash = (First32Bits(SHA1(pRaw, r.x, r.y)) >> 4.\n");
|
printf("\t2. Hash = (First32Bits(SHA1(pRaw, r.x, r.y)) >> 4.\n");
|
||||||
printf("\t3. Signature = privateKey * Hash + (C %% Order)\n");
|
printf("\t3. Signature = privateKey * Hash + (C %% Order)\n");
|
||||||
printf("Finally, we pack these components together, convert them to Base24 and get a valid Windows XP key.\n");
|
printf("Finally, we pack these components together, convert them to Base24 and get a valid Windows XP key.\n");
|
||||||
|
|
||||||
cprintf("Input Raw Product Key BBB-CCCCCC WITHOUT DASHES in range [100-000000; 999-999999]: ", 0x0E);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
#include "header.h"
|
#include "header.h"
|
||||||
|
|
||||||
/* Colored output */
|
/* Colored output. */
|
||||||
void cprintf(const char *Format, int nColor, ...) {
|
void cprintf(const char *Format, int nColor, ...) {
|
||||||
va_list vList;
|
va_list vList;
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ void endiannessConvert(byte *data, int length) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initializes the elliptic curve. */
|
||||||
EC_GROUP *initializeEllipticCurve(
|
EC_GROUP *initializeEllipticCurve(
|
||||||
const char *pSel,
|
const char *pSel,
|
||||||
long aSel,
|
long aSel,
|
||||||
|
@ -65,6 +66,8 @@ EC_GROUP *initializeEllipticCurve(
|
||||||
// Context variable
|
// Context variable
|
||||||
context = BN_CTX_new();
|
context = BN_CTX_new();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Public data */
|
/* Public data */
|
||||||
BN_hex2bn(&p, pSel);
|
BN_hex2bn(&p, pSel);
|
||||||
BN_set_word(a, aSel);
|
BN_set_word(a, aSel);
|
||||||
|
@ -97,3 +100,8 @@ EC_GROUP *initializeEllipticCurve(
|
||||||
|
|
||||||
return eCurve;
|
return eCurve;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Generates a random 32-bit integer in range. */
|
||||||
|
ul32 randomRange(ul32 dwLow, ul32 dwHigh) {
|
||||||
|
return rand() % (dwHigh - dwLow) + dwLow;
|
||||||
|
}
|
205
windows.cpp
205
windows.cpp
|
@ -1,4 +1,4 @@
|
||||||
//
|
//
|
||||||
// Created by Andrew on 10/04/2023.
|
// Created by Andrew on 10/04/2023.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@ -13,33 +13,8 @@
|
||||||
|
|
||||||
HWND hMainWindow;
|
HWND hMainWindow;
|
||||||
|
|
||||||
const WCHAR *pAboutLink = L"http://github.com/Endermanch/XPKeygen";
|
const WCHAR *pAboutLink = L"https://github.com/Endermanch/XPKeygen",
|
||||||
|
*pWebsite = L"https://malwarewatch.org";
|
||||||
void InitializeFonts(HFONT *hLabelFont, HFONT *hSmolFont, HFONT *hBoldFont, HFONT *hCaptionFont) {
|
|
||||||
NONCLIENTMETRICSW nonClientMetrics;
|
|
||||||
|
|
||||||
// Get information about the default system font.
|
|
||||||
nonClientMetrics.cbSize = sizeof(NONCLIENTMETRICSW);
|
|
||||||
SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &nonClientMetrics, 0);
|
|
||||||
|
|
||||||
ULONG defaultHeight = nonClientMetrics.lfMessageFont.lfHeight;
|
|
||||||
|
|
||||||
// Create default font.
|
|
||||||
*hLabelFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
|
|
||||||
|
|
||||||
// Create smol font.
|
|
||||||
nonClientMetrics.lfMessageFont.lfHeight = 12;
|
|
||||||
*hSmolFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
|
|
||||||
|
|
||||||
// Create bold font.
|
|
||||||
nonClientMetrics.lfMessageFont.lfWeight = 700;
|
|
||||||
nonClientMetrics.lfMessageFont.lfHeight = defaultHeight;
|
|
||||||
*hBoldFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
|
|
||||||
|
|
||||||
// Create caption font.
|
|
||||||
nonClientMetrics.lfMessageFont.lfHeight = 30;
|
|
||||||
*hCaptionFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool PlayAudio(HINSTANCE hInstance, WCHAR *lpName, UINT bFlags) {
|
bool PlayAudio(HINSTANCE hInstance, WCHAR *lpName, UINT bFlags) {
|
||||||
HANDLE hResInfo = FindResourceW(hInstance, lpName, L"WAVE");
|
HANDLE hResInfo = FindResourceW(hInstance, lpName, L"WAVE");
|
||||||
|
@ -58,6 +33,63 @@ bool PlayAudio(HINSTANCE hInstance, WCHAR *lpName, UINT bFlags) {
|
||||||
return sndPlaySoundW(lpRes, SND_MEMORY | bFlags);
|
return sndPlaySoundW(lpRes, SND_MEMORY | bFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Static link processor. */
|
||||||
|
LRESULT StaticLinkProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) {
|
||||||
|
static TRACKMOUSEEVENT trackMouse;
|
||||||
|
static BOOL isSet = FALSE;
|
||||||
|
|
||||||
|
// The worst part here was to avoid pointer flickering, as well as spamming the SetCursor function.
|
||||||
|
switch (uMsg) {
|
||||||
|
|
||||||
|
// Set the struct up outside of a frequently executed message to speed things up.
|
||||||
|
case WM_APP + IDC_LABEL4: {
|
||||||
|
trackMouse.cbSize = sizeof(TRACKMOUSEEVENT);
|
||||||
|
trackMouse.dwFlags = TME_LEAVE;
|
||||||
|
trackMouse.dwHoverTime = HOVER_DEFAULT;
|
||||||
|
trackMouse.hwndTrack = hWindow;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// You have to turn off the WM_SETCURSOR, because it spams the SetCursor function with IDC_ARROW in the DefWndProc. Moist garbage.
|
||||||
|
case WM_SETCURSOR: break;
|
||||||
|
|
||||||
|
// Set cursor to hand if it's inside of static area, refresh the mouse tracking loop.
|
||||||
|
case WM_MOUSEMOVE: {
|
||||||
|
if (!isSet) {
|
||||||
|
TrackMouseEvent(&trackMouse);
|
||||||
|
SetCursor(LoadCursorW(NULL, IDC_HAND));
|
||||||
|
|
||||||
|
isSet = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set cursor back to normal if it's outside of static area.
|
||||||
|
case WM_MOUSELEAVE: {
|
||||||
|
if (isSet) {
|
||||||
|
SetCursor(LoadCursorW(NULL, IDC_ARROW));
|
||||||
|
isSet = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove the subclass before window closes.
|
||||||
|
case WM_NCDESTROY: {
|
||||||
|
RemoveWindowSubclass(hWindow, StaticLinkProc, 1);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pass everything else to DefWndProc.
|
||||||
|
default: return DefSubclassProc(hWindow, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam) {
|
LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam) {
|
||||||
static HBRUSH hBGColorPrim, hBGColorSec, hFGColor, hBtnDefault,
|
static HBRUSH hBGColorPrim, hBGColorSec, hFGColor, hBtnDefault,
|
||||||
hBtn1Select, hBtn1Hot,
|
hBtn1Select, hBtn1Hot,
|
||||||
|
@ -115,13 +147,6 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_PAINT: {
|
case WM_PAINT: {
|
||||||
RECT rGroup = {
|
|
||||||
10,
|
|
||||||
165,
|
|
||||||
589,
|
|
||||||
430
|
|
||||||
};
|
|
||||||
|
|
||||||
SelectObject(hMainDC, hFrameColor);
|
SelectObject(hMainDC, hFrameColor);
|
||||||
SelectObject(hMainDC, GetStockObject(HOLLOW_BRUSH));
|
SelectObject(hMainDC, GetStockObject(HOLLOW_BRUSH));
|
||||||
|
|
||||||
|
@ -138,6 +163,14 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
SetTextColor((HDC)wParam, RGB(255, 255, 0));
|
SetTextColor((HDC)wParam, RGB(255, 255, 0));
|
||||||
return (LRESULT)(hBGColorSec);
|
return (LRESULT)(hBGColorSec);
|
||||||
}
|
}
|
||||||
|
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_LABEL4)) {
|
||||||
|
SetTextColor((HDC)wParam, RGB(140, 140, 255));
|
||||||
|
return (LRESULT)(hBGColorPrim);
|
||||||
|
}
|
||||||
|
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_LABEL5)) {
|
||||||
|
SetTextColor((HDC)wParam, RGB(255, 140, 140));
|
||||||
|
return (LRESULT)(hBGColorPrim);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
SetTextColor((HDC)wParam, RGB(255, 255, 255));
|
SetTextColor((HDC)wParam, RGB(255, 255, 255));
|
||||||
return (LRESULT)(hBGColorPrim);
|
return (LRESULT)(hBGColorPrim);
|
||||||
|
@ -158,11 +191,6 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
|
|
||||||
return (LRESULT)(hBGColorSec);
|
return (LRESULT)(hBGColorSec);
|
||||||
|
|
||||||
case WM_CHAR:
|
|
||||||
if (LOWORD(wParam) == VK_TAB)
|
|
||||||
SetFocus(GetNextDlgTabItem(hWindow, NULL, FALSE));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_NOTIFY: {
|
case WM_NOTIFY: {
|
||||||
LPNMHDR nmHeader = (LPNMHDR)lParam;
|
LPNMHDR nmHeader = (LPNMHDR)lParam;
|
||||||
|
|
||||||
|
@ -216,7 +244,7 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
goto execute;
|
return CDRF_DODEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetBkMode(item->hdc, TRANSPARENT);
|
SetBkMode(item->hdc, TRANSPARENT);
|
||||||
|
@ -273,6 +301,17 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case IDC_LABEL4: {
|
||||||
|
switch (HIWORD(wParam)) {
|
||||||
|
case STN_CLICKED:
|
||||||
|
ShellExecuteW(hWindow, L"open", pWebsite, nullptr, nullptr, SW_SHOWNORMAL);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case IDC_BUTTON1: {
|
case IDC_BUTTON1: {
|
||||||
ShellExecuteW(hWindow, L"open", pAboutLink, nullptr, nullptr, SW_SHOWNORMAL);
|
ShellExecuteW(hWindow, L"open", pAboutLink, nullptr, nullptr, SW_SHOWNORMAL);
|
||||||
|
|
||||||
|
@ -291,7 +330,7 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
|
|
||||||
int pSSection = 0;
|
int pSSection = 0;
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < wcslen(pCSection); i++)
|
||||||
pSSection -= pCSection[i] - '0';
|
pSSection -= pCSection[i] - '0';
|
||||||
|
|
||||||
while (pSSection < 0)
|
while (pSSection < 0)
|
||||||
|
@ -335,10 +374,21 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
|
|
||||||
case IDC_BUTTON3: {
|
case IDC_BUTTON3: {
|
||||||
DestroyWindow(hWindow);
|
DestroyWindow(hWindow);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
case IDC_BUTTON4: {
|
case IDC_BUTTON4: {
|
||||||
|
ul32 msDigits = randomRange(0, 999),
|
||||||
|
lsDigits = randomRange(0, 999'999);
|
||||||
|
|
||||||
|
WCHAR pBSection[4]{}, pCSection[8]{};
|
||||||
|
|
||||||
|
wsprintfW(pBSection, L"%03d", msDigits);
|
||||||
|
wsprintfW(pCSection, L"%06d", lsDigits);
|
||||||
|
|
||||||
|
SendMessageW(GetDlgItem(hMainWindow, IDC_INPUT1), WM_SETTEXT, 0, (LPARAM)pBSection);
|
||||||
|
SendMessageW(GetDlgItem(hMainWindow, IDC_INPUT2), WM_SETTEXT, 0, (LPARAM)pCSection);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -393,6 +443,31 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InitializeFonts(HFONT *hLabelFont, HFONT *hSmolFont, HFONT *hBoldFont, HFONT *hCaptionFont) {
|
||||||
|
NONCLIENTMETRICSW nonClientMetrics;
|
||||||
|
|
||||||
|
// Get information about the default system font.
|
||||||
|
nonClientMetrics.cbSize = sizeof(NONCLIENTMETRICSW);
|
||||||
|
SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &nonClientMetrics, 0);
|
||||||
|
|
||||||
|
ULONG defaultHeight = nonClientMetrics.lfMessageFont.lfHeight;
|
||||||
|
|
||||||
|
// Create default font.
|
||||||
|
*hLabelFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
|
||||||
|
|
||||||
|
// Create smol font.
|
||||||
|
nonClientMetrics.lfMessageFont.lfHeight = 12;
|
||||||
|
*hSmolFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
|
||||||
|
|
||||||
|
// Create bold font.
|
||||||
|
nonClientMetrics.lfMessageFont.lfWeight = 700;
|
||||||
|
nonClientMetrics.lfMessageFont.lfHeight = defaultHeight;
|
||||||
|
*hBoldFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
|
||||||
|
|
||||||
|
// Create caption font.
|
||||||
|
nonClientMetrics.lfMessageFont.lfHeight = 30;
|
||||||
|
*hCaptionFont = CreateFontIndirectW(&nonClientMetrics.lfMessageFont);
|
||||||
|
}
|
||||||
|
|
||||||
bool InitializeWindow(HINSTANCE hInstance) {
|
bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
HFONT hLabelFont,
|
HFONT hLabelFont,
|
||||||
|
@ -419,7 +494,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
InitializeFonts(&hLabelFont, &hSmolFont, &hBoldFont, &hCaptionFont);
|
InitializeFonts(&hLabelFont, &hSmolFont, &hBoldFont, &hCaptionFont);
|
||||||
|
|
||||||
const int w = 615,
|
const int w = 615,
|
||||||
h = 480,
|
h = 495,
|
||||||
x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2,
|
x = (GetSystemMetrics(SM_CXSCREEN) - w) / 2,
|
||||||
y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
|
y = (GetSystemMetrics(SM_CYSCREEN) - h) / 2;
|
||||||
|
|
||||||
|
@ -624,7 +699,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
ES_MULTILINE | ES_READONLY |
|
ES_MULTILINE | ES_READONLY |
|
||||||
ES_LEFT | ES_UPPERCASE,
|
ES_LEFT | ES_UPPERCASE,
|
||||||
20, 250,
|
20, 250,
|
||||||
w - 57, h - 350,
|
w - 57, h - 360,
|
||||||
hMainWindow,
|
hMainWindow,
|
||||||
(HMENU)IDC_EDIT1,
|
(HMENU)IDC_EDIT1,
|
||||||
hInstance,
|
hInstance,
|
||||||
|
@ -639,7 +714,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
L"About",
|
L"About",
|
||||||
WS_CHILD | WS_VISIBLE | WS_TABSTOP |
|
WS_CHILD | WS_VISIBLE | WS_TABSTOP |
|
||||||
BS_PUSHBUTTON,
|
BS_PUSHBUTTON,
|
||||||
44, h - 90,
|
44, h - 102,
|
||||||
100, 27,
|
100, 27,
|
||||||
hMainWindow,
|
hMainWindow,
|
||||||
(HMENU)IDC_BUTTON1,
|
(HMENU)IDC_BUTTON1,
|
||||||
|
@ -655,7 +730,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
L"Generate",
|
L"Generate",
|
||||||
WS_CHILD | WS_VISIBLE | WS_TABSTOP |
|
WS_CHILD | WS_VISIBLE | WS_TABSTOP |
|
||||||
BS_PUSHBUTTON,
|
BS_PUSHBUTTON,
|
||||||
250, h - 90,
|
250, h - 102,
|
||||||
100, 27,
|
100, 27,
|
||||||
hMainWindow,
|
hMainWindow,
|
||||||
(HMENU)IDC_BUTTON2,
|
(HMENU)IDC_BUTTON2,
|
||||||
|
@ -671,7 +746,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
L"Quit",
|
L"Quit",
|
||||||
WS_CHILD | WS_VISIBLE | WS_TABSTOP |
|
WS_CHILD | WS_VISIBLE | WS_TABSTOP |
|
||||||
BS_PUSHBUTTON,
|
BS_PUSHBUTTON,
|
||||||
w - 160, h - 90,
|
w - 160, h - 102,
|
||||||
100, 27,
|
100, 27,
|
||||||
hMainWindow,
|
hMainWindow,
|
||||||
(HMENU)IDC_BUTTON3,
|
(HMENU)IDC_BUTTON3,
|
||||||
|
@ -681,6 +756,42 @@ bool InitializeWindow(HINSTANCE hInstance) {
|
||||||
|
|
||||||
SendMessageW(hQuit, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
SendMessageW(hQuit, WM_SETFONT, (WPARAM)hLabelFont, 0);
|
||||||
|
|
||||||
|
const WCHAR *pVersion = L"2.1";
|
||||||
|
|
||||||
|
WCHAR pVersionString[256]{};
|
||||||
|
|
||||||
|
wsprintfW(pVersionString, L"v%s • %s", pVersion, pWebsite);
|
||||||
|
|
||||||
|
HWND hVersion = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
L"Static",
|
||||||
|
pVersionString,
|
||||||
|
WS_CHILD | WS_VISIBLE |
|
||||||
|
SS_NOTIFY,
|
||||||
|
10, 436,
|
||||||
|
170, 16,
|
||||||
|
hMainWindow, (HMENU)IDC_LABEL4,
|
||||||
|
hInstance, nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SetWindowSubclass(hVersion, StaticLinkProc, IDC_LABEL4, 0);
|
||||||
|
|
||||||
|
SendMessageW(hVersion, WM_SETFONT, (WPARAM)hSmolFont, 0);
|
||||||
|
SendMessageW(hVersion, WM_APP + IDC_LABEL4, 0, 0);
|
||||||
|
|
||||||
|
HWND hMotto = CreateWindowExW(
|
||||||
|
0,
|
||||||
|
L"Static",
|
||||||
|
L"we keep on downloading ◄ 11/04/2023",
|
||||||
|
WS_CHILD | WS_VISIBLE,
|
||||||
|
w - (170 + 15), 436,
|
||||||
|
170, 16,
|
||||||
|
hMainWindow, (HMENU)IDC_LABEL5,
|
||||||
|
hInstance, nullptr
|
||||||
|
);
|
||||||
|
|
||||||
|
SendMessageW(hMotto, WM_SETFONT, (WPARAM)hSmolFont, 0);
|
||||||
|
|
||||||
ShowWindow(hMainWindow, SW_SHOW);
|
ShowWindow(hMainWindow, SW_SHOW);
|
||||||
UpdateWindow(hMainWindow);
|
UpdateWindow(hMainWindow);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue