Parcourir la source

修复一些bug,优化一些问题

zhangyang il y a 5 ans
Parent
commit
83929ef4e3

BIN
bin/Win32/Release/setup/zhipuzi_pay_plugin_setup_1.0.0.3.exe


+ 1 - 1
bin/Win32/Release/setup/智铺子收银插件安装脚本.nsi

@@ -2,7 +2,7 @@
 
 ; HM NIS Edit Wizard helper defines
 !define PRODUCT_NAME "智铺子收银插件"
-!define PRODUCT_VERSION "1.0.0.3"
+!define PRODUCT_VERSION "1.0.0.4"
 !define PRODUCT_PUBLISHER "深圳市迅享智慧云科技有限公司"
 !define PRODUCT_WEB_SITE "https://www.zhipuzi.com"
 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe"

BIN
bin/Win32/Release/zhipuzi_pay_plugin/zhipuzi_pay_plugin.exe


BIN
bin/Win32/Release/zhipuzi_pay_plugin/zpzDll.dll


BIN
lib/debug/zpzDll.lib


BIN
lib/release/zpzDll.lib


+ 0 - 2
zhipuzi_pay_plugin/helper/define.h

@@ -15,8 +15,6 @@
 
 #define WM_MENU_SYSTEM_SETTING 10010
 
-#define WM_SHOUKUAN_UPDATE_FOCUS 10011
-
 #define WM_SHOUKUAN_STATUS_NEEDPASSWORD 10012
 #define WM_SHOUKUAN_STATUS_SUCCESS 10013
 #define WM_SHOUKUAN_STATUS_FAIL 10014

BIN
zhipuzi_pay_plugin/resource/zhipuzi_pay_plugin.aps


BIN
zhipuzi_pay_plugin/resource/zhipuzi_pay_plugin.rc


+ 0 - 11
zhipuzi_pay_plugin/wnd/CShoukuanWnd.cpp

@@ -199,14 +199,6 @@ LRESULT CShoukuanWnd::OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHa
 	return 0;
 }
 
-LRESULT CShoukuanWnd::OnShoukuanUpdateFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-{
-	UpdateFocus();
-
-	bHandled = TRUE;
-	return 0;
-}
-
 LRESULT CShoukuanWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
 	LRESULT lRes = 0;
@@ -240,9 +232,6 @@ LRESULT CShoukuanWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 	case WM_MOUSEHOVER:
 		lRes = OnMouseMove(uMsg, wParam, lParam, bHandled);
 		break;
-	case WM_SHOUKUAN_UPDATE_FOCUS:
-		lRes = OnShoukuanUpdateFocus(uMsg, wParam, lParam, bHandled);
-		break;
 	case WM_SHOUKUAN_STATUS_NEEDPASSWORD:
 		lRes = OnShoukuanNeedPassword(uMsg, wParam, lParam, bHandled);
 		break;

+ 0 - 2
zhipuzi_pay_plugin/wnd/CShoukuanWnd.h

@@ -57,8 +57,6 @@ public:
 
 	LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-	LRESULT OnShoukuanUpdateFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
