Lxtalk.dpr 13 KB

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