Lxtalk.dpr 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. program Lxtalk;
  2. uses
  3. FastMM4,
  4. mybean.console,
  5. ceflib,
  6. Windows,
  7. IniFiles,
  8. Forms,
  9. StrUtils,
  10. SysUtils,
  11. Dialogs,
  12. IdSMTP,
  13. IdMessage,
  14. LoggerImport,
  15. AddFaceFrm in 'AddFaceFrm.pas' {AddFaceFrm},
  16. AddFriendFrm in 'AddFriendFrm.pas' {AddFriendForm},
  17. AddFriendRequestFrm in 'AddFriendRequestFrm.pas' {AddFriendRequestForm},
  18. AddGroupFrm in 'AddGroupFrm.pas' {AddGroupForm},
  19. AddrBookUserFrm in 'AddrBookUserFrm.pas' {AddrBookUserForm},
  20. AddUserFrm in 'AddUserFrm.pas' {AddUserForm},
  21. AddWebTab in 'AddWebTab.pas' {Form1},
  22. AddWebTabFrm in 'AddWebTabFrm.pas' {AddWebTabForm},
  23. AlertFrm in 'AlertFrm.pas' {AlertForm},
  24. BindTel in 'BindTel.pas' {BindTelFrm},
  25. CalcFileCRC32 in 'CalcFileCRC32.pas',
  26. CalcFileMD5 in 'CalcFileMD5.pas',
  27. ChangePassFrm in 'ChangePassFrm.pas' {ChangePassForm},
  28. ConfirmCannotLoadFileFrm in 'ConfirmCannotLoadFileFrm.pas' {ConfirmCannotLoadFileForm},
  29. ConfirmReplaceFileFrm in 'ConfirmReplaceFileFrm.pas' {ConfirmReplaceFileForm},
  30. ConfirmReplaceNDFileFrm in 'ConfirmReplaceNDFileFrm.pas' {ConfirmReplaceNDFileForm},
  31. ConfirmSendOfflineFileFrm in 'ConfirmSendOfflineFileFrm.pas' {ConfirmSendOfflineFileForm},
  32. CopyScreenFrm in 'CopyScreenFrm.pas' {CopyScreenForm},
  33. CreateTeamFrm in 'CreateTeamFrm.pas' {CreateTeamForm},
  34. CustomFacesManagerFrm in 'CustomFacesManagerFrm.pas' {CustomFacesManagerForm},
  35. DESUnit in 'DESUnit.pas',
  36. GroupManagerFrm in 'GroupManagerFrm.pas' {GroupManagerForm},
  37. ImportAddrBookFrm in 'ImportAddrBookFrm.pas' {ImportAddrBookForm},
  38. ImportAddrbookUtils in 'ImportAddrbookUtils.pas',
  39. ImportGuideFrm in 'ImportGuideFrm.pas' {ImportGuideFrom},
  40. Impstringgrid in 'Impstringgrid.pas',
  41. LXTConst in 'LXTConst.pas',
  42. MainFrm in 'MainFrm.pas' {MainForm},
  43. MD5_32 in 'MD5_32.pas',
  44. MessageBoxFrm in 'MessageBoxFrm.pas' {MessageBoxForm},
  45. AsynActions in 'Actions\AsynActions.pas',
  46. AsynRequestUserInfo in 'Actions\AsynRequestUserInfo.pas',
  47. AsynRequestUserStatus in 'Actions\AsynRequestUserStatus.pas',
  48. AsynResponseUserInfo in 'Actions\AsynResponseUserInfo.pas',
  49. CA in 'CA\CA.pas',
  50. ConditionConfig in 'Condition\ConditionConfig.pas',
  51. LimitCondition in 'Condition\LimitCondition.pas',
  52. DownloadFaceWithHttp in 'FileTransimt\DownloadFaceWithHttp.pas',
  53. FileDownloaderWithNode in 'FileTransimt\FileDownloaderWithNode.pas',
  54. FileStreamTransmitter in 'FileTransimt\FileStreamTransmitter.pas',
  55. FileTransferWithNode in 'FileTransimt\FileTransferWithNode.pas',
  56. FileTransimt_OldCode in 'FileTransimt\FileTransimt_OldCode.pas',
  57. FileTransmitAdapter in 'FileTransimt\FileTransmitAdapter.pas',
  58. HttpDownloader in 'FileTransimt\HttpDownloader.pas',
  59. HTTPFileDownloader in 'FileTransimt\HTTPFileDownloader.pas',
  60. OfflineFileConfig in 'FileTransimt\OfflineFileConfig.pas',
  61. TransmiteFileMission in 'FileTransimt\TransmiteFileMission.pas',
  62. UploadOrDownloadFileMission in 'FileTransimt\UploadOrDownloadFileMission.pas',
  63. MainFormContrller in 'FormController\MainFormContrller.pas',
  64. MainFormFooter in 'FormController\MainFormFooter.pas' {MainFrmFooter},
  65. OptionFormController in 'FormController\OptionFormController.pas',
  66. TalkFormController in 'FormController\TalkFormController.pas',
  67. GroupClient in 'Group\GroupClient.pas',
  68. GroupConfig in 'Group\GroupConfig.pas',
  69. GroupMonitor in 'Group\GroupMonitor.pas',
  70. GroupProcess in 'Group\GroupProcess.pas',
  71. GroupProtocols in 'Group\GroupProtocols.pas',
  72. Groups in 'Group\Groups.pas',
  73. GroupService in 'Group\GroupService.pas',
  74. GroupUtility in 'Group\GroupUtility.pas',
  75. GroupWebSocket in 'Group\GroupWebSocket.pas',
  76. IntfTeamTalkForm in 'Group\IntfTeamTalkForm.pas',
  77. TeamsAdapter in 'Group\TeamsAdapter.pas',
  78. TeamShareAdapter in 'Group\TeamShareAdapter.pas',
  79. BranchsProcessor in 'Processor\BranchsProcessor.pas',
  80. CommonProcessor in 'Processor\CommonProcessor.pas',
  81. CompanyProcessor in 'Processor\CompanyProcessor.pas',
  82. FriendsProcessor in 'Processor\FriendsProcessor.pas',
  83. TeamsProcessor in 'Processor\TeamsProcessor.pas',
  84. UsersProcessor in 'Processor\UsersProcessor.pas',
  85. BaseService in 'Services\BaseService.pas',
  86. BranchService in 'Services\BranchService.pas',
  87. ChromeMessageService in 'Services\ChromeMessageService.pas',
  88. ConfigService in 'Services\ConfigService.pas',
  89. CurrentContentService in 'Services\CurrentContentService.pas',
  90. DirectoryService in 'Services\DirectoryService.pas',
  91. FaceService in 'Services\FaceService.pas',
  92. FriendsService in 'Services\FriendsService.pas',
  93. HtmlService in 'Services\HtmlService.pas',
  94. MessagesHander in 'Services\MessagesHander.pas',
  95. TeamsService in 'Services\TeamsService.pas',
  96. TextMessageService in 'Services\TextMessageService.pas',
  97. UserRemarkService in 'Services\UserRemarkService.pas',
  98. UsersService in 'Services\UsersService.pas',
  99. WorkmatesService in 'Services\WorkmatesService.pas',
  100. BaseChromeView in 'Views\BaseChromeView.pas' {BaseChromeViewForm},
  101. DevToolChromeFrm in 'Views\DevToolChromeFrm.pas' {DevToolChromeForm},
  102. ViewManager in 'Views\ViewManager.pas',
  103. EmbeddedView in 'Views\EmbeddedView\EmbeddedView.pas' {EmbeddedViewForm},
  104. SettingView in 'Views\SettingViews\SettingView.pas' {SettingViewForm},
  105. TalkFormFactory in 'Views\TalkViews\TalkFormFactory.pas',
  106. TalkLayout in 'Views\TalkViews\TalkLayout.pas' {TalkLayoutForm},
  107. TalkMainView in 'Views\TalkViews\TalkMainView.pas' {TalkMainViewForm},
  108. TalkMainViewScope in 'Views\TalkViews\TalkMainViewScope.pas',
  109. TalkPersonalToolsView in 'Views\TalkViews\TalkPersonalToolsView.pas' {TalkPersonalToolsViewForm},
  110. TalkTeamSideView in 'Views\TalkViews\TalkTeamSideView.pas' {TalkTeamSideViewForm},
  111. TalkTeamToolsView in 'Views\TalkViews\TalkTeamToolsView.pas' {TalkTeamToolsViewForm},
  112. TalkUserInfoSideView in 'Views\TalkViews\TalkUserInfoSideView.pas' {TalkUserInfoSideViewForm},
  113. TalkVideoSideView in 'Views\TalkViews\TalkVideoSideView.pas' {TalkVideoSideViewForm},
  114. UITalkFormBase in 'Views\TalkViews\UITalkFormBase.pas',
  115. UITalkPersonalForm in 'Views\TalkViews\UITalkPersonalForm.pas',
  116. UITalkTeamForm in 'Views\TalkViews\UITalkTeamForm.pas',
  117. UserCardView in 'Views\UserViews\UserCardView.pas' {UserCardViewForm},
  118. UserCardDetailView in 'Views\UserViews\UserCardDetailView.pas' {UserCardDetailViewForm},
  119. Authority in 'Windows\Authority.pas',
  120. RealICQUtility in 'Utility\RealICQUtility.pas',
  121. SendFolderFrm in 'SendFolderFrm.pas' {SendFolderForm},
  122. ShareUtils in 'ShareUtils.pas',
  123. SMSFrm in 'SMSFrm.pas' {SMSForm},
  124. SystemMessageFrm in 'SystemMessageFrm.pas' {SystemMessageForm},
  125. TalkingFrm in 'TalkingFrm.pas' {TalkingForm},
  126. TeamOptionsFrm in 'TeamOptionsFrm.pas' {TeamOptionsForm},
  127. TestCase in 'TestCase.pas' {Form6},
  128. TrueHiddenMainFrm in 'TrueHiddenMainFrm.pas' {TrueHiddenMainForm},
  129. U_SnapRect in 'U_SnapRect.pas',
  130. MessagesManagerFrm in 'MessagesManagerFrm.pas' {MessagesManagerForm},
  131. ModifyFaceFrm in 'ModifyFaceFrm.pas' {ModifyFaceForm},
  132. MouseHook in 'MouseHook.pas',
  133. MoveFaceFrm in 'MoveFaceFrm.pas' {MoveFaceForm},
  134. MultiSendSMSFrm in 'MultiSendSMSFrm.pas' {MultiSendSMSForm},
  135. MyInputBoxFrm in 'MyInputBoxFrm.pas' {MyInputBoxForm},
  136. NotifyAlertFrm in 'NotifyAlertFrm.pas' {NotifyAlertForm},
  137. NotReadMessageBoxFrm in 'NotReadMessageBoxFrm.pas' {NotReadMessageBoxForm},
  138. OnlineOfflineAlertFrm in 'OnlineOfflineAlertFrm.pas' {OnlineOfflineAlertForm},
  139. OptionsFrm in 'OptionsFrm.pas' {OptionsForm},
  140. ProcessingFrm in 'ProcessingFrm.pas' {ProcessingForm},
  141. QRCodeFrm in 'QRCodeFrm.pas' {QRCodeForm},
  142. QueryIpWry in 'QueryIpWry.pas',
  143. RealICQ_TLB in 'RealICQ_TLB.pas',
  144. RealICQModel in 'RealICQModel.pas',
  145. RealOAMessengerAutoServer in 'RealOAMessengerAutoServer.pas',
  146. ReceiveFolderRequestFrm in 'ReceiveFolderRequestFrm.pas' {ReceiveFolderRequestForm},
  147. RegFrm in 'RegFrm.pas' {RegForm},
  148. AboutFrm in 'AboutFrm.pas' {AboutForm},
  149. BaseScope in 'WebApps\BaseScope.pas',
  150. BaseWebApp in 'WebApps\BaseWebApp.pas',
  151. UserCardScope in 'WebApps\UserCardScope.pas',
  152. UserCardWebApp in 'WebApps\UserCardWebApp.pas',
  153. SettingWebApp in 'WebApps\SettingWebApp.pas',
  154. SettingScope in 'WebApps\SettingScope.pas',
  155. SettingService in 'Services\SettingService.pas',
  156. TalkPersonalView in 'Views\TalkPersonalView.pas' {TalkPersonalForm},
  157. BaseIDView in 'Views\BaseIDView.pas' {BaseIDViewForm},
  158. UploaderTask in 'FileTransimt\UploaderTask.pas',
  159. NetDiskWebApp in 'WebApps\NetDiskWebApp.pas',
  160. NetDiskScope in 'WebApps\NetDiskScope.pas',
  161. GuideView in 'Views\GuideView.pas' {GuideViewForm},
  162. LBCompanyView in 'Views\LBCompanyView.pas' {LBCompanyViewForm},
  163. LBUserViewService in 'Services\LBUserViewService.pas',
  164. LBCompanySimpleView in 'Views\LBCompanySimpleView.pas' {LBCompanySimpleViewForm};
  165. {$R *.res}
  166. {$R uac.res}
  167. const
  168. iAtom: PChar = 'Global/lxtalk';
  169. var
  170. Handle: HWND;
  171. iLoop: Integer;
  172. function ForceForeGroundWindow(hwnd: THandle): boolean;
  173. const
  174. SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
  175. SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
  176. var
  177. ForegroundThreadID: DWORD;
  178. ThisThreadID: DWORD;
  179. timeout: DWORD;
  180. begin
  181. if IsIconic(hwnd) then
  182. ShowWindow(hwnd, SW_RESTORE); //如果窗口最小化
  183. {if GetForegroundWindow = hwnd then
  184. Result := true
  185. else}
  186. begin
  187. if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and (Win32MinorVersion > 0)))) then
  188. begin
  189. Result := false;
  190. ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
  191. ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
  192. if AttachThreadInput(ThisThreadID, ForegroundThreadID, true) then
  193. begin
  194. BringWindowToTop(hwnd);
  195. SetForegroundWindow(hwnd);
  196. AttachThreadInput(ThisThreadID, ForegroundThreadID, false);
  197. Result := (GetForegroundWindow = hwnd);
  198. end;
  199. if not Result then
  200. begin
  201. SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
  202. SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0), SPIF_SENDCHANGE);
  203. BringWindowToTop(hwnd);
  204. SetForegroundWindow(hWnd);
  205. SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
  206. end;
  207. end
  208. else
  209. begin
  210. BringWindowToTop(hwnd);
  211. SetForegroundWindow(hwnd);
  212. end;
  213. Result := (GetForegroundWindow = hwnd);
  214. end;
  215. end;
  216. procedure ActiveExistsClient;
  217. var
  218. hWndStart, hwndLike: HWND;
  219. WndCaption: array[0..254] of char;
  220. WndClassName: array[0..254] of char;
  221. ActiveTimes: Integer;
  222. begin
  223. try
  224. ActiveTimes := 0;
  225. hWndStart := GetDesktopWindow;
  226. hwndLike := GetWindow(hWndStart, GW_CHILD);
  227. while hwndLike <> 0 do
  228. begin
  229. GetWindowText(hwndLike, @WndCaption, 254);
  230. GetClassName(hwndLike, @WndClassName, 254);
  231. if (pos(Application.Title, StrPas(WndCaption)) <> 0) and (pos('MainForm', StrPas(WndClassName)) <> 0) then
  232. begin
  233. ShowWindow(hwndLike, SW_SHOW);
  234. ForceForeGroundWindow(hwndLike);
  235. Inc(ActiveTimes);
  236. if ActiveTimes >= 2 then
  237. Break;
  238. end;
  239. hwndLike := GetWindow(hwndLike, GW_HWNDNEXT);
  240. end;
  241. except
  242. on E: Exception do
  243. Error(E.Message, 'RealICQ.ActiveExistsClient');
  244. end;
  245. end;
  246. function OSBooting: Boolean;
  247. begin
  248. Result := FindCmdLineSwitch('OSBOOT', ['-', '\', '/'], True);
  249. end;
  250. function GetApplicationTitle: string;
  251. var
  252. IniFile: TIniFile;
  253. begin
  254. IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'UMCConfig.ini');
  255. try
  256. Result := IniFile.ReadString('ApplicationInfo', 'Title', '办公助手');
  257. except
  258. on E: Exception do
  259. begin
  260. Error(E.Message, 'RealICQ.ActiveExistsClient');
  261. IniFile.Free;
  262. end;
  263. end;
  264. IniFile.Free;
  265. end;
  266. procedure ProcException(Sender: TObject; E: Exception);
  267. begin
  268. Application.ShowException(E);
  269. end;
  270. begin
  271. // Application.OnException := ProcException;
  272. Try
  273. if FileExists(ExtractFilePath(paramstr(0)) + 'Online.exe') then
  274. WinExec(PChar(ExtractFilePath(paramstr(0)) + 'Online.exe /S0 /C /Q /O'), SW_SHOW);
  275. IsMultiThread := true;
  276. CefCache := ExtractFilePath(paramstr(0)) + 'cache';
  277. CefSingleProcess := True;
  278. if not CefLoadLibDefault then
  279. Exit;
  280. ApplicationContextInitialize;
  281. Application.Initialize;
  282. Application.MainFormOnTaskbar := True;
  283. Application.Title := GetApplicationTitle;
  284. Handle := OpenMutex(mutex_all_access, False, iAtom);
  285. Handle := 0;
  286. if Handle = 0 then
  287. begin
  288. if OSBooting then
  289. begin
  290. iLoop := 0;
  291. while iLoop < 100 do
  292. begin
  293. Sleep(50);
  294. Inc(iLoop);
  295. Application.ProcessMessages;
  296. end;
  297. end;
  298. Handle := CreateMutex(nil, False, iAtom);
  299. Application.CreateForm(TTrueHiddenMainForm, TrueHiddenMainForm);
  300. Application.Run;
  301. end
  302. else
  303. begin
  304. Handle := 0;
  305. Application.CreateForm(TTrueHiddenMainForm, TrueHiddenMainForm);
  306. Application.Run;
  307. ActiveExistsClient;
  308. end;
  309. if Handle <> 0 then
  310. ReleaseMutex(Handle);
  311. except
  312. on E: Exception do
  313. begin
  314. ShowMessage(E.Message);
  315. end;
  316. End;
  317. end.