diff --git a/Keygen.vcxproj b/Keygen.vcxproj
index e325288..bb20bce 100644
--- a/Keygen.vcxproj
+++ b/Keygen.vcxproj
@@ -141,8 +141,9 @@
$(OutDir)$(TargetName).pdb
- Console
+ Windows
"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"
+ mainCRTStartup
true
diff --git a/header.h b/header.h
index d1ec5ec..72616a5 100644
--- a/header.h
+++ b/header.h
@@ -40,6 +40,10 @@
#define IDC_IMAGE1 1050
+#define IDC_LABEL1 1055
+#define IDC_LABEL2 1056
+#define IDC_LABEL3 1057
+
typedef unsigned long ul32;
extern HANDLE hConsole;
diff --git a/windows.cpp b/windows.cpp
index 18e3136..5106f9c 100644
--- a/windows.cpp
+++ b/windows.cpp
@@ -59,28 +59,220 @@ bool PlayAudio(HINSTANCE hInstance, WCHAR *lpName, UINT bFlags) {
}
LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam) {
+ static HBRUSH hBGColorPrim, hBGColorSec, hFGColor, hBtnDefault,
+ hBtn1Select, hBtn1Hot,
+ hBtn2Select, hBtn2Hot,
+ hBtn3Select, hBtn3Hot,
+ hBtn4Select, hBtn4Hot;
+
+ static HPEN hFrameColor, hFramePrim, hBtnDefaultP,
+ hBtn1SelectP, hBtn1HotP,
+ hBtn2SelectP, hBtn2HotP,
+ hBtn3SelectP, hBtn3HotP,
+ hBtn4SelectP, hBtn4HotP;
+ static HDC hMainDC;
switch (uMessage) {
case WM_CREATE:
+ hMainDC = GetDC(hWindow);
+
+ hFrameColor = CreatePen(PS_SOLID, 1, RGB(240, 240, 240));
+ hFramePrim = CreatePen(PS_SOLID, 1, RGB(10, 10, 10));
+
+ hBGColorPrim = CreateSolidBrush(RGB(10, 10, 10));
+ hBGColorSec = (HBRUSH)(GetStockObject(BLACK_BRUSH));
+ hFGColor = (HBRUSH)GetStockObject(WHITE_BRUSH);
+
+ // yellow, blue, red, green
+ hBtnDefaultP = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
+
+ hBtn1SelectP = CreatePen(PS_SOLID, 1, RGB(160, 160, 0));
+ hBtn1HotP = CreatePen(PS_SOLID, 1, RGB(80, 80, 0));
+
+ hBtn2SelectP = CreatePen(PS_SOLID, 1, RGB(0, 0, 160));
+ hBtn2HotP = CreatePen(PS_SOLID, 1, RGB(0, 0, 80));
+
+ hBtn3SelectP = CreatePen(PS_SOLID, 1, RGB(160, 0, 0));
+ hBtn3HotP = CreatePen(PS_SOLID, 1, RGB(80, 0, 0));
+
+ hBtn4SelectP = CreatePen(PS_SOLID, 1, RGB(0, 160, 0));
+ hBtn4HotP = CreatePen(PS_SOLID, 1, RGB(0, 80, 0));
+
+ hBtnDefault = CreateSolidBrush(RGB(30, 30, 30));
+
+ hBtn1Select = CreateSolidBrush(RGB(70, 70, 30));
+ hBtn1Hot = CreateSolidBrush(RGB(40, 40, 30));
+
+ hBtn2Select = CreateSolidBrush(RGB(30, 30, 70));
+ hBtn2Hot = CreateSolidBrush(RGB(30, 30, 40));
+
+ hBtn3Select = CreateSolidBrush(RGB(70, 30, 30));
+ hBtn3Hot = CreateSolidBrush(RGB(40, 30, 30));
+
+ hBtn4Hot = CreateSolidBrush(RGB(30, 40, 30));
+ hBtn4Select = CreateSolidBrush(RGB(30, 70, 30));
+
break;
+ case WM_PAINT: {
+ RECT rGroup = {
+ 10,
+ 165,
+ 589,
+ 430
+ };
+
+ SelectObject(hMainDC, hFrameColor);
+ SelectObject(hMainDC, GetStockObject(HOLLOW_BRUSH));
+
+ RoundRect(hMainDC, 10, 165, 589, 430, 12, 12);
+ InvalidateRect(GetDlgItem(hWindow, IDC_LABEL1), nullptr, true);
+
+ goto execute;
+ }
+
case WM_CTLCOLORSTATIC:
+ SetBkMode((HDC)wParam, TRANSPARENT);
+
if ((HWND)lParam == GetDlgItem(hWindow, IDC_EDIT1)) {
- SetBkMode((HDC)wParam, TRANSPARENT);
SetTextColor((HDC)wParam, RGB(255, 255, 0));
- return (LRESULT)((HBRUSH)GetStockObject(BLACK_BRUSH));
+ return (LRESULT)(hBGColorSec);
+ }
+ else {
+ SetTextColor((HDC)wParam, RGB(255, 255, 255));
+ return (LRESULT)(hBGColorPrim);
+ }
+
+ break;
+
+ case WM_CTLCOLOREDIT:
+ SetBkMode((HDC)wParam, TRANSPARENT);
+
+ if ((HWND)lParam == GetDlgItem(hWindow, IDC_INPUT1)) {
+ SetTextColor((HDC)wParam, RGB(255, 140, 140));
+ }
+ else if ((HWND)lParam == GetDlgItem(hWindow, IDC_INPUT2)) {
+ SetTextColor((HDC)wParam, RGB(140, 140, 255));
}
else goto execute;
- break;
+ return (LRESULT)(hBGColorSec);
case WM_CHAR:
if (LOWORD(wParam) == VK_TAB)
SetFocus(GetNextDlgTabItem(hWindow, NULL, FALSE));
break;
+ case WM_NOTIFY: {
+ LPNMHDR nmHeader = (LPNMHDR)lParam;
+
+ if (nmHeader->code == NM_CUSTOMDRAW) {
+ LPNMCUSTOMDRAW item = (LPNMCUSTOMDRAW)nmHeader;
+
+ HBRUSH hBtnXSelect, hBtnXHot;
+ HPEN hBtnXSelectP, hBtnXHotP;
+
+ CONST WCHAR *pCaption = L"Unknown";
+
+ switch (nmHeader->idFrom) {
+ case IDC_BUTTON1:
+ pCaption = L"About";
+
+ hBtnXSelect = hBtn1Select;
+ hBtnXHot = hBtn1Hot;
+ hBtnXSelectP = hBtn1SelectP;
+ hBtnXHotP = hBtn1HotP;
+
+ break;
+
+ case IDC_BUTTON2:
+ pCaption = L"> Generate <";
+
+ hBtnXSelect = hBtn2Select;
+ hBtnXHot = hBtn2Hot;
+ hBtnXSelectP = hBtn2SelectP;
+ hBtnXHotP = hBtn2HotP;
+
+ break;
+
+ case IDC_BUTTON3:
+ pCaption = L"Quit";
+
+ hBtnXSelect = hBtn3Select;
+ hBtnXHot = hBtn3Hot;
+ hBtnXSelectP = hBtn3SelectP;
+ hBtnXHotP = hBtn3HotP;
+
+ break;
+
+ case IDC_BUTTON4:
+ pCaption = L"Random";
+
+ hBtnXSelect = hBtn4Select;
+ hBtnXHot = hBtn4Hot;
+ hBtnXSelectP = hBtn4SelectP;
+ hBtnXHotP = hBtn4HotP;
+
+ break;
+
+ default:
+ goto execute;
+ }
+
+ SetBkMode(item->hdc, TRANSPARENT);
+ SetTextColor(item->hdc, RGB(255, 255, 255));
+
+ SelectObject(item->hdc, hFramePrim);
+ SelectObject(item->hdc, hBGColorPrim);
+
+ Rectangle(item->hdc, item->rc.left, item->rc.top, item->rc.right, item->rc.bottom);
+
+ if (item->uItemState & CDIS_SELECTED) {
+ SelectObject(item->hdc, hBtnXSelectP);
+ SelectObject(item->hdc, hBtnXSelect);
+ }
+ else if (item->uItemState & CDIS_HOT) {
+ SelectObject(item->hdc, hBtnXHotP);
+ SelectObject(item->hdc, hBtnXHot);
+ }
+ else {
+ SelectObject(item->hdc, hBtnDefaultP);
+ SelectObject(item->hdc, hBtnDefault);
+ }
+
+ RoundRect(item->hdc, item->rc.left, item->rc.top, item->rc.right, item->rc.bottom, 12, 12);
+ DrawTextW(item->hdc, pCaption, -1, &item->rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
+
+ return CDRF_SKIPDEFAULT;
+ }
+
+ return CDRF_DODEFAULT;
+ }
+
case WM_COMMAND:
switch (LOWORD(wParam)) {
+ case IDC_LABEL2: {
+ switch (HIWORD(wParam)) {
+ case STN_CLICKED:
+ CheckRadioButton(hWindow, IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);
+
+ break;
+ }
+
+ break;
+ }
+
+ case IDC_LABEL3: {
+ switch (HIWORD(wParam)) {
+ case STN_CLICKED:
+ CheckRadioButton(hWindow, IDC_RADIO1, IDC_RADIO2, IDC_RADIO2);
+
+ break;
+ }
+
+ break;
+ }
+
case IDC_BUTTON1: {
ShellExecuteW(hWindow, L"open", pAboutLink, nullptr, nullptr, SW_SHOWNORMAL);
@@ -161,6 +353,35 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
break;
case WM_DESTROY:
+ DeleteObject(hBGColorPrim);
+
+ DeleteObject(hBtn1Select);
+ DeleteObject(hBtn1Hot);
+ DeleteObject(hBtn2Select);
+ DeleteObject(hBtn2Hot);
+ DeleteObject(hBtn3Select);
+ DeleteObject(hBtn3Hot);
+ DeleteObject(hBtn4Select);
+ DeleteObject(hBtn4Hot);
+
+ DeleteObject(hBtnDefault);
+
+ DeleteObject(hBtn1SelectP);
+ DeleteObject(hBtn1HotP);
+ DeleteObject(hBtn2SelectP);
+ DeleteObject(hBtn2HotP);
+ DeleteObject(hBtn3SelectP);
+ DeleteObject(hBtn3HotP);
+ DeleteObject(hBtn4SelectP);
+ DeleteObject(hBtn4HotP);
+
+ DeleteObject(hBtnDefaultP);
+
+ DeleteObject(hFrameColor);
+ DeleteObject(hFramePrim);
+
+ ReleaseDC(hWindow, hMainDC);
+
PostQuitMessage(0);
break;
@@ -186,7 +407,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
wndClass.hInstance = hInstance;
wndClass.lpfnWndProc = (WNDPROC)WNDProc;
wndClass.lpszClassName = L"XPKeygen";
- wndClass.hbrBackground = (HBRUSH)COLOR_WINDOW;
+ wndClass.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(10, 10, 10));
wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.hIcon = LoadIconW(nullptr, MAKEINTRESOURCEW(IDI_ICON1));
wndClass.hIconSm = LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_ICON1));
@@ -237,12 +458,12 @@ bool InitializeWindow(HINSTANCE hInstance) {
HWND hGroupBox = CreateWindowExW(
0,
- L"Button", L"Windows XP Pro VLK x86 // Server 2003 + SP2 x64",
+ L"Static", L"Windows XP Pro VLK x86 // Server 2003 + SP2 x64",
WS_CHILD | WS_VISIBLE |
- BS_GROUPBOX,
- 10, 150,
- w - 36, h - 200,
- hMainWindow, nullptr,
+ SS_CENTER,
+ 42, 150,
+ 515, 32,
+ hMainWindow, (HMENU)IDC_LABEL1,
hInstance, nullptr
);
@@ -340,11 +561,11 @@ bool InitializeWindow(HINSTANCE hInstance) {
HWND hRadio1 = CreateWindowExW(
WS_EX_WINDOWEDGE,
L"Button",
- L"Windows XP VLK",
- WS_VISIBLE | WS_CHILD | WS_GROUP |
+ L"",
+ WS_VISIBLE | WS_CHILD | WS_GROUP | WS_TABSTOP |
BS_AUTORADIOBUTTON,
70, 219,
- 120, 20,
+ 17, 20,
hMainWindow,
(HMENU)IDC_RADIO1,
hInstance, NULL
@@ -353,20 +574,48 @@ bool InitializeWindow(HINSTANCE hInstance) {
SendMessageW(hRadio1, BM_SETCHECK, 1, 0);
SendMessageW(hRadio1, WM_SETFONT, (WPARAM)hLabelFont, 0);
+ HWND hRadioLabel1 = CreateWindowExW(
+ 0,
+ L"Static",
+ L"Windows XP VLK",
+ WS_CHILD | WS_VISIBLE |
+ SS_NOTIFY,
+ 89, 221,
+ 90, 16,
+ hMainWindow, (HMENU)IDC_LABEL2,
+ hInstance, nullptr
+ );
+
+ SendMessageW(hRadioLabel1, WM_SETFONT, (WPARAM)hLabelFont, 0);
+
HWND hRadio2 = CreateWindowExW(
WS_EX_WINDOWEDGE,
L"Button",
- L"Windows Server 2003 / SP2 x64",
- WS_VISIBLE | WS_CHILD |
+ L"",
+ WS_VISIBLE | WS_CHILD | WS_TABSTOP |
BS_AUTORADIOBUTTON,
200, 219,
- 180, 20,
+ 17, 20,
hMainWindow,
(HMENU)IDC_RADIO2,
hInstance, NULL);
SendMessageW(hRadio2, WM_SETFONT, (WPARAM)hLabelFont, 0);
+ HWND hRadioLabel2 = CreateWindowExW(
+ 0,
+ L"Static",
+ L"Windows Server 2003 / SP2 x64",
+ WS_CHILD | WS_VISIBLE |
+ SS_NOTIFY,
+ 218, 221,
+ 170, 16,
+ hMainWindow, (HMENU)IDC_LABEL3,
+ hInstance, nullptr
+ );
+
+ SendMessageW(hRadioLabel2, WM_SETFONT, (WPARAM)hLabelFont, 0);
+
HWND hEdit = CreateWindowExW(
0,
L"Edit",
@@ -388,7 +637,8 @@ bool InitializeWindow(HINSTANCE hInstance) {
0,
L"Button",
L"About",
- WS_CHILD | WS_VISIBLE | WS_TABSTOP,
+ WS_CHILD | WS_VISIBLE | WS_TABSTOP |
+ BS_PUSHBUTTON,
44, h - 90,
100, 27,
hMainWindow,
@@ -419,7 +669,8 @@ bool InitializeWindow(HINSTANCE hInstance) {
0,
L"Button",
L"Quit",
- WS_CHILD | WS_VISIBLE | WS_TABSTOP,
+ WS_CHILD | WS_VISIBLE | WS_TABSTOP |
+ BS_PUSHBUTTON,
w - 160, h - 90,
100, 27,
hMainWindow,
@@ -438,8 +689,10 @@ bool InitializeWindow(HINSTANCE hInstance) {
MSG uMessage;
while(GetMessageW(&uMessage, nullptr, 0, 0)) {
- TranslateMessage(&uMessage);
- DispatchMessageW(&uMessage);
+ if (!IsDialogMessageW(hMainWindow, &uMessage)) {
+ TranslateMessage(&uMessage);
+ DispatchMessageW(&uMessage);
+ }
}
ReleaseDC(hMainWindow, hMainDC);