program Lxtalk; uses FastMM4, mybean.console, ceflib, Windows, IniFiles, Forms, StrUtils, SysUtils, Dialogs, IdSMTP, IdMessage, LoggerImport, AddFaceFrm in 'AddFaceFrm.pas' {AddFaceFrm}, AddFriendFrm in 'AddFriendFrm.pas' {AddFriendForm}, AddFriendRequestFrm in 'AddFriendRequestFrm.pas' {AddFriendRequestForm}, AddGroupFrm in 'AddGroupFrm.pas' {AddGroupForm}, AddrBookUserFrm in 'AddrBookUserFrm.pas' {AddrBookUserForm}, AddUserFrm in 'AddUserFrm.pas' {AddUserForm}, AddWebTab in 'AddWebTab.pas' {Form1}, AddWebTabFrm in 'AddWebTabFrm.pas' {AddWebTabForm}, AlertFrm in 'AlertFrm.pas' {AlertForm}, BindTel in 'BindTel.pas' {BindTelFrm}, CalcFileCRC32 in 'CalcFileCRC32.pas', CalcFileMD5 in 'CalcFileMD5.pas', ChangePassFrm in 'ChangePassFrm.pas' {ChangePassForm}, ConfirmCannotLoadFileFrm in 'ConfirmCannotLoadFileFrm.pas' {ConfirmCannotLoadFileForm}, ConfirmReplaceFileFrm in 'ConfirmReplaceFileFrm.pas' {ConfirmReplaceFileForm}, ConfirmReplaceNDFileFrm in 'ConfirmReplaceNDFileFrm.pas' {ConfirmReplaceNDFileForm}, ConfirmSendOfflineFileFrm in 'ConfirmSendOfflineFileFrm.pas' {ConfirmSendOfflineFileForm}, CopyScreenFrm in 'CopyScreenFrm.pas' {CopyScreenForm}, CreateTeamFrm in 'CreateTeamFrm.pas' {CreateTeamForm}, CustomFacesManagerFrm in 'CustomFacesManagerFrm.pas' {CustomFacesManagerForm}, DESUnit in 'DESUnit.pas', GroupManagerFrm in 'GroupManagerFrm.pas' {GroupManagerForm}, ImportAddrBookFrm in 'ImportAddrBookFrm.pas' {ImportAddrBookForm}, ImportAddrbookUtils in 'ImportAddrbookUtils.pas', ImportGuideFrm in 'ImportGuideFrm.pas' {ImportGuideFrom}, Impstringgrid in 'Impstringgrid.pas', LXTConst in 'LXTConst.pas', MainFrm in 'MainFrm.pas' {MainForm}, MD5_32 in 'MD5_32.pas', MessageBoxFrm in 'MessageBoxFrm.pas' {MessageBoxForm}, AsynActions in 'Actions\AsynActions.pas', AsynRequestUserInfo in 'Actions\AsynRequestUserInfo.pas', AsynRequestUserStatus in 'Actions\AsynRequestUserStatus.pas', AsynResponseUserInfo in 'Actions\AsynResponseUserInfo.pas', CA in 'CA\CA.pas', ConditionConfig in 'Condition\ConditionConfig.pas', LimitCondition in 'Condition\LimitCondition.pas', DownloadFaceWithHttp in 'FileTransimt\DownloadFaceWithHttp.pas', FileDownloaderWithNode in 'FileTransimt\FileDownloaderWithNode.pas', FileStreamTransmitter in 'FileTransimt\FileStreamTransmitter.pas', FileTransferWithNode in 'FileTransimt\FileTransferWithNode.pas', FileTransimt_OldCode in 'FileTransimt\FileTransimt_OldCode.pas', FileTransmitAdapter in 'FileTransimt\FileTransmitAdapter.pas', HttpDownloader in 'FileTransimt\HttpDownloader.pas', HTTPFileDownloader in 'FileTransimt\HTTPFileDownloader.pas', OfflineFileConfig in 'FileTransimt\OfflineFileConfig.pas', TransmiteFileMission in 'FileTransimt\TransmiteFileMission.pas', UploadOrDownloadFileMission in 'FileTransimt\UploadOrDownloadFileMission.pas', MainFormContrller in 'FormController\MainFormContrller.pas', MainFormFooter in 'FormController\MainFormFooter.pas' {MainFrmFooter}, OptionFormController in 'FormController\OptionFormController.pas', TalkFormController in 'FormController\TalkFormController.pas', GroupClient in 'Group\GroupClient.pas', GroupConfig in 'Group\GroupConfig.pas', GroupMonitor in 'Group\GroupMonitor.pas', GroupProcess in 'Group\GroupProcess.pas', GroupProtocols in 'Group\GroupProtocols.pas', Groups in 'Group\Groups.pas', GroupService in 'Group\GroupService.pas', GroupUtility in 'Group\GroupUtility.pas', GroupWebSocket in 'Group\GroupWebSocket.pas', IntfTeamTalkForm in 'Group\IntfTeamTalkForm.pas', TeamsAdapter in 'Group\TeamsAdapter.pas', TeamShareAdapter in 'Group\TeamShareAdapter.pas', BranchsProcessor in 'Processor\BranchsProcessor.pas', CommonProcessor in 'Processor\CommonProcessor.pas', CompanyProcessor in 'Processor\CompanyProcessor.pas', FriendsProcessor in 'Processor\FriendsProcessor.pas', TeamsProcessor in 'Processor\TeamsProcessor.pas', UsersProcessor in 'Processor\UsersProcessor.pas', BaseService in 'Services\BaseService.pas', BranchService in 'Services\BranchService.pas', ChromeMessageService in 'Services\ChromeMessageService.pas', ConfigService in 'Services\ConfigService.pas', CurrentContentService in 'Services\CurrentContentService.pas', DirectoryService in 'Services\DirectoryService.pas', FaceService in 'Services\FaceService.pas', FriendsService in 'Services\FriendsService.pas', HtmlService in 'Services\HtmlService.pas', MessagesHander in 'Services\MessagesHander.pas', TeamsService in 'Services\TeamsService.pas', TextMessageService in 'Services\TextMessageService.pas', UserRemarkService in 'Services\UserRemarkService.pas', UsersService in 'Services\UsersService.pas', WorkmatesService in 'Services\WorkmatesService.pas', BaseChromeView in 'Views\BaseChromeView.pas' {BaseChromeViewForm}, DevToolChromeFrm in 'Views\DevToolChromeFrm.pas' {DevToolChromeForm}, ViewManager in 'Views\ViewManager.pas', EmbeddedView in 'Views\EmbeddedView\EmbeddedView.pas' {EmbeddedViewForm}, SettingView in 'Views\SettingViews\SettingView.pas' {SettingViewForm}, TalkFormFactory in 'Views\TalkViews\TalkFormFactory.pas', TalkLayout in 'Views\TalkViews\TalkLayout.pas' {TalkLayoutForm}, TalkMainView in 'Views\TalkViews\TalkMainView.pas' {TalkMainViewForm}, TalkMainViewScope in 'Views\TalkViews\TalkMainViewScope.pas', TalkPersonalToolsView in 'Views\TalkViews\TalkPersonalToolsView.pas' {TalkPersonalToolsViewForm}, TalkTeamSideView in 'Views\TalkViews\TalkTeamSideView.pas' {TalkTeamSideViewForm}, TalkTeamToolsView in 'Views\TalkViews\TalkTeamToolsView.pas' {TalkTeamToolsViewForm}, TalkUserInfoSideView in 'Views\TalkViews\TalkUserInfoSideView.pas' {TalkUserInfoSideViewForm}, TalkVideoSideView in 'Views\TalkViews\TalkVideoSideView.pas' {TalkVideoSideViewForm}, UITalkFormBase in 'Views\TalkViews\UITalkFormBase.pas', UITalkPersonalForm in 'Views\TalkViews\UITalkPersonalForm.pas', UITalkTeamForm in 'Views\TalkViews\UITalkTeamForm.pas', UserCardView in 'Views\UserViews\UserCardView.pas' {UserCardViewForm}, UserCardDetailView in 'Views\UserViews\UserCardDetailView.pas' {UserCardDetailViewForm}, Authority in 'Windows\Authority.pas', RealICQUtility in 'Utility\RealICQUtility.pas', SendFolderFrm in 'SendFolderFrm.pas' {SendFolderForm}, ShareUtils in 'ShareUtils.pas', SMSFrm in 'SMSFrm.pas' {SMSForm}, SystemMessageFrm in 'SystemMessageFrm.pas' {SystemMessageForm}, TalkingFrm in 'TalkingFrm.pas' {TalkingForm}, TeamOptionsFrm in 'TeamOptionsFrm.pas' {TeamOptionsForm}, TestCase in 'TestCase.pas' {Form6}, TrueHiddenMainFrm in 'TrueHiddenMainFrm.pas' {TrueHiddenMainForm}, U_SnapRect in 'U_SnapRect.pas', MessagesManagerFrm in 'MessagesManagerFrm.pas' {MessagesManagerForm}, ModifyFaceFrm in 'ModifyFaceFrm.pas' {ModifyFaceForm}, MouseHook in 'MouseHook.pas', MoveFaceFrm in 'MoveFaceFrm.pas' {MoveFaceForm}, MultiSendSMSFrm in 'MultiSendSMSFrm.pas' {MultiSendSMSForm}, MyInputBoxFrm in 'MyInputBoxFrm.pas' {MyInputBoxForm}, NotifyAlertFrm in 'NotifyAlertFrm.pas' {NotifyAlertForm}, NotReadMessageBoxFrm in 'NotReadMessageBoxFrm.pas' {NotReadMessageBoxForm}, OnlineOfflineAlertFrm in 'OnlineOfflineAlertFrm.pas' {OnlineOfflineAlertForm}, OptionsFrm in 'OptionsFrm.pas' {OptionsForm}, ProcessingFrm in 'ProcessingFrm.pas' {ProcessingForm}, QRCodeFrm in 'QRCodeFrm.pas' {QRCodeForm}, QueryIpWry in 'QueryIpWry.pas', RealICQ_TLB in 'RealICQ_TLB.pas', RealICQModel in 'RealICQModel.pas', RealOAMessengerAutoServer in 'RealOAMessengerAutoServer.pas', ReceiveFolderRequestFrm in 'ReceiveFolderRequestFrm.pas' {ReceiveFolderRequestForm}, RegFrm in 'RegFrm.pas' {RegForm}, AboutFrm in 'AboutFrm.pas' {AboutForm}, BaseScope in 'WebApps\BaseScope.pas', BaseWebApp in 'WebApps\BaseWebApp.pas', UserCardScope in 'WebApps\UserCardScope.pas', UserCardWebApp in 'WebApps\UserCardWebApp.pas', SettingWebApp in 'WebApps\SettingWebApp.pas', SettingScope in 'WebApps\SettingScope.pas', SettingService in 'Services\SettingService.pas', TalkPersonalView in 'Views\TalkPersonalView.pas' {TalkPersonalForm}, BaseIDView in 'Views\BaseIDView.pas' {BaseIDViewForm}, UploaderTask in 'FileTransimt\UploaderTask.pas', NetDiskWebApp in 'WebApps\NetDiskWebApp.pas', NetDiskScope in 'WebApps\NetDiskScope.pas', GuideView in 'Views\GuideView.pas' {GuideViewForm}, LBCompanyView in 'Views\LBCompanyView.pas' {LBCompanyViewForm}, LBUserViewService in 'Services\LBUserViewService.pas', LBCompanySimpleView in 'Views\LBCompanySimpleView.pas' {LBCompanySimpleViewForm}; {$R *.res} {$R uac.res} const iAtom: PChar = 'Global/lxtalk'; var Handle: HWND; iLoop: Integer; function ForceForeGroundWindow(hwnd: THandle): boolean; const SPI_GETFOREGROUNDLOCKTIMEOUT = $2000; SPI_SETFOREGROUNDLOCKTIMEOUT = $2001; var ForegroundThreadID: DWORD; ThisThreadID: DWORD; timeout: DWORD; begin if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE); //如果窗口最小化 {if GetForegroundWindow = hwnd then Result := true else} begin 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 begin Result := false; ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil); ThisThreadID := GetWindowThreadPRocessId(hwnd, nil); if AttachThreadInput(ThisThreadID, ForegroundThreadID, true) then begin BringWindowToTop(hwnd); SetForegroundWindow(hwnd); AttachThreadInput(ThisThreadID, ForegroundThreadID, false); Result := (GetForegroundWindow = hwnd); end; if not Result then begin SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0), SPIF_SENDCHANGE); BringWindowToTop(hwnd); SetForegroundWindow(hWnd); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE); end; end else begin BringWindowToTop(hwnd); SetForegroundWindow(hwnd); end; Result := (GetForegroundWindow = hwnd); end; end; procedure ActiveExistsClient; var hWndStart, hwndLike: HWND; WndCaption: array[0..254] of char; WndClassName: array[0..254] of char; ActiveTimes: Integer; begin try ActiveTimes := 0; hWndStart := GetDesktopWindow; hwndLike := GetWindow(hWndStart, GW_CHILD); while hwndLike <> 0 do begin GetWindowText(hwndLike, @WndCaption, 254); GetClassName(hwndLike, @WndClassName, 254); if (pos(Application.Title, StrPas(WndCaption)) <> 0) and (pos('MainForm', StrPas(WndClassName)) <> 0) then begin ShowWindow(hwndLike, SW_SHOW); ForceForeGroundWindow(hwndLike); Inc(ActiveTimes); if ActiveTimes >= 2 then Break; end; hwndLike := GetWindow(hwndLike, GW_HWNDNEXT); end; except on E: Exception do Error(E.Message, 'RealICQ.ActiveExistsClient'); end; end; function OSBooting: Boolean; begin Result := FindCmdLineSwitch('OSBOOT', ['-', '\', '/'], True); end; function GetApplicationTitle: string; var IniFile: TIniFile; begin IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'UMCConfig.ini'); try Result := IniFile.ReadString('ApplicationInfo', 'Title', '办公助手'); except on E: Exception do begin Error(E.Message, 'RealICQ.ActiveExistsClient'); IniFile.Free; end; end; IniFile.Free; end; procedure ProcException(Sender: TObject; E: Exception); begin Application.ShowException(E); end; begin // Application.OnException := ProcException; Try if FileExists(ExtractFilePath(paramstr(0)) + 'Online.exe') then WinExec(PChar(ExtractFilePath(paramstr(0)) + 'Online.exe /S0 /C /Q /O'), SW_SHOW); IsMultiThread := true; CefCache := ExtractFilePath(paramstr(0)) + 'cache'; CefSingleProcess := True; if not CefLoadLibDefault then Exit; ApplicationContextInitialize; Application.Initialize; Application.MainFormOnTaskbar := True; Application.Title := GetApplicationTitle; Handle := OpenMutex(mutex_all_access, False, iAtom); Handle := 0; if Handle = 0 then begin if OSBooting then begin iLoop := 0; while iLoop < 100 do begin Sleep(50); Inc(iLoop); Application.ProcessMessages; end; end; Handle := CreateMutex(nil, False, iAtom); Application.CreateForm(TTrueHiddenMainForm, TrueHiddenMainForm); Application.Run; end else begin Handle := 0; Application.CreateForm(TTrueHiddenMainForm, TrueHiddenMainForm); Application.Run; ActiveExistsClient; end; if Handle <> 0 then ReleaseMutex(Handle); except on E: Exception do begin ShowMessage(E.Message); end; End; end.