Lxtalk.dpr 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  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' {AddFaceForm},
  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. MainUIHandler in 'Views\MainUIHandler.pas',
  159. BasePacket in 'Protocols\BasePacket.pas';
  160. {$R *.res}
  161. {$R uac.res}
  162. const iAtom: PChar = 'Global/lxtalk';
  163. var
  164. Handle: HWND;
  165. iLoop: Integer;
  166. function ForceForeGroundWindow(hwnd: THandle): boolean;
  167. const
  168. SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
  169. SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
  170. var
  171. ForegroundThreadID: DWORD;
  172. ThisThreadID : DWORD;
  173. timeout : DWORD;
  174. begin
  175. if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE); //如果窗口最小化
  176. {if GetForegroundWindow = hwnd then
  177. Result := true
  178. else}
  179. begin
  180. if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4))
  181. or((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
  182. ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
  183. (Win32MinorVersion > 0)))) then
  184. begin
  185. Result := false;
  186. ForegroundThreadID :=
  187. GetWindowThreadProcessID(GetForegroundWindow, nil);
  188. ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
  189. if AttachThreadInput(ThisThreadID, ForegroundThreadID, true) then
  190. begin
  191. BringWindowToTop(hwnd);
  192. SetForegroundWindow(hwnd);
  193. AttachThreadInput(ThisThreadID, ForegroundThreadID, false);
  194. Result := (GetForegroundWindow = hwnd);
  195. end;
  196. if not Result then
  197. begin
  198. SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
  199. SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),SPIF_SENDCHANGE);
  200. BringWindowToTop(hwnd);
  201. SetForegroundWindow(hWnd);
  202. SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0,TObject(timeout), SPIF_SENDCHANGE);
  203. end;
  204. end
  205. else
  206. begin
  207. BringWindowToTop(hwnd);
  208. SetForegroundWindow(hwnd);
  209. end;
  210. Result := (GetForegroundWindow = hwnd);
  211. end;
  212. end;
  213. procedure ActiveExistsClient;
  214. var
  215. hWndStart,hwndLike:HWND;
  216. WndCaption:array[0..254] of char;
  217. WndClassName:array[0..254] of char;
  218. ActiveTimes: Integer;
  219. begin
  220. try
  221. ActiveTimes := 0;
  222. hWndStart := GetDesktopWindow;
  223. hwndLike := GetWindow(hWndStart, GW_CHILD);
  224. while hwndLike <> 0 do
  225. begin
  226. GetWindowText(hwndLike,@WndCaption,254);
  227. GetClassName(hwndLike,@WndClassName,254);
  228. if (pos(Application.Title, StrPas(WndCaption)) <> 0) and (pos('MainForm',StrPas(WndClassName)) <> 0) then
  229. begin
  230. ShowWindow(hwndLike, SW_SHOW);
  231. ForceForeGroundWindow(hwndLike);
  232. Inc(ActiveTimes);
  233. if ActiveTimes >= 2 then Break;
  234. end;
  235. hwndLike := GetWindow(hwndLike,GW_HWNDNEXT);
  236. end;
  237. except
  238. on E: Exception do
  239. Error(E.Message, 'RealICQ.ActiveExistsClient');
  240. end;
  241. end;
  242. function OSBooting: Boolean;
  243. begin
  244. Result := FindCmdLineSwitch('OSBOOT',['-','\','/'], True);
  245. end;
  246. function GetApplicationTitle:String;
  247. var IniFile:TIniFile;
  248. begin
  249. IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'UMCConfig.ini');
  250. try
  251. Result:=IniFile.ReadString('ApplicationInfo','Title','办公助手');
  252. except
  253. on E: Exception do
  254. begin
  255. Error(E.Message, 'RealICQ.ActiveExistsClient');
  256. IniFile.Free;
  257. end;
  258. end;
  259. IniFile.Free;
  260. end;
  261. begin
  262. try
  263. if FileExists(ExtractFilePath(paramstr(0))+'Online.exe') then
  264. WinExec(PChar(ExtractFilePath(paramstr(0))+'Online.exe /S0 /C /Q /O'),SW_SHOW);
  265. IsMultiThread := true;
  266. CefCache := ExtractFilePath(paramstr(0)) + 'cache';
  267. CefSingleProcess := True;
  268. if not CefLoadLibDefault then
  269. Exit;
  270. ApplicationContextInitialize;
  271. Application.Initialize;
  272. Application.MainFormOnTaskbar := True;
  273. Application.Title := GetApplicationTitle;
  274. // TCurrentContentService.GetService.Me := TRealICQUser.Create('lqq', nil);
  275. // TCurrentContentService.GetService.Me.DisplayName := '陆趣趣';
  276. // Application.CreateForm(TForm6, Form6);
  277. // Application.Run;
  278. Handle := OpenMutex(mutex_all_access, False, iAtom);
  279. Handle := 0;
  280. if Handle = 0 then
  281. begin
  282. if OSBooting then
  283. begin
  284. iLoop := 0;
  285. while iLoop < 100 do
  286. begin
  287. Sleep(50);
  288. Inc(iLoop);
  289. Application.ProcessMessages;
  290. end;
  291. end;
  292. Handle := CreateMutex(nil, False, iAtom);
  293. Application.CreateForm(TTrueHiddenMainForm, TrueHiddenMainForm);
  294. Application.Run;
  295. end
  296. else
  297. begin
  298. Handle := 0;
  299. Application.CreateForm(TTrueHiddenMainForm, TrueHiddenMainForm);
  300. Application.Run;
  301. ActiveExistsClient;
  302. end;
  303. if Handle <> 0 then ReleaseMutex(Handle);
  304. except
  305. { TODO -olqq -c : 增加程序崩溃的异常处理 2014/12/14 10:38:39 }
  306. on E: Exception do
  307. begin
  308. AsynLog(E.Message, 'MainThread');
  309. end;
  310. end;
  311. end.