This commit is contained in:
2026-08-24 14:47:59 +08:00
parent e91e372b19
commit 75d9b25362
45 changed files with 17462 additions and 129 deletions
+131 -14
View File
@@ -1,12 +1,11 @@
#include "Base.h"
#include "comm.h"
#include "Mapping.h"
#include "server_palpit.h"
#include "server_pipe.h"
#include "Gui.h"
#include "XorStr.h"
#include "resource.h"
#include "utils.h"
#define MUTEX_NAME XOR_STRING_W(L"Local\\seriver_mutex_anit")
BOOL WINAPI CtrlHandler(DWORD type)
{
@@ -24,24 +23,142 @@ BOOL WINAPI CtrlHandler(DWORD type)
}
}
HWND g_hWnd = NULL;
HICON g_hTrayIcon = NULL;
BOOL g_bIconAdded = FALSE;
// 自定义消息,托盘通知消息
#define WM_TRAYMESSAGE (WM_USER + 1001)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
NOTIFYICONDATA nid = { 0 };
switch (msg)
{
case WM_TRAYMESSAGE:
{
// 托盘消息
switch (LOWORD(lParam))
{
case WM_RBUTTONUP:
{
// 右键弹出菜单
POINT pt;
GetCursorPos(&pt);
HMENU hMenu = CreatePopupMenu();
AppendMenuA(hMenu, MF_STRING, 1001, "关于");
AppendMenuA(hMenu, MF_STRING, 1002, "退出程序");
// 弹出菜单
SetForegroundWindow(hWnd);
TrackPopupMenu(hMenu, TPM_BOTTOMALIGN | TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL);
DestroyMenu(hMenu);
break;
}
}
break;
}
case WM_COMMAND:
{
UINT cmdId = LOWORD(wParam);
if (cmdId == 1001)
{
MessageBoxA(hWnd, "ESP反挂插件\nwww.espgom.com", "", MB_OK);
}
else if (cmdId == 1002)
{
// 退出,先移除托盘图标
nid.cbSize = sizeof(nid);
nid.hWnd = g_hWnd;
Shell_NotifyIcon(NIM_DELETE, &nid);
ExitProcess(0);
}
break;
}
case WM_DESTROY:
nid.cbSize = sizeof(nid);
nid.hWnd = g_hWnd;
Shell_NotifyIcon(NIM_DELETE, &nid);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
BOOL CreateHiddenWindow()
{
WNDCLASSEXA wc = { 0 };
wc.cbSize = sizeof(WNDCLASSEXA);
wc.lpfnWndProc = WndProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = "TrayWndClass";
RegisterClassExA(&wc);
g_hWnd = CreateWindowExA(0, wc.lpszClassName, "Tray", 0,
CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, wc.hInstance, NULL);
// 不显示窗口(隐藏)
ShowWindow(g_hWnd, SW_HIDE);
return g_hWnd != NULL;
}
BOOL AddTrayIcon()
{
NOTIFYICONDATAA nid = { 0 };
nid.cbSize = sizeof(NOTIFYICONDATAA);
nid.hWnd = g_hWnd;
nid.uID = 3276147; // 图标唯一ID
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = WM_TRAYMESSAGE;
// 图标:可以 LoadIcon/LoadImage,也可以用自带默认图标
// ========== 加载资源图标(托盘建议16x16 ==========
g_hTrayIcon = (HICON)LoadImageA(
GetModuleHandle(NULL),
MAKEINTRESOURCEA(IDI_ICON1),
IMAGE_ICON,
64, 64, // 托盘标准尺寸 16*16
LR_DEFAULTCOLOR
);
nid.hIcon = g_hTrayIcon;
strcpy_s(nid.szTip, "Esp Tray System");
BOOL ok = Shell_NotifyIconA(NIM_ADD, &nid);
if (ok)
g_bIconAdded = TRUE;
return ok;
}
auto GuiWindowThread(LPVOID)->DWORD
{
CreateHiddenWindow();
AddTrayIcon();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
auto WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) -> int
{
//AllocConsole();
//freopen("CONOUT$", "w+", stdout);
HANDLE mutex = CreateMutex(nullptr, TRUE, MUTEX_NAME);
if (!mutex || GetLastError() == ERROR_ALREADY_EXISTS)
{
if (mutex)
CloseHandle(mutex);
if (!utils::check_mutex())
return 0;
}
SetConsoleCtrlHandler(CtrlHandler, TRUE);
CreateThread(NULL, 0, GuiWindowThread, NULL, 0, NULL);
Gui::CreateGuiWindow();
StartServer();
MSG msg;