diff --git a/build/windows/HGWebService/HGWebService.vcxproj b/build/windows/HGWebService/HGWebService.vcxproj index 4b8824f9..39fafaf1 100644 --- a/build/windows/HGWebService/HGWebService.vcxproj +++ b/build/windows/HGWebService/HGWebService.vcxproj @@ -88,6 +88,7 @@ + @@ -101,6 +102,9 @@ + + + 16.0 Win32Proj @@ -323,6 +327,9 @@ /ignore:4098,4099,4075 /LTCG %(AdditionalOptions) RequireAdministrator + + OEM_HUAGAO;%(PreprocessorDefinitions) + @@ -348,6 +355,9 @@ copy $(OutDir)HGWebService.exe $(SolutionDir)..\..\..\release\win\x86\Release\ + + OEM_HUAGAO;%(PreprocessorDefinitions) + @@ -373,6 +383,9 @@ copy $(OutDir)HWWebService.exe $(SolutionDir)..\..\..\release\win\x86\Release\ + + OEM_HANWANG;%(PreprocessorDefinitions) + @@ -398,6 +411,9 @@ copy $(OutDir)ZGWebService.exe $(SolutionDir)..\..\..\release\win\x86\Release\ + + OEM_ZIGUANG;%(PreprocessorDefinitions) + @@ -423,6 +439,9 @@ copy $(OutDir)ZJWebService.exe $(SolutionDir)..\..\..\release\win\x86\Release\ + + OEM_ZHONGJING;%(PreprocessorDefinitions) + @@ -448,6 +467,9 @@ copy $(OutDir)LSCWebService.exe $(SolutionDir)..\..\..\release\win\x86\Release\ + + OEM_LISICHENG;%(PreprocessorDefinitions) + @@ -473,6 +495,9 @@ copy $(OutDir)CTSWebService.exe $(SolutionDir)..\..\..\release\win\x86\Release\ + + OEM_CANGTIAN;%(PreprocessorDefinitions) + @@ -491,6 +516,9 @@ /ignore:4098,4099,4075 /LTCG %(AdditionalOptions) RequireAdministrator + + OEM_HUAGAO;%(PreprocessorDefinitions) + @@ -516,6 +544,9 @@ copy $(OutDir)HGWebService.exe $(SolutionDir)..\..\..\release\win\x64\Release\ + + OEM_HUAGAO;%(PreprocessorDefinitions) + @@ -541,6 +572,9 @@ copy $(OutDir)HWWebService.exe $(SolutionDir)..\..\..\release\win\x64\Release\ + + OEM_HANWANG;%(PreprocessorDefinitions) + @@ -566,6 +600,9 @@ copy $(OutDir)ZGWebService.exe $(SolutionDir)..\..\..\release\win\x64\Release\ + + OEM_ZIGUANG;%(PreprocessorDefinitions) + @@ -591,6 +628,9 @@ copy $(OutDir)ZJWebService.exe $(SolutionDir)..\..\..\release\win\x64\Release\ + + OEM_ZHONGJING;%(PreprocessorDefinitions) + @@ -616,6 +656,9 @@ copy $(OutDir)LSCWebService.exe $(SolutionDir)..\..\..\release\win\x64\Release\ + + OEM_LISICHENG;%(PreprocessorDefinitions) + @@ -641,6 +684,9 @@ copy $(OutDir)CTSWebService.exe $(SolutionDir)..\..\..\release\win\x64\Release\ + + OEM_CANGTIAN;%(PreprocessorDefinitions) + diff --git a/sdk/webservice/HGWebService.rc b/sdk/webservice/HGWebService.rc new file mode 100644 index 00000000..e43f85a1 --- /dev/null +++ b/sdk/webservice/HGWebService.rc @@ -0,0 +1,83 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// 中文(简体,中国) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +#pragma code_page(936) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +#if defined(OEM_HANWANG) +IDI_ICON_HGWEBSERVICE ICON "res\\HanvonScan_App.ico" +#elif defined(OEM_LISICHENG) +IDI_ICON_HGWEBSERVICE ICON "res\\LanxumScan_App.ico" +#elif defined(OEM_CANGTIAN) +IDI_ICON_HGWEBSERVICE ICON "res\\CumtennScan_App.ico" +#elif defined(OEM_ZHONGJING) +IDI_ICON_HGWEBSERVICE ICON "res\\MicrotekScan_App.ico" +#elif defined(OEM_ZIGUANG) +IDI_ICON_HGWEBSERVICE ICON "res\\UniScan_App.ico" +#else +IDI_ICON_HGWEBSERVICE ICON "res\\HuaGoScan_App.ico" +#endif + +#endif // 中文(简体,中国) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/sdk/webservice/WSServer.cpp b/sdk/webservice/WSServer.cpp index 40330faa..30a432c6 100644 --- a/sdk/webservice/WSServer.cpp +++ b/sdk/webservice/WSServer.cpp @@ -1,6 +1,11 @@ 锘#include "WSServer.h" #include "WSUser.h" #include "base/HGInfo.h" +#if defined(HG_CMP_MSC) +#include +extern ULONG taskbarMsgId; +extern NOTIFYICONDATAA nid; +#endif namespace ver_2 { @@ -38,6 +43,10 @@ namespace ver_2 user->Open(); ++m_currUserId; m_vectorUser.push_back(user); +#if defined(HG_CMP_MSC) + lstrcpyA(nid.szTip, "鎵弿鏈嶅姟绋嬪簭锛堝凡杩炴帴锛"); + Shell_NotifyIconA(NIM_MODIFY, &nid); +#endif } void WSServer::Command(const WSCmdParam* param) diff --git a/sdk/webservice/WebServer.cpp b/sdk/webservice/WebServer.cpp index 57c5c92e..f2369bfc 100644 --- a/sdk/webservice/WebServer.cpp +++ b/sdk/webservice/WebServer.cpp @@ -1,6 +1,11 @@ 锘#include "WebServer.h" #include "WebUser.h" #include "base/HGInfo.h" +#if defined(HG_CMP_MSC) +#include +extern ULONG taskbarMsgId; +extern NOTIFYICONDATAA nid; +#endif WebServer::WebServer(HGMsgPump msgPump) { @@ -134,6 +139,14 @@ void WebServer::DisConnect(const DisConnectParam* param) delete pUser; pUser = NULL; } + +#if defined(HG_CMP_MSC) + if (m_vectorUser.empty()) + { + lstrcpyA(nid.szTip, "鎵弿鏈嶅姟绋嬪簭锛堟湭杩炴帴锛"); + Shell_NotifyIconA(NIM_MODIFY, &nid); + } +#endif } #if defined(HG_CMP_MSC) diff --git a/sdk/webservice/main.cpp b/sdk/webservice/main.cpp index d7224dc5..479c3652 100644 --- a/sdk/webservice/main.cpp +++ b/sdk/webservice/main.cpp @@ -66,6 +66,30 @@ static void HGAPI ThreadFunc(HGThread thread, HGPointer param) } } +#if defined(HG_CMP_MSC) +#include +#include "resource.h" +#define WM_TRAY (WM_USER + 100) +ULONG taskbarMsgId = 0; +NOTIFYICONDATAA nid; +LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + if (WM_DESTROY == uMsg) + { + Shell_NotifyIconA(NIM_DELETE, &nid); + PostQuitMessage(0); + return 0; + } + else if (uMsg == taskbarMsgId) + { + //绯荤粺Explorer宕╂簝閲嶅惎鏃讹紝閲嶆柊鍔犺浇鎵樼洏 + Shell_NotifyIconA(NIM_ADD, &nid); + } + + return DefWindowProc(hWnd, uMsg, wParam, lParam); +} +#endif + #if defined(HG_CMP_MSC) int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE iPrevInstance, LPWSTR lpCmdLine, int nCmdShow) #else @@ -75,28 +99,73 @@ int main() HGBase_RegisterCrashFunc(CrashFunc, NULL); #if defined(HG_CMP_MSC) + HANDLE hMutex = CreateMutexW(NULL, FALSE, L"{1A67EFC9-B41C-4CE6-B95A-A16958E7010F}"); + assert(NULL != hMutex); + if (GetLastError() == ERROR_ALREADY_EXISTS) + { + MessageBoxA(NULL, "鎵弿鏈嶅姟宸叉墦寮", "鎻愮ず", 0); + CloseHandle(hMutex); + return -1; + } + WSADATA ws = { 0 }; int ret = WSAStartup(MAKEWORD(2, 2), &ws); assert(0 == ret); #endif curl_global_init(CURL_GLOBAL_ALL); - HGMsgPump msgPump = NULL; HGBase_CreateMsgPump(&msgPump); - HGThread thread = NULL; HGBase_OpenThread(ThreadFunc, msgPump, &thread); + +#if defined(HG_CMP_MSC) + WNDCLASSA wc = { 0 }; + wc.style = NULL; + wc.hIcon = NULL; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.lpfnWndProc = WndProc; + wc.hbrBackground = NULL; + wc.lpszMenuName = NULL; + wc.lpszClassName = "HGWebServie"; + wc.hCursor = NULL; + RegisterClassA(&wc); + + HWND hWnd = CreateWindowExA(WS_EX_TOOLWINDOW, "HGWebServie", "HGWebServie", WS_POPUP, CW_USEDEFAULT, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); + + taskbarMsgId = RegisterWindowMessageA("TaskbarCreated"); + nid.cbSize = sizeof(NOTIFYICONDATAA); + nid.hWnd = hWnd; + nid.uID = IDI_ICON_HGWEBSERVICE; + nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_INFO; + nid.uCallbackMessage = WM_TRAY; + nid.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON_HGWEBSERVICE)); + lstrcpyA(nid.szTip, "鎵弿鏈嶅姟绋嬪簭锛堟湭杩炴帴锛"); + Shell_NotifyIconA(NIM_ADD, &nid); + + ShowWindow(hWnd, SW_HIDE); + UpdateWindow(hWnd); + + MSG msg; + while (GetMessage(&msg, NULL, 0, 0)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } +#endif + HGBase_CloseThread(thread); thread = NULL; - HGBase_DestroyMsgPump(msgPump); msgPump = NULL; - curl_global_cleanup(); #if defined(HG_CMP_MSC) WSACleanup(); + CloseHandle(hMutex); #endif return 0; } diff --git a/sdk/webservice/res/CumtennScan_App.ico b/sdk/webservice/res/CumtennScan_App.ico new file mode 100644 index 00000000..62100d5b Binary files /dev/null and b/sdk/webservice/res/CumtennScan_App.ico differ diff --git a/sdk/webservice/res/HanvonScan_App.ico b/sdk/webservice/res/HanvonScan_App.ico new file mode 100644 index 00000000..cf47eb31 Binary files /dev/null and b/sdk/webservice/res/HanvonScan_App.ico differ diff --git a/sdk/webservice/res/HuaGoScan_App.ico b/sdk/webservice/res/HuaGoScan_App.ico new file mode 100644 index 00000000..bb062276 Binary files /dev/null and b/sdk/webservice/res/HuaGoScan_App.ico differ diff --git a/sdk/webservice/res/LanxumScan_App.ico b/sdk/webservice/res/LanxumScan_App.ico new file mode 100644 index 00000000..3f04624b Binary files /dev/null and b/sdk/webservice/res/LanxumScan_App.ico differ diff --git a/sdk/webservice/res/MicrotekScan_App.ico b/sdk/webservice/res/MicrotekScan_App.ico new file mode 100644 index 00000000..46c1adf8 Binary files /dev/null and b/sdk/webservice/res/MicrotekScan_App.ico differ diff --git a/sdk/webservice/res/UniScan_App.ico b/sdk/webservice/res/UniScan_App.ico new file mode 100644 index 00000000..0ef56bae Binary files /dev/null and b/sdk/webservice/res/UniScan_App.ico differ diff --git a/sdk/webservice/resource.h b/sdk/webservice/resource.h new file mode 100644 index 00000000..f0d151f2 --- /dev/null +++ b/sdk/webservice/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ 生成的包含文件。 +// 供 HGWebService.rc 使用 +// +#define IDI_ICON_HGWEBSERVICE 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif