瀏覽代碼

1、关闭指令;
2、线程优化;

sat23 3 年之前
父節點
當前提交
e72ca0cb7d

+ 3 - 0
StartAPPbyCOM/StartAPPbyCOM/Assist.cpp

@@ -1,11 +1,13 @@
 #include "Assist.h"
 #include <time.h>
 #include <locale.h>
+#include "CritSection.h"
 
 namespace Assist
 {
 	int frameWidth = 2;//6
 	int titleBarHeight = 27;//29
+	ThreadSection g_csTextLog;
 
 	TCHAR g_szCurModuleFileName[MAX_PATH];
 	TCHAR g_szCurModuleDir[MAX_PATH];
@@ -324,6 +326,7 @@ namespace Assist
 
 	void WriteTextLog(const TCHAR* format, ...)
 	{
+		AutoThreadSection aSection(&g_csTextLog);
 		// 获取今年年份;
 		__time64_t gmt = time(NULL);// 获取当前日历时间(1900-01-01开始的Unix时间戳);
 		struct tm gmtm = { 0 };

+ 6 - 0
StartAPPbyCOM/StartAPPbyCOM/CSerialPort/src/SerialPortWinBase.cpp

@@ -1,6 +1,7 @@
 #include "CSerialPort/SerialPortWinBase.h"
 
 #include <iostream>
+#include "../../Assist.h"
 
 std::wstring stringToWString(const std::string &str)
 {
@@ -563,9 +564,11 @@ int CSerialPortWinBase::writeData(const char *data, int maxSize)
             if (bResult)
             {
                 // write ok
+                Assist::WriteTextLog(_T("1-write ok"));
             }
             else
             {
+                Assist::WriteTextLog(_T("1-WriteError"));
                 lastError = itas109::/*SerialPortError::*/ WriteError;
                 dRet = (DWORD)-1;
             }
@@ -576,9 +579,11 @@ int CSerialPortWinBase::writeData(const char *data, int maxSize)
         {
             if (WriteFile(m_handle, (void *)data, (DWORD)maxSize, &dRet, NULL))
             {
+                Assist::WriteTextLog(_T("write ok"));
             }
             else
             {
+                Assist::WriteTextLog(_T("WriteError"));
                 lastError = itas109::/*SerialPortError::*/ WriteError;
                 dRet = (DWORD)-1;
             }
@@ -586,6 +591,7 @@ int CSerialPortWinBase::writeData(const char *data, int maxSize)
     }
     else
     {
+        Assist::WriteTextLog(_T("串口未打开"));
         lastError = itas109::/*SerialPortError::*/ NotOpenError;
         dRet = (DWORD)-1;
     }

+ 12 - 6
StartAPPbyCOM/StartAPPbyCOM/SerialPortManager.cpp

@@ -11,7 +11,7 @@
 
 char cmd_receive_start_app[6]{ 0xAA, 0x06, 0x11, 0x01, 0x94, 0xDE };
 char cmd_send_started_app[5]{ 0xAB, 0x05, 0x0A, 0xDF, 0x4E };
-
+char cmd_send_close_app[6]{ 0xAA, 0x06, 0x11, 0x02, 0xA4, 0xBD };
 
 
 SerialPortSlot::SerialPortSlot(CSerialPort& serialPort, HANDLE startAPPEvent)
@@ -156,6 +156,7 @@ void SerialPortManager::release()
 	m_hStartEvent = NULL;
 }
 
+#include "Assist.h"
 int SerialPortManager::listenCOMandStartApp(const TCHAR* szAppPath, const TCHAR* szAppArgs)
 {
 	int ret = 0;
@@ -169,18 +170,18 @@ int SerialPortManager::listenCOMandStartApp(const TCHAR* szAppPath, const TCHAR*
 			ResetEvent(m_hStartEvent);
 
 			if ((ret = startAPP(szAppPath, szAppArgs)) != 0)
-				printf("Error, startAPP failed! ret=%d\n", ret);
+				Assist::WriteTextLog(_T("Error, startAPP failed! ret=%d"), ret);
 			else
-				printf("Success, startAPP finished!\n");
+				Assist::WriteTextLog(_T("Success, startAPP finished!\n"));
 
 			if ((ret = writeData(cmd_send_started_app, sizeof(cmd_send_started_app))) != 0)
-				printf("Error, Respond failed! ret=%d\n", ret);
+				Assist::WriteTextLog(_T("Error, Respond failed! ret=%d\n"), ret);
 			else
-				printf("Respond success!\n");
+				Assist::WriteTextLog(_T("Respond success!\n"));
 		}
 		else
 		{
-			printf("Wait for start app event error! dwRet=%ld\n", dwRet);
+			Assist::WriteTextLog(_T("Wait for start app event error! dwRet=%ld"), dwRet);
 		}
 	}
 
@@ -192,6 +193,11 @@ int SerialPortManager::sendStartedApp()
 	return writeData(cmd_send_started_app, sizeof(cmd_send_started_app));
 }
 
+int SerialPortManager::sendCloseApp()
+{
+	return writeData(cmd_send_close_app, sizeof(cmd_send_close_app));
+}
+
 int SerialPortManager::writeData(const char* szBuf, int size)
 {
 	int ret = 0;

+ 1 - 0
StartAPPbyCOM/StartAPPbyCOM/SerialPortManager.h

@@ -42,6 +42,7 @@ public:
 	virtual int listenCOMandStartApp(const TCHAR* szAppPath, const TCHAR* szAppArgs);
 
 	virtual int sendStartedApp();
+	virtual int sendCloseApp();
 protected:
 	virtual void release();
 

+ 28 - 5
StartAPPbyCOM/StartAPPbyCOM/StartAPPbyCOM.cpp

@@ -6,8 +6,8 @@
 
 #include "CmdHelper.h"
 #include "SerialPortManager.h"
-
 #include "Assist.h"
+#include <thread>
 
 #ifdef _UNICODE
 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"wmainCRTStartup\"")
@@ -60,12 +60,12 @@ int _tmain(int argc, TCHAR* argv[])
 		Assist::CloseProcess(_T("FeishuRooms.exe"));
 #pragma warning(disable:28159)
 		// 判断是否有任务栏;
-        DWORD dwTickCount = GetTickCount();
+        DWORD dwTickCount = GetTickCount64();
 		while (FindWindow(_T("Shell_TrayWnd"), NULL) == NULL)
 		{
 			Sleep(500);
             Assist::WriteTextLog(_T("未找到系统任务栏"));
-            if (GetTickCount() - dwTickCount > 20000)
+            if (GetTickCount64() - dwTickCount > 20000)
             {
                 Assist::WriteTextLog(_T("未找到系统任务栏超过20秒"));
                 break;
@@ -75,12 +75,12 @@ int _tmain(int argc, TCHAR* argv[])
         Assist::WriteTextLog(_T("找到系统任务栏,开始启动飞书进程"));
 		// 启动飞书;
 		Assist::StartApp(tcsAppPath.c_str(), tcsAppArgs.c_str());
-        dwTickCount = GetTickCount();
+        dwTickCount = GetTickCount64();
 		while (Assist::GetWindowNameWnd(_T("FeishuRooms.exe"), _T("Feishu Rooms")) == NULL)
 		{
 			Sleep(500);
             Assist::WriteTextLog(_T("飞书启动中……"));
-            if (GetTickCount() - dwTickCount > 10000)
+            if (GetTickCount64() - dwTickCount > 15000)
             {
                 Assist::WriteTextLog(_T("飞书启动超过10秒,默认启动失败"));
                 break;
@@ -90,6 +90,29 @@ int _tmain(int argc, TCHAR* argv[])
 		// 发送串口消息;
         spManager.sendStartedApp();
 	}
+
+    std::thread t([&]() {
+        bool bStart = true;
+		while ( true )
+		{
+            if (Assist::GetProcessId(_T("FeishuRooms.exe")) == 0)
+            {
+                if (bStart)
+                {
+                    Assist::WriteTextLog(_T("飞书已关闭, 发送关闭命令给Android"));
+                    spManager.sendCloseApp();
+                    bStart = false;
+                }
+			}
+            else
+            {
+                bStart = true;
+            }
+
+            Sleep(50);
+		}
+     });
+    t.detach();
 #endif
 
     if ((ret = spManager.listenCOMandStartApp(tcsAppPath.c_str(), tcsAppArgs.c_str())) != 0)

+ 1 - 0
StartAPPbyCOM/StartAPPbyCOM/StartAPPbyCOM.vcxproj

@@ -170,6 +170,7 @@
   <ItemGroup>
     <ClInclude Include="Assist.h" />
     <ClInclude Include="CmdHelper.h" />
+    <ClInclude Include="CritSection.h" />
     <ClInclude Include="CSerialPort\include\CSerialPort\osplatformutil.h" />
     <ClInclude Include="CSerialPort\include\CSerialPort\SerialPort.h" />
     <ClInclude Include="CSerialPort\include\CSerialPort\SerialPortBase.h" />

+ 3 - 0
StartAPPbyCOM/StartAPPbyCOM/StartAPPbyCOM.vcxproj.filters

@@ -86,6 +86,9 @@
     <ClInclude Include="Assist.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="CritSection.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="StartAPPbyCOM.rc">