-
 	LRESULT OnShoukuanNeedPassword(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
 	LRESULT OnShoukuanSuccess(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

+ 51 - 2
zhipuzi_pay_plugin/wnd/CValueWnd.cpp

@@ -88,7 +88,47 @@ void CValueWnd::TopMostWnd()
 
 		if (m_is_show_shoukuan && m_shoukuanWnd != NULL)
 		{
-			//::SendMessage(m_shoukuanWnd->GetHWND(), WM_SHOUKUAN_UPDATE_FOCUS, NULL, NULL);
+			::SetWindowPos(m_shoukuanWnd->GetHWND(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+		}
+
+		if (m_is_show_tuikuan && m_tuikuanWnd != NULL)
+		{
+			::SetWindowPos(m_tuikuanWnd->GetHWND(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+		}
+
+		if (m_is_show_jiaoyijilu && m_jiaoyijiluWnd != NULL)
+		{
+			::SetWindowPos(m_jiaoyijiluWnd->GetHWND(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+		}
+
+		if (m_is_show_jiaoyihuizong && m_jiaoyihuizongWnd != NULL)
+		{
+			::SetWindowPos(m_jiaoyihuizongWnd->GetHWND(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+		}
+
+		if (m_is_show_setting && m_settingWnd != NULL)
+		{
+			::SetWindowPos(m_settingWnd->GetHWND(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+		}
+
+		if (pMenu)
+		{
+			::SetWindowPos(pMenu->GetHWND(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+		}
+
+		if (pDingweiWnd)
+		{
+			::SetWindowPos(pDingweiWnd->GetHWND(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+		}
+
+		if (pDingweiInfoWnd)
+		{
+			::SetWindowPos(pDingweiInfoWnd->GetHWND(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
+		}
+
+		if (pOcrWnd)
+		{
+			::SetWindowPos(pOcrWnd->GetHWND(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
 		}
 
 		Sleep(100);
@@ -691,7 +731,12 @@ LRESULT CValueWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
         lRes = OnTrayIcon(uMsg, wParam, lParam, bHandled);
         break;
 
-    case WM_HOOK_MESSAGE:
+	case WM_HOOK_MESSAGE:
+		lRes = OnKexianUpdate(uMsg, wParam, lParam, bHandled);
+		break;
+
+	//用这个类型,是为了绕过UAC,低权限可以用这个类型像管理员权限的进程POST消息
+    case WM_GETHOTKEY:
         lRes = OnKexianUpdate(uMsg, wParam, lParam, bHandled);
         break;
 
@@ -1216,12 +1261,16 @@ bool CValueWnd::Clear()
 	m_push->Stop();
 
 	pMenu->Close();
+	pMenu = NULL;
 
 	pDingweiWnd->Close();
+	pDingweiWnd = NULL;
 
 	pDingweiInfoWnd->Close();
+	pDingweiInfoWnd = NULL;
 
 	pOcrWnd->Close();
+	pOcrWnd = NULL;
 
 	//注销Hook
 	UninstallHook();

+ 4 - 4
zhipuzi_pay_plugin/wnd/CValueWnd.h

@@ -170,7 +170,7 @@ private:
 	CMessagePush* m_push = NULL;
 
 	//菜单窗口
-	CMenuWnd* pMenu;
+	CMenuWnd* pMenu = NULL;
 
 	//收款窗口的参数
 	bool m_is_show_shoukuan = false;
@@ -208,12 +208,12 @@ private:
 
 	//窗口定位参数
 	bool m_is_dingwei_wnd = false;
-	CDingweiWnd* pDingweiWnd;
-	CDingweiInfoWnd* pDingweiInfoWnd;
+	CDingweiWnd* pDingweiWnd = NULL;
+	CDingweiInfoWnd* pDingweiInfoWnd = NULL;
 	
 	//OCR模式的参数
 	bool m_is_orc_wnd = false;
-	COcrWnd* pOcrWnd;
+	COcrWnd* pOcrWnd = NULL;
 
 	tesseract::TessBaseAPI m_tess;
 

+ 16 - 3
zpzDll/Hook.cpp

@@ -10,7 +10,6 @@
 
 #include <algorithm>
 
-extern bool g_isWork;
 extern HWND g_hWnd;
 extern char g_sComNum[MAX_PATH];
 extern wchar_t g_wsComNum[MAX_PATH];
@@ -67,6 +66,11 @@ HANDLE WINAPI Mine_CreateFileW(
 	std::wstring wsFileName = lpFileName;
 	std::transform(wsFileName.begin(), wsFileName.end(), wsFileName.begin(), ::toupper);
 
+	//if (wsFileName.find(L"COM1") != wsFileName.npos)
+	//{
+	//	int a = 1;
+	//}
+
 	std::wstring wsComNum = g_wsComNum;
 	if (wsComNum != L"" && wsFileName.find(g_wsComNum) != wsFileName.npos)
 	{
@@ -78,6 +82,8 @@ HANDLE WINAPI Mine_CreateFileW(
 
 			//把这个进程监听的端口号,存起来;
 			g_wsworkComNum = g_wsComNum;
+
+			g_sworkComNum = "";
 		}
 	}
 
@@ -99,6 +105,11 @@ HANDLE WINAPI Mine_CreateFileA(
 	std::string FileName = lpFileName;
 	std::transform(FileName.begin(), FileName.end(), FileName.begin(), ::toupper);
 
+	//if (FileName.find("COM1") != FileName.npos)
+	//{
+	//	int a = 1;
+	//}
+
 	std::string sComNum = g_sComNum;
 	if (sComNum != "" && FileName.find(g_sComNum) != FileName.npos)
 	{
@@ -110,6 +121,8 @@ HANDLE WINAPI Mine_CreateFileA(
 
 			//把这个进程监听的端口号,存起来;
 			g_sworkComNum = g_sComNum;
+
+			g_wsworkComNum = L"";
 		}
 	}
 
@@ -141,8 +154,8 @@ BOOL WINAPI Mine_WriteFile(
 		memcpy_s(g_data + data_length, nWirten, (char*)lpBuffer, nWirten);
 		data_length += nWirten;
 
-		//再发一个消息通知插件,去读取消息
-		::PostMessage(g_hWnd, WM_HOOK_MESSAGE, 0, 0);
+		//再发一个消息通知插件,去读取消息(//用这个类型,是为了绕过UAC,低权限可以用这个类型像管理员权限的进程POST消息)
+		::PostMessage(g_hWnd, WM_GETHOTKEY, 0, 0);
 	}
 	
 	return ret;

+ 0 - 2
zpzDll/define.h

@@ -6,5 +6,3 @@
 #include <windows.h>
 #include <stdio.h>
 
-#define WM_HOOK_MESSAGE 12222
-

+ 4 - 0
zpzDll/zpzDll.vcxproj

@@ -102,6 +102,8 @@
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalLibraryDirectories>$(SolutionDir)lib\debug</AdditionalLibraryDirectories>
       <AdditionalDependencies>detours.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <UACExecutionLevel>AsInvoker</UACExecutionLevel>
+      <UACUIAccess>false</UACUIAccess>
     </Link>
     <PostBuildEvent>
       <Command>copy $(TargetPath) $(SolutionDir)bin\$(Platform)\$(Configuration)\zhipuzi_pay_plugin\
@@ -142,6 +144,8 @@ copy $(SolutionDir)temp\link\$(Platform)\$(Configuration)\$(ProjectName)\zpzDll.
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalLibraryDirectories>$(SolutionDir)lib\release</AdditionalLibraryDirectories>
       <AdditionalDependencies>detours.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <UACExecutionLevel>AsInvoker</UACExecutionLevel>
+      <UACUIAccess>false</UACUIAccess>
     </Link>
     <PostBuildEvent>
       <Command>copy $(TargetPath) $(SolutionDir)bin\$(Platform)\$(Configuration)\zhipuzi_pay_plugin\

+ 2 - 2
zpzDll/zpzDll.vcxproj.user

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LocalDebuggerCommand>D:\Program Files (x86)\PosPalTouch\PosTouch.exe</LocalDebuggerCommand>
+    <LocalDebuggerCommand>D:\博优软件\博优云餐厅\BYCloudCY.exe</LocalDebuggerCommand>
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-    <LocalDebuggerWorkingDirectory>D:\Program Files (x86)\PosPalTouch</LocalDebuggerWorkingDirectory>
+    <LocalDebuggerWorkingDirectory>D:\博优软件\博优云餐厅</LocalDebuggerWorkingDirectory>
   </PropertyGroup>
   <PropertyGroup>
     <ShowAllFiles>true</ShowAllFiles>