9117 lines
286 KiB
Plaintext
9117 lines
286 KiB
Plaintext
unit DeCrmHeMain;
|
||
|
||
interface
|
||
|
||
uses
|
||
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
|
||
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Imaging.pngimage,
|
||
PngImageList, System.ImageList, Vcl.ImgList, Vcl.Buttons, Vcl.StdCtrls,
|
||
Vcl.Menus, WindowAnimator, System.Actions, Vcl.ActnList,
|
||
DDispLogo, IdHTTP, IdSSLOpenSSL, IdIOHandler, KeyMonDLL,
|
||
FPolicyView, CttSchDefine, System.Generics.Collections,
|
||
Tocsg.Thread, System.Notification, GlobalDefine, DefineHelper,
|
||
RecoverService, ManagerService, superobject,
|
||
BsKwdSchKvCttSchClient, Tocsg.Win32, OutlookMonClient, ThdExecuteEndNoti,
|
||
DWaitProcPrt, ThdSchFileScan, DProgCustomCttSch, Tocsg.Process, Winapi.oleacc,
|
||
ThdWebOpenCheck, Tocsg.Clipboard, ThdRcvPolicy, DPrintProg, Bs1FltCtrl;
|
||
|
||
const
|
||
SIZE_DEF_FORM_W = 570;
|
||
SIZE_EXTEND_FORM_W = 500;
|
||
SIZE_DEF_FORM_H = 740;
|
||
SIZE_UP_FORM_H = 800;
|
||
|
||
//{$DEFINE OLD_CB_MON}
|
||
|
||
INI_PREVFUN = 'prevfeature.ini';
|
||
EXE_BROWSER_SECU = 'browsec.exe';
|
||
|
||
type
|
||
TDlgeCrmHeMain = class(TForm)
|
||
pnMain: TPanel;
|
||
imgMain: TImage;
|
||
imgClose: TImage;
|
||
imgHelp: TImage;
|
||
imgQA: TImage;
|
||
imgMainList: TPngImageCollection;
|
||
imgUpBtnList: TPngImageList;
|
||
imgEvList: TPngImageList;
|
||
imgBtnList: TPngImageList;
|
||
popTray: TPopupMenu;
|
||
miAgentState: TMenuItem;
|
||
miDelAgent: TMenuItem;
|
||
imgArrow: TPngImageList;
|
||
tMtx: TTimer;
|
||
tInit: TTimer;
|
||
pnList: TPanel;
|
||
imgBack: TImage;
|
||
lbOsVerTop: TLabel;
|
||
lbOS: TLabel;
|
||
imgSetOs: TImage;
|
||
lbPW: TLabel;
|
||
imgSetAccPass: TImage;
|
||
lbScrSav: TLabel;
|
||
imgSetScreenSaver: TImage;
|
||
lbAntiV: TLabel;
|
||
lbAV: TLabel;
|
||
imgSetAntiVirus: TImage;
|
||
imgAvInfo: TImage;
|
||
lbFireW: TLabel;
|
||
lbFW: TLabel;
|
||
imgSetFW: TImage;
|
||
imgFwInfo: TImage;
|
||
lbConn: TLabel;
|
||
lbIpInfo: TLabel;
|
||
lbEmpNo: TLabel;
|
||
imgList: TImage;
|
||
imgOsInfo: TImage;
|
||
lbOsPatch: TLabel;
|
||
imgOsVerState: TImage;
|
||
imgOsPatchState: TImage;
|
||
imgAvState: TImage;
|
||
imgPassState: TImage;
|
||
imgScrSavState: TImage;
|
||
imgFwState: TImage;
|
||
imgStateList: TPngImageList;
|
||
imgLang: TImage;
|
||
lbMode: TLabel;
|
||
imgChangeEmpNo: TImage;
|
||
lbOsPatchState: TLabel;
|
||
lbPassState: TLabel;
|
||
lbScrSavState: TLabel;
|
||
lbVer: TLabel;
|
||
lbPolicyName: TLabel;
|
||
lbPolicyState: TLabel;
|
||
imgExpend: TImage;
|
||
ActionList: TActionList;
|
||
acHelp: TAction;
|
||
lbWinAccount: TLabel;
|
||
tTempConn: TTimer;
|
||
imgTrayState: TPngImageList;
|
||
N1: TMenuItem;
|
||
N2: TMenuItem;
|
||
miOpenDrmFile: TMenuItem;
|
||
miEncDrmFile: TMenuItem;
|
||
OpenDialogDRM: TOpenDialog;
|
||
imgCompany: TImage;
|
||
imgOsPchInfo: TImage;
|
||
miChangeEmpNo: TMenuItem;
|
||
N3: TMenuItem;
|
||
miScreenLock: TMenuItem;
|
||
miViewSchPersonalInfo: TMenuItem;
|
||
lbSchProgMsg: TLabel;
|
||
tSchTimer: TTimer;
|
||
pnPolicyView: TPanel;
|
||
miSendSoftInstInfo: TMenuItem;
|
||
imgLangList: TPngImageList;
|
||
popLang: TPopupMenu;
|
||
N5: TMenuItem;
|
||
miPolicyDetailView: TMenuItem;
|
||
lbQA: TLabel;
|
||
lbChangeEmpNo: TLabel;
|
||
lbLang: TLabel;
|
||
imgCttSch: TImage;
|
||
imgCttSchRst: TImage;
|
||
lbCttSch: TLabel;
|
||
lbCttSchRst: TLabel;
|
||
lbCttSchSP: TLabel;
|
||
tCttSchTimer: TTimer;
|
||
miDecryptDrm: TMenuItem;
|
||
lbSchTitle: TLabel;
|
||
lbCompanyName: TLabel;
|
||
tStatus: TTimer;
|
||
lbTagInfo: TLabel;
|
||
imgPwDateInfo: TImage;
|
||
miOfflineExp: TMenuItem;
|
||
miResetPersonalScan: TMenuItem;
|
||
miDebugMode: TMenuItem;
|
||
miUpdatePolicy: TMenuItem;
|
||
btnTest1: TButton;
|
||
btnTest2: TButton;
|
||
tUpdateLogo: TTimer;
|
||
miPiResult: TMenuItem;
|
||
miRetryPiScan: TMenuItem;
|
||
miFileEncPopup: TMenuItem;
|
||
miExportPo: TMenuItem;
|
||
N4: TMenuItem;
|
||
miPolicyView: TMenuItem;
|
||
miShowTagInfo: TMenuItem;
|
||
miCttSch: TMenuItem;
|
||
miCttSchResult: TMenuItem;
|
||
miEncryptDrm: TMenuItem;
|
||
N6: TMenuItem;
|
||
N7: TMenuItem;
|
||
miAipTry: TMenuItem;
|
||
miReqPrint: TMenuItem;
|
||
miAprvReqList: TMenuItem;
|
||
miAprvList: TMenuItem;
|
||
N10: TMenuItem;
|
||
tSnapTag: TTimer;
|
||
miAip2Kess: TMenuItem;
|
||
miKess2Aip: TMenuItem;
|
||
N8: TMenuItem;
|
||
miNoWaterApproval: TMenuItem;
|
||
miInfo: TMenuItem;
|
||
miUsbInfo: TMenuItem;
|
||
N9: TMenuItem;
|
||
miExportCmPo: TMenuItem;
|
||
miAprvFileExport: TMenuItem;
|
||
N11: TMenuItem;
|
||
miPrintCtrl: TMenuItem;
|
||
miBrowserSecu: TMenuItem;
|
||
miPcCleanup: TMenuItem;
|
||
miSharePcPrintBlock: TMenuItem;
|
||
miWSDPortPrintBlock: TMenuItem;
|
||
miTcpIpPrintBlock: TMenuItem;
|
||
miPrintSavingBlock: TMenuItem;
|
||
miPcCleanup_IH: TMenuItem;
|
||
miPcCleanup_IC: TMenuItem;
|
||
miPcCleanup_CC: TMenuItem;
|
||
miPcCleanup_IA: TMenuItem;
|
||
miPcCleanup_RF: TMenuItem;
|
||
miPcCleanup_MS: TMenuItem;
|
||
miFileErase: TMenuItem;
|
||
miRecycleDel: TMenuItem;
|
||
miTempDel: TMenuItem;
|
||
N21: TMenuItem;
|
||
N22: TMenuItem;
|
||
miPcCleanup_All: TMenuItem;
|
||
miPcCleanup_OffSafe: TMenuItem;
|
||
miFilePerDel: TMenuItem;
|
||
miProcessTerminatePrevate: TMenuItem;
|
||
procedure imgMainMouseDown(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure imgCloseClick(Sender: TObject);
|
||
procedure imgCloseMouseEnter(Sender: TObject);
|
||
procedure imgCloseMouseLeave(Sender: TObject);
|
||
procedure imgQAMouseEnter(Sender: TObject);
|
||
procedure imgQAMouseLeave(Sender: TObject);
|
||
procedure imgSetOsMouseEnter(Sender: TObject);
|
||
procedure imgSetOsMouseLeave(Sender: TObject);
|
||
procedure imgSetOsClick(Sender: TObject);
|
||
procedure imgSetScreenSaverClick(Sender: TObject);
|
||
procedure imgSetAntiVirusClick(Sender: TObject);
|
||
procedure imgSetFWClick(Sender: TObject);
|
||
procedure imgSetAccPassClick(Sender: TObject);
|
||
procedure imgAvInfoClick(Sender: TObject);
|
||
procedure imgFwInfoClick(Sender: TObject);
|
||
procedure imgQAClick(Sender: TObject);
|
||
procedure miAgentStateClick(Sender: TObject);
|
||
procedure tMtxTimer(Sender: TObject);
|
||
procedure tInitTimer(Sender: TObject);
|
||
procedure miDelAgentClick(Sender: TObject);
|
||
procedure imgOsInfoMouseDown(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure imgOsInfoMouseUp(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure lbOsVerTopMouseEnter(Sender: TObject);
|
||
procedure lbOsVerTopMouseLeave(Sender: TObject);
|
||
procedure lbOsVerTopMouseUp(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure lbOsVerTopMouseDown(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure imgExpendClick(Sender: TObject);
|
||
procedure imgExpendMouseEnter(Sender: TObject);
|
||
procedure imgExpendMouseLeave(Sender: TObject);
|
||
procedure imgExpendMouseDown(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure imgExpendMouseUp(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure acHelpExecute(Sender: TObject);
|
||
procedure imgOsInfoClick(Sender: TObject);
|
||
procedure tTempConnTimer(Sender: TObject);
|
||
procedure imgChangeEmpNoClick(Sender: TObject);
|
||
procedure popTrayPopup(Sender: TObject);
|
||
procedure miOpenDrmFileClick(Sender: TObject);
|
||
procedure miEncDrmFileClick(Sender: TObject);
|
||
procedure lbVerDblClick(Sender: TObject);
|
||
procedure imgOsPchInfoClick(Sender: TObject);
|
||
procedure lbWinAccountDblClick(Sender: TObject);
|
||
procedure lbEmpNoDblClick(Sender: TObject);
|
||
procedure miScreenLockClick(Sender: TObject);
|
||
procedure miViewSchPersonalInfoClick(Sender: TObject);
|
||
procedure tSchTimerTimer(Sender: TObject);
|
||
procedure miSendSoftInstInfoClick(Sender: TObject);
|
||
procedure imgLangMouseEnter(Sender: TObject);
|
||
procedure imgLangMouseLeave(Sender: TObject);
|
||
procedure imgLangClick(Sender: TObject);
|
||
procedure miPolicyDetailViewClick(Sender: TObject);
|
||
procedure imgCttSchMouseEnter(Sender: TObject);
|
||
procedure imgCttSchMouseLeave(Sender: TObject);
|
||
procedure tCttSchTimerTimer(Sender: TObject);
|
||
procedure lbCttSchClick(Sender: TObject);
|
||
procedure lbCttSchRstClick(Sender: TObject);
|
||
procedure miDecryptDrmClick(Sender: TObject);
|
||
procedure lbModeDblClick(Sender: TObject);
|
||
procedure tStatusTimer(Sender: TObject);
|
||
procedure lbTagInfoDblClick(Sender: TObject);
|
||
procedure imgPwDateInfoClick(Sender: TObject);
|
||
procedure miOfflineExpClick(Sender: TObject);
|
||
procedure miResetPersonalScanClick(Sender: TObject);
|
||
procedure miDebugModeClick(Sender: TObject);
|
||
procedure miUpdatePolicyClick(Sender: TObject);
|
||
procedure btnTest1Click(Sender: TObject);
|
||
procedure btnTest2Click(Sender: TObject);
|
||
procedure tUpdateLogoTimer(Sender: TObject);
|
||
procedure miPiResultClick(Sender: TObject);
|
||
procedure miRetryPiScanClick(Sender: TObject);
|
||
procedure miFileEncPopupClick(Sender: TObject);
|
||
procedure miExportPoClick(Sender: TObject);
|
||
procedure lbIpInfoDblClick(Sender: TObject);
|
||
procedure miPolicyViewClick(Sender: TObject);
|
||
procedure miShowTagInfoClick(Sender: TObject);
|
||
procedure miCttSchClick(Sender: TObject);
|
||
procedure miCttSchResultClick(Sender: TObject);
|
||
procedure miEncryptDrmClick(Sender: TObject);
|
||
procedure miAipTryClick(Sender: TObject);
|
||
procedure miReqPrintClick(Sender: TObject);
|
||
procedure miAprvReqListClick(Sender: TObject);
|
||
procedure miAprvListClick(Sender: TObject);
|
||
procedure tSnapTagTimer(Sender: TObject);
|
||
procedure miAip2KessClick(Sender: TObject);
|
||
procedure miKess2AipClick(Sender: TObject);
|
||
procedure miNoWaterApprovalClick(Sender: TObject);
|
||
procedure miInfoClick(Sender: TObject);
|
||
procedure miUsbInfoClick(Sender: TObject);
|
||
procedure miExportCmPoClick(Sender: TObject);
|
||
procedure miAprvFileExportClick(Sender: TObject);
|
||
procedure miPrintCtrlClick(Sender: TObject);
|
||
procedure miSharePcPrintBlockClick(Sender: TObject);
|
||
procedure miBrowserSecuClick(Sender: TObject);
|
||
procedure miPcCleanup_AllClick(Sender: TObject);
|
||
procedure miFilePerDelClick(Sender: TObject);
|
||
procedure miTempDelClick(Sender: TObject);
|
||
procedure miRecycleDelClick(Sender: TObject);
|
||
procedure miProcessTerminatePrevateClick(Sender: TObject);
|
||
private
|
||
{ Private declarations }
|
||
HTTP_: TIdHTTP;
|
||
SSL_: TIdSSLIOHandlerSocketOpenSSL;
|
||
|
||
LastWS_: TWindowState;
|
||
MgSvc_: TManagerService;
|
||
WndAni_: TWindowAnimator;
|
||
bWndExpend_,
|
||
bIgrNextCbNoti_,
|
||
bIgrNextCbNotiExcel_: Boolean;
|
||
TrayIcon_: TTrayIcon;
|
||
DispBlock_,
|
||
DispLogos_,
|
||
DispLogosST_: TDlgDispLogoList;
|
||
KeyMonDll_: TKeyMonDLL;
|
||
RecoverSvc_: TRecoverService;
|
||
|
||
sSysDir_: String;
|
||
{$IFDEF OLD_CB_MON}
|
||
CbMon_: TDrawClipboard;
|
||
{$ELSE}
|
||
sOldCbHds_: String;
|
||
{$ENDIF}
|
||
dtRecentCbPopup_,
|
||
dtRecentPrtScrKey_: TDateTime;
|
||
dwChkAbMon_: DWORD;
|
||
sTrayHint_,
|
||
sChkAbMon_,
|
||
sCbAbleApps_,
|
||
sCbCollectApps_,
|
||
sWebAbSigs_,
|
||
sWebAbFNames_,
|
||
sEtcAbSigs_,
|
||
sEtcAbFNames_,
|
||
sWebAbExts_,
|
||
sEtcAbExts_: String;
|
||
CbAbleAppList_,
|
||
CbCollectAppList_,
|
||
WebAbSigList_,
|
||
WebAbFNameList_,
|
||
EtcAbSigList_,
|
||
EtcAbFNameList_,
|
||
WebAbExtList_,
|
||
EtcAbExtList_: TStringList;
|
||
// bIsDebugMode_: Boolean;
|
||
|
||
FrmPolicyView_: TFrmPolicyView;
|
||
bUsePersonalFun_: Boolean;
|
||
|
||
// DTagList_: TDlgTagList;
|
||
// Client_: TSearchLightClient;
|
||
qNoti_: TQueue<String>;
|
||
ThdTaskTimer_: TThdTaskTimer;
|
||
KwdSchKvCLient_: TBsKwdSchKvCttSchClient;
|
||
// MtxScrLogo_: TTgMutex;
|
||
|
||
OutClient_: TOutlookMonClient; // 아웃룩 정책, 스레드에서 생성하면 안되서 여기서 생성 23_0503 14:36:30 kku
|
||
|
||
dwBlockInputCTick_: DWORD; // 클립보드 차단 시 입력 시간 제한
|
||
bCtrlA_: Boolean; // Ctrl + A 입력 감지, 엑셀에서 클립보드 수집 무시를 위함 23_1107 08:11:30 kku
|
||
// bPopChromeSK_: Boolean; // 클립보드 팝업 시 SK하이닉스 크롬에서 두번 뜨는 현상 뭉게기... 23_0511 16:02:03 kku
|
||
|
||
// 프린트 워터마크 진행상황을 위함
|
||
dlgWaterProg_: TDlgWaitExtrProcPrt;
|
||
dlgPrtWProg_: TDlgPrintProg;
|
||
|
||
bPreWinKey_,
|
||
bScrCapKey_,
|
||
bForceCollectCB_: Boolean;
|
||
|
||
sRecentBwUrl_,
|
||
sRecentBwTitle_: String;
|
||
|
||
// 프로그램 운용에 관련된 프로세스 감시 24_0703 14:27:59 kku
|
||
ProcW_: TThdProcessWatch;
|
||
|
||
// 파일 차단 중복 처리를 막기 위해 추가 23_1205 13:36:22 kku
|
||
sRecentABFile_: String;
|
||
dwRecentAB_: DWORD;
|
||
|
||
// Ctrl + C 시도한 프로세스
|
||
// sLastCbAppName_: String;
|
||
|
||
// 개인정보 수동 검사 24_0521 10:11:48 kku
|
||
ThdCustomScanSch_: TThdSchFileScan;
|
||
sSchRstPath_: String;
|
||
|
||
// 원격데스크톱에서 해상도 변경 시 사용
|
||
// nScrW_, nScrH_: Integer;
|
||
|
||
bIsClearCB_: Boolean;
|
||
|
||
// 브라우저 URL 체크
|
||
AccObj_SubTitle_: IAccessible;
|
||
varSubTitle_: OleVariant;
|
||
hEditWnd_: HWND;
|
||
|
||
// 브라우저에서 받은 파일 열기 체크
|
||
ThdWebOC_: TThdWebOpenCheck;
|
||
|
||
// 파일 차단 로그 중복 처리 방지
|
||
FileAbLogs_: TStringList;
|
||
sLastNotExistFile_: String;
|
||
|
||
procedure UpdateLangName(nLang: Integer);
|
||
procedure LockScreen;
|
||
procedure ResetTrayIcon;
|
||
procedure SetImgBtn(aImgList: TPngImageList; imgBtn: TImage; nImgIdx: Integer);
|
||
procedure SetStateImage(nIdx: Integer);
|
||
procedure SetExtendMainView(bVal: Boolean);
|
||
procedure FinishWindowExpend;
|
||
procedure RefreshView;
|
||
procedure VisibleMainform(bVal: Boolean; bForce: Boolean = false);
|
||
function CtrlTagToImage(aSender: TObject): TImage;
|
||
procedure InitHttp;
|
||
procedure EncFile(sPath: String);
|
||
procedure DecFile(sPath: String);
|
||
procedure ApprovalFileExport(aList: TStrings);
|
||
procedure ApprovalFileDecrypt(OA: ISuperObject);
|
||
procedure OnClipboardNotify(Sender: TDrawClipboard);
|
||
procedure OnSetLangClick(aSender: TObject);
|
||
procedure ShowTrayMsg(brFlag: TBalloonFlags; sTitle, sText: String);
|
||
procedure DoAgentUninstall;
|
||
procedure UpdateLangRes;
|
||
procedure AfterLangChange(Sender: TObject; const LanguageFile: string);
|
||
procedure AddFoundCttSchRst(pResult: PSchResult);
|
||
|
||
procedure TimerNotification(Sender: TObject);
|
||
procedure TimerReqCoreInfo(aSender: TObject);
|
||
|
||
procedure UpdateScreenLogo(bForceUpdate: Boolean = false);
|
||
|
||
function SetAipLabel(sPath: String; sAipLabelId: String): Boolean;
|
||
procedure OnProcNotify(aSender: TThdProcessWatch; pEnt: PPwEnt; aKind: TProcessWatchKind);
|
||
public
|
||
{ Public declarations }
|
||
Constructor Create(aOwner: TComponent); override;
|
||
procedure CreateParams(var Params: TCreateParams); override;
|
||
Destructor Destroy; override;
|
||
|
||
procedure UpdateCttSchRstButton;
|
||
|
||
procedure process_WM_POPUP_MSG(var msg: TMessage); Message WM_POPUP_MSG;
|
||
procedure process_WM_POPUP_LICENSE(var msg: TMessage); Message WM_POPUP_LICENSE;
|
||
procedure process_WM_POPUP_AFTERREPORT(var msg: TMessage); Message WM_POPUP_AFTERREPORT;
|
||
procedure process_WM_POPUP_MSG_SYSTEM(var msg: TMessage); Message WM_POPUP_MSG_SYSTEM;
|
||
procedure process_WM_REFRESH_VIEW(var msg: TMessage); Message WM_REFRESH_VIEW;
|
||
procedure process_WM_SYSCOMMAND(var msg: TWMSysCommand); Message WM_SYSCOMMAND;
|
||
procedure process_WM_SCREENLOCK(var msg: TMessage); Message WM_SCREENLOCK;
|
||
procedure process_WM_REFRESH_CLIPBOARDCHAIN(var msg: TMessage); Message WM_REFRESH_CLIPBOARDCHAIN;
|
||
procedure process_WM_REQ_AGENT_UNINSTALL(var msg: TMessage); Message WM_REQ_AGENT_UNINSTALL;
|
||
|
||
// 클립보드 처리
|
||
// procedure process_WM_CHANGECBCHAIN(var msg: TMessage); Message WM_CHANGECBCHAIN;
|
||
// procedure process_WM_DRAWCLIPBOARD(var msg: TMessage); Message WM_DRAWCLIPBOARD;
|
||
|
||
procedure process_WM_CTTSCH_INIT(var msg: TMessage); Message WM_CTTSCH_INIT;
|
||
procedure process_WM_CTTSCH_REQUEST(var msg: TMessage); Message WM_CTTSCH_REQUEST;
|
||
procedure process_WM_COPYDATA(var msg: TMessage); Message WM_COPYDATA;
|
||
procedure process_WM_NOTIFY_HOOKDATA(var msg: TMessage); Message WM_NOTIFY_HOOKDATA;
|
||
|
||
procedure process_WM_INIT_HLEPER(var msg: TMessage); Message WM_INIT_HLEPER;
|
||
procedure process_WM_RESPONSE_HLEPER(var msg: TMessage); Message WM_RESPONSE_HLEPER;
|
||
procedure process_WM_REQUEST_DRM(var msg: TMessage); Message WM_REQUEST_DRM;
|
||
procedure process_WM_REQ_FILETAG_CONTROL(var msg: TMessage); Message WM_REQ_FILETAG_CONTROL;
|
||
procedure process_WM_REQ_KWDSCH_CONTROL(var msg: TMessage); Message WM_REQ_KWDSCH_CONTROL;
|
||
procedure process_WM_REQ_OUTLOOK_CONTROL(var msg: TMessage); Message WM_REQ_OUTLOOK_CONTROL;
|
||
|
||
procedure process_WM_UPDATE_SCREENLOGO(var msg: TMessage); Message WM_UPDATE_SCREENLOGO;
|
||
|
||
procedure process_WM_NOTIEXECUTE_END(var msg: TMessage); Message WM_NOTIEXECUTE_END;
|
||
procedure process_WM_POPUP_PRINTWATER_PROGRESS(var msg: TMessage); Message WM_POPUP_PRINTWATER_PROGRESS;
|
||
procedure process_WM_POPUP_PRTW_PROGRESS(var msg: TMessage); Message WM_POPUP_PRTW_PROGRESS;
|
||
|
||
procedure process_WM_CATCHKEY_NOTIFY(var msg: TMessage); Message WM_CATCHKEY_NOTIFY;
|
||
|
||
procedure process_WM_DISPLAYCHANGE(var msg: TMessage); Message WM_DISPLAYCHANGE;
|
||
// procedure process_WM_SETTINGCHANGE(var msg: TMessage); Message WM_SETTINGCHANGE; // WM_WTSSESSION_CHANGE ??
|
||
procedure process_WM_SCREEN_CAPTURE_BLOCK(var msg: TMessage); Message WM_SCREEN_CAPTURE_BLOCK;
|
||
|
||
procedure process_WM_POPUP_MSG2(var msg: TMessage); Message WM_POPUP_MSG2;
|
||
procedure process_WM_POPUP_MSG_PI(var msg: TMessage); Message WM_POPUP_MSG_PI;
|
||
procedure process_WM_CLOSE_CTTSCH(var msg: TMessage); Message WM_CLOSE_CTTSCH;
|
||
procedure process_WM_REQUEST_APPROVAL(var msg: TMessage); Message WM_REQUEST_APPROVAL;
|
||
procedure process_WM_DONE_APPROVAL(var msg: TMessage); Message WM_DONE_APPROVAL;
|
||
procedure process_WM_NOTI_RCVPOLICY(var msg: TMessage); Message WM_NOTI_RCVPOLICY;
|
||
|
||
procedure process_WM_ENDSESSION(var msg: TMessage); Message WM_ENDSESSION;
|
||
|
||
{$IFNDEF OLD_CB_MON}
|
||
procedure process_WM_CLIPBOARDUPDATE(var msg: TMessage); Message WM_CLIPBOARDUPDATE;
|
||
{$ENDIF}
|
||
|
||
property KeyMon: TKeyMonDLL read KeyMonDll_;
|
||
end;
|
||
|
||
var
|
||
gMain: TDlgeCrmHeMain = nil;
|
||
DlgeCrmHeMain: TDlgeCrmHeMain;
|
||
|
||
implementation
|
||
|
||
uses
|
||
Define, Tocsg.Strings, Tocsg.Trace, Condition, Tocsg.Shell,
|
||
DNotice, Tocsg.Safe, License, DLicense, DQnA, DLiteInfo,
|
||
Tocsg.Service, Tocsg.Path, Winapi.WinSvc,
|
||
ProcessParam, Tocsg.Convert, ManagerModel, DHelp, Tocsg.Exception,
|
||
VulnerabilityService, Tocsg.DateTime, DInputEmpNo, Tocsg.WndUtil,
|
||
IdMultipartFormData, Tocsg.Files, DAfterReport, System.DateUtils,
|
||
System.IniFiles, Tocsg.Registry, DLockScreen, Tocsg.Json,
|
||
Tocsg.User32, DReqSchInfoTest, KDL.Localizer, DCustomCttSch,
|
||
DViewCttSchResult, Tocsg.Notification, DPolicyView,
|
||
DReqDevExcept, DSelPerInfo, ManagerPerInfo, DefineKeyMon,
|
||
DDecryptDrm, DSimpleInfo, Tocsg.Packet, DProgCttSchTask,
|
||
Tocsg.WTS, AppCtrlDefine, DOfflineExpAuth, CrmLogger, Soap.EncdDecd, DDebugPW,
|
||
DUninstallPW, CrmUtil, ProcessServerAPI, Winapi.ShellAPI,
|
||
Vcl.Clipbrd, Tocsg.Driver, ManagerCampaign, Tocsg.Keyboard, DOtpAuth,
|
||
DSchPiNoti, DNoticeImg, Tocsg.Delete, Tocsg.PCRE, ProcessSoftcampDRM, DCurPolicyView,
|
||
DCustomCttSchOpt,
|
||
DViewCustomCttSchResult, STLabGuardModule, DEncryptDrm, ThdWebUrl, Winapi.ActiveX, ManagerPrint,
|
||
DPrintApproveReq, DReqPrintList, DPrintApproveReqA, DPrintApproveRst, Tocsg.AIP,
|
||
DAip2KessDrm, DKess2AipDrm, Tocsg.Hash, BuildInfo, DDeleteCode,
|
||
Winapi.AccCtrl, Winapi.AclAPI, DEjectDLL, DUsbInfo, DBs1Log, Tocsg.Printer, DBrowserOpt, DPerfectDel, Tocsg.Disk, DEncryptAip, DDecryptAip, Tocsg.Url;
|
||
|
||
resourcestring
|
||
RS_StateNormal = '상태 양호';
|
||
RS_StateVul = '취약상태';
|
||
RS_MsgLogoWarningNHL = '중요문서 정보유출 시 법적 제재를 받을 수 있으며, 주의하시기 바랍니다.';
|
||
RS_MsgLogoLX = 'LX 한국국토정보공사 화상회의 및 원격근무';
|
||
RS_MsgLogoVolvo = 'VOLVO 재택근무';
|
||
RS_SecuMode = '보안모드';
|
||
RS_HEC_SecuMode = '사내모드';
|
||
RS_VulMode = '취약모드';
|
||
RS_SleepMode = '수면모드';
|
||
RS_HEC_SleepMode = '사외모드';
|
||
RS_CheckOff = '점검기능 Off';
|
||
RS_FMT_Searching = '[%s] %d/%d (%d%%), 검사중 .. "%s"';
|
||
RS_FMT_Scaning = '[%s] "%s"에서 파일을 추출중입니다... Files=%d';
|
||
RS_NoDeleteSecuMode1 = '보안모드 중에는 삭제할 수 없습니다.';
|
||
RS_NoDeleteSecuMode2 = '먼저 보안모드를 해제 해주십시오.';
|
||
RS_Q_DeleteHE1 = '[예]를 선택하면, %s이 삭제됩니다.';
|
||
RS_Q_DeleteHE2 = '삭제는 복구 불가능하며 재택근무와 원격 접속에 치명적인';
|
||
RS_Q_DeleteHE3 = '오류를 야기할 수 있습니다.';
|
||
RS_Q_DeleteHE4 = '삭제를 진행하시겠습니까?';
|
||
RS_MsgIsBigFile50MbLow = '파일 크기가 너무 큽니다. 50MB 이하 파일을 선택 해주십시오.';
|
||
RS_MsgEncFile = 'DRM 파일 암호화를 완료했습니다.';
|
||
RS_MsgDecFile = 'DRM 파일 복호화를 완료했습니다.';
|
||
RS_MsgEncInSecuMode = 'DRM 파일 동작은 안전모드에서만 동작합니다. VPN 연결 및 PC 취약점 상태를 확인하세요.';
|
||
RS_NoConnectServer = '서버에 연결 되어있지 않습니다.';
|
||
RS_WaitRetry = '잠시 후 다시 시도해 주십시오.';
|
||
RS_LodingInfo = '정보를 불러오는 중입니다...';
|
||
RS_AvInfo = 'Anti-virus 정보';
|
||
RS_FwInfo = '방화벽 정보';
|
||
RS_RecentDtPatchOS = '최신 OS 패치확인 일시';
|
||
RS_RemainOsCheckTime = 'OS 패치확인 남은시간';
|
||
RS_OsPatchAble = '최신 OS 패치가 있습니다.';
|
||
RS_CheckingOsPatch = '최신 OS 패치를 확인하고 있습니다...';
|
||
RS_OsPatchInfo = 'OS 패치 정보';
|
||
RS_Q_StopCttSch = '개인정보 검출을 중지하시겠습니까?';
|
||
RS_InitWork = '작업을 준비중입니다...';
|
||
RS_SendAppInstInfo = '설치된 소프트웨어 정보를 전송했습니다.';
|
||
RS_StopCttSch = '개인정보 검출 중지';
|
||
RS_StartCttSch = '개인정보 검출 시작';
|
||
RS_MsgVpnClosed1 = '업무 환경이 종료되었습니다.';
|
||
RS_MsgVpnClosed2 = '%s 은 수면 모드로 변경되며';
|
||
RS_MsgVpnClosed3 = '보안 기능은 모두 종료됩니다.';
|
||
RS_MsgNetClose1 = '취약한 보안 설정이 감지되어,';
|
||
RS_MsgNetClose2 = '네트워크가 잠시 종료됩니다.';
|
||
RS_MsgNetClose3 = '모든 연결(VPN포함)은 초기화 됩니다.';
|
||
RS_AlreadyCttSchRts1 = '개인정보 검사 결과가 존재합니다.';
|
||
RS_AlreadyCttSchRts2 = '삭제 후 다시 검사하시겠습니까?';
|
||
RS_PiScanning = '개인정보 검사가 진행되고 있습니다.';
|
||
RS_ClosePerInfoResult = '먼저 개인정보 검사 결과창을 닫아 주십시오.';
|
||
RS_EncScanning = '파일 암호화가 진행되고 있습니다.';
|
||
RS_ConfirmRetry = '완료 후 다시 시도해 주십시오.';
|
||
RS_NoScanData = '개인정보 검사 결과가 존재하지 않습니다.';
|
||
RS_ScanConfirm1 = '[%s] 일시에';
|
||
RS_ScanConfirm2 = '%s개가 추출된 검색 옵션으로';
|
||
RS_ScanConfirm3 = '개인정보 검사를 진행합니다.';
|
||
RS_ScanConfirm4 = '계속 하시겠습니까?';
|
||
RS_ScanConfirm5 = '(예상 시간 : %s)';
|
||
RS_FailScanOpt = '개인정보 검사 옵션을 가져올 수 없습니다.';
|
||
RS_MsgMain1_ABL = '[취약상태]로 되어 있는 버튼을 클릭하여 설정을 변경하세요.';
|
||
RS_MsgMain2_ABL = '자세한 설정 방법은 오른쪽 상단의 [?]를 클릭하여 참고하세요.';
|
||
RS_Tray_ABL = 'ABL생명 재택근무PC 보안통제 솔루션';
|
||
RS_Q_DRMENC = '선택한 파일을 DRM 적용 하시겠습니까?';
|
||
RS_NoAuth = '권한이 없습니다.';
|
||
RS_PwLastDate = '암호 설정 일시 : ';
|
||
RS_MsgPwChgUntil = '암호 변경일까지 %d일 남았습니다.';
|
||
RS_MsgPwChg = '암호 변경일이 초과되었습니다.'#13#10'암호를 변경해 주십시오.';
|
||
RS_OFFLINE = '오프라인';
|
||
RS_OFFLINEEXP = '예외사용';
|
||
RS_UpdatePolicy = '정책을 업데이트 했습니다.';
|
||
RS_ErrorUpdatePolicy = '정책을 가져오는 중 오류가 발생했습니다. (%d)';
|
||
RS_FailUpdatePolicy = '정책 업데이트를 실패 했습니다.';
|
||
RS_MsgDisconnected = '연결이 해제된 상태입니다.';
|
||
RS_MsgRcvPolicy = '정책을 가져오는 중입니다.';
|
||
RS_CustomCttSching = '컨텐츠 검색이 동작중입니다.';
|
||
RS_ExpPrtWater = '프린트 워터마크 예외';
|
||
RS_MsgExpPrtWater = '프린트 워터마크 예외 사유를 입력해주세요.';
|
||
RS_InputQnA = '문의 내용을 입력해 주십시오.';
|
||
RS_QnA = '문의하기';
|
||
RS_Cancel = '취소';
|
||
RS_OK = '확인';
|
||
RS_IDCHANGE = 'ID 변경';
|
||
RS_EmpNoC = '사번 : ';
|
||
RS_DeptC = '부서 : ';
|
||
RS_NameC = '이름 : ';
|
||
RS_MsgCopyCB = '클립보드에 복사 되었습니다.';
|
||
RS_ExtrSpoolImage = '출력 이미지를 수집 중입니다...';
|
||
RS_ExtrImageText = '출력 텍스트를 검출하고 있습니다.';
|
||
RS_ExtrWait = '잠시만 기다려 주십시오.';
|
||
RS_FMT_ProcPrt = '%d페이지 처리 중...';
|
||
RS_PrtInit = '출력 분석';
|
||
RS_PrtImgCol = '이미지 수집';
|
||
RS_PrtExtrTxt = '텍스트 분석';
|
||
RS_PrtReInit = '재출력 준비';
|
||
RS_PrtSecu = '보안 출력';
|
||
RS_NotFoundFile = '존재하지 않는 파일입니다.';
|
||
RS_NoApprovalInfo = '결재자 정보를 가져올 수 없습니다.';
|
||
RS_AlreadyApprovFile = '이미 반출 대상 파일입니다.';
|
||
RS_CompleteWork1 = '작업을 완료했습니다.';
|
||
RS_CompleteWork2 = '(성공 : %d, 실패 : %d)';
|
||
RS_FileExpoLimit = '최대 %d개까지 처리할 수 있습니다.';
|
||
RS_FileExpReqLimitMsg1 = '결재 요청을 위한 파일 업로드 용량(최소 %dMB, 최대 %dMB)을 ';
|
||
RS_FileExpReqLimitMsg2 = '초과하여 파일 업로드를 할 수 없습니다.';
|
||
RS_FileExpReqLimitMsg3 = '계속 하시겠습니까?';
|
||
RS_CampnWorkin = '현재 캠페인이 진행중입니다.';
|
||
RS_NotFoundCampn = '캠페인이 존재하지 않습니다.';
|
||
RS_CompleteCampn = '완료한 캠페인 입니다.';
|
||
RS_RetryTomorrow = '내일 다시 시도해주십시오.';
|
||
RS_Q_CampnWork = '"%s"를 진행하시겠습니까?';
|
||
|
||
{$R *.dfm}
|
||
|
||
function GetLogoImg(sId: String): TMemoryStream;
|
||
var
|
||
res: TResourceStream;
|
||
begin
|
||
Result := nil;
|
||
|
||
try
|
||
res := TResourceStream.Create(HInstance, sId, 'raw');
|
||
if res <> nil then
|
||
begin
|
||
Result := TMemoryStream.Create;
|
||
res.SaveToStream(Result);
|
||
res.Free;
|
||
Result.Position := 0;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(E, 'Fail .. GetLogoImg()');
|
||
end;
|
||
end;
|
||
|
||
{ TDlgeCrmHeMain }
|
||
|
||
Constructor TDlgeCrmHeMain.Create(aOwner: TComponent);
|
||
var
|
||
bExeRecover: Boolean;
|
||
|
||
procedure InitCtrls;
|
||
var
|
||
sPath: String;
|
||
ini: TIniFile;
|
||
ms: TMemoryStream;
|
||
i: Integer;
|
||
CompModel: TCompanyModel;
|
||
begin
|
||
dlgWaterProg_ := nil;
|
||
dlgPrtWProg_ := nil;
|
||
|
||
{$IFDEF _MLANG_}
|
||
FreeLocalizer.AfterLanguageLoad := AfterLangChange;
|
||
|
||
imgChangeEmpNo.Left := 269;
|
||
imgLang.Left := 353;
|
||
imgLang.Top := 19;
|
||
imgLang.Visible := true;
|
||
{$ELSE}
|
||
imgChangeEmpNo.Left := 327;
|
||
imgLang.Left := 353;
|
||
imgLang.Top := 53;
|
||
imgLang.Visible := false;
|
||
{$ENDIF}
|
||
lbChangeEmpNo.Left := imgChangeEmpNo.Left;
|
||
lbChangeEmpNo.Visible := imgChangeEmpNo.Visible;
|
||
lbLang.Left := imgLang.Left;
|
||
lbLang.Visible := imgLang.Visible;
|
||
bPreWinKey_ := false;
|
||
bScrCapKey_ := false;
|
||
bForceCollectCB_ := false;
|
||
|
||
ChangeWindowMessageFilter(WM_CLIPBOARDUPDATE, MSGFLT_ADD);
|
||
ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD);
|
||
ChangeWindowMessageFilter(WM_CTTSCH_INIT, MSGFLT_ADD);
|
||
ChangeWindowMessageFilter(WM_CTTSCH_REQUEST, MSGFLT_ADD);
|
||
ChangeWindowMessageFilter(WM_NOTIFY_HOOKDATA, MSGFLT_ADD);
|
||
ChangeWindowMessageFilter(WM_INIT_HLEPER, MSGFLT_ADD);
|
||
ChangeWindowMessageFilter(WM_RESPONSE_HLEPER, MSGFLT_ADD);
|
||
ChangeWindowMessageFilter(WM_REQUEST_DRM, MSGFLT_ADD);
|
||
// ChangeWindowMessageFilter(WM_GETOBJECT, MSGFLT_ADD); // msaa
|
||
|
||
ChangeWindowMessageFilter(WM_CHANGECBCHAIN, MSGFLT_ADD);
|
||
ChangeWindowMessageFilter(WM_DRAWCLIPBOARD, MSGFLT_ADD);
|
||
ChangeWindowMessageFilter(WM_POPUP_PRTW_PROGRESS, MSGFLT_ADD);
|
||
|
||
// ChangeWindowMessageFilterEx(Handle, WM_COPYDATA, MSGFLT_ALLOW, nil);
|
||
// ChangeWindowMessageFilterEx(Handle, WM_CTTSCH_INIT, MSGFLT_ALLOW, nil);
|
||
// ChangeWindowMessageFilterEx(Handle, WM_CTTSCH_REQUEST, MSGFLT_ALLOW, nil);
|
||
|
||
// 작업폴더 초기화 22_0614 15:23:51 kku
|
||
sPath := GetRunExePathDir + 'Task\';
|
||
if DirectoryExists(sPath) then
|
||
DeleteDir(sPath);
|
||
|
||
// 저장된 업체 정보 활용 22_0624 08:28:15 kku
|
||
{$IFNDEF DEBUG}
|
||
Guard(CompModel, TCompanyModel.Create);
|
||
CompModel.Load;
|
||
if CUSTOMER_TYPE <> CompModel.CustomerType then
|
||
begin
|
||
CUSTOMER_TYPE := CompModel.CustomerType;
|
||
CUSTOMER_SUB_TYPE := CompModel.CustomerSubType;
|
||
SetLength(DEST_FORCE, CompModel.SvrDestList.Count);
|
||
for i := 0 to CompModel.SvrDestList.Count - 1 do
|
||
DEST_FORCE[i] := CompModel.SvrDestList[i];
|
||
end;
|
||
{$ENDIF}
|
||
|
||
sPath := GetProgramFilesDir + DIR_TG + INI_FORCEHE;
|
||
if FileExists(sPath) then
|
||
begin
|
||
Guard(ini, TIniFile.Create(sPath));
|
||
var SvrList: TStringList;
|
||
Guard(SvrList, TStringList.Create);
|
||
if SplitString(Trim(ini.ReadString('Force', 'SvrDest', '')), ';', SvrList) > 0 then
|
||
begin
|
||
SetLength(DEST_FORCE, SvrList.Count);
|
||
for i := 0 to SvrList.Count - 1 do
|
||
DEST_FORCE[i] := SvrList[i];
|
||
end;
|
||
CUSTOMER_TYPE := ConvCustomerCodeFromNick(Trim(ini.ReadString('Force', 'Customer', '')));
|
||
|
||
if ini.ReadBool('Force', 'DebugMode', false) then
|
||
begin
|
||
// if TTgTrace.SetAllocConsole(true) then
|
||
TDlgBs1Log.Create.Show;
|
||
begin
|
||
if gTrace <> nil then
|
||
gTrace.Level := 99;
|
||
|
||
// bIsDebugMode_ := true;
|
||
TTgTrace.T('DebugMode .. ON');
|
||
end;
|
||
end;
|
||
|
||
bExeRecover := ini.ReadBool('Force', 'RecoverFile', true);
|
||
|
||
// ManagerService 에서 처리 25_0402 18:37:03 kku
|
||
// i := ini.ReadInteger('Force', 'LogLv', 0);
|
||
// if gTrace.Level < i then
|
||
// gTrace.Level := i;
|
||
|
||
InitForceConfig;
|
||
end;
|
||
|
||
// 레지스트리에 버전 정보 추가 22_0801 17:49:10 kku
|
||
SetRegValueString(HKEY_LOCAL_MACHINE, REG_HE, 'Version', SdkVersion, true);
|
||
|
||
if IsBS1Display then
|
||
APP_TITLE := 'BSOne V2.0';
|
||
Caption := APP_TITLE;
|
||
|
||
sTrayHint_ := '';
|
||
UpdateLangRes;
|
||
SetStateImage(0);
|
||
|
||
// case CUSTOMER_TYPE of
|
||
// CUSTOMER_SHSC,
|
||
// CUSTOMER_SHCI : DispBlock_ := TDlgDispLogoList.Create;
|
||
// else DispBlock_ := nil;
|
||
// end;
|
||
DispBlock_ := TDlgDispLogoList.Create;
|
||
|
||
DispLogos_ := TDlgDispLogoList.Create;
|
||
DispLogosST_ := TDlgDispLogoList.Create;
|
||
LastWS_ := wsNormal;
|
||
WndAni_ := TWindowAnimator.Create(Self);
|
||
WndAni_.Duration := 300;
|
||
bWndExpend_ := false;
|
||
bIgrNextCbNoti_ := false;
|
||
bIgrNextCbNotiExcel_ := false;
|
||
|
||
SetImgBtn(imgUpBtnList, imgHelp, imgHelp.Tag);
|
||
SetImgBtn(imgUpBtnList, imgClose, imgClose.Tag);
|
||
SetImgBtn(imgUpBtnList, imgOsPchInfo, imgOsPchInfo.Tag);
|
||
SetImgBtn(imgUpBtnList, imgAvInfo, imgAvInfo.Tag);
|
||
SetImgBtn(imgUpBtnList, imgFwInfo, imgFwInfo.Tag);
|
||
SetImgBtn(imgUpBtnList, imgPwDateInfo, imgPwDateInfo.Tag);
|
||
|
||
SetImgBtn(imgEvList, imgQA, 0);
|
||
SetImgBtn(imgEvList, imgChangeEmpNo, 0);
|
||
SetImgBtn(imgLangList, imgLang, 0);
|
||
|
||
SetImgBtn(imgBtnList, imgOsInfo, 0);
|
||
SetImgBtn(imgBtnList, imgSetOs, 0);
|
||
SetImgBtn(imgBtnList, imgSetAccPass, 0);
|
||
SetImgBtn(imgBtnList, imgSetScreenSaver, 0);
|
||
SetImgBtn(imgBtnList, imgSetAntiVirus, 0);
|
||
SetImgBtn(imgBtnList, imgSetFW, 0);
|
||
|
||
SetImgBtn(imgStateList, imgOsVerState, imgOsVerState.Tag);
|
||
SetImgBtn(imgStateList, imgOsPatchState, imgOsPatchState.Tag);
|
||
SetImgBtn(imgStateList, imgAvState, imgAvState.Tag);
|
||
SetImgBtn(imgStateList, imgPassState, imgPassState.Tag);
|
||
SetImgBtn(imgStateList, imgScrSavState, imgScrSavState.Tag);
|
||
SetImgBtn(imgStateList, imgFwState, imgFwState.Tag);
|
||
lbVer.Caption := 'Tocsg Provided';
|
||
|
||
Width := imgBack.Width;
|
||
|
||
if (CUSTOMER_TYPE = CUSTOMER_METLIFE) and
|
||
not imgCompany.Visible then
|
||
begin
|
||
ms := GetLogoImg('RS_MAINIMG_METLIFE');
|
||
if ms <> nil then
|
||
begin
|
||
try
|
||
imgCompany.Picture.LoadFromStream(ms);
|
||
imgCompany.Visible := true;
|
||
except
|
||
|
||
end;
|
||
FreeAndNil(ms);
|
||
end;
|
||
end;
|
||
|
||
// nScrW_ := 0;
|
||
// nScrH_ := 0;
|
||
// DTagList_ := nil;
|
||
// Client_ := nil;
|
||
ThdCustomScanSch_ := nil;
|
||
sSchRstPath_ := '';
|
||
|
||
{$IFDEF OLD_CB_MON}
|
||
CbMon_ := TDrawClipboard.Create;
|
||
CbMon_.OnDrawClipboard := OnClipboardNotify;
|
||
{$ELSE}
|
||
sOldCbHds_ := '';
|
||
AddClipboardFormatListener(Handle);
|
||
{$ENDIF}
|
||
|
||
sCbAbleApps_ := '';
|
||
sCbCollectApps_ := '';
|
||
dtRecentCbPopup_ := 0;
|
||
dtRecentPrtScrKey_ := 0;
|
||
CbAbleAppList_ := TStringList.Create;
|
||
CbAbleAppList_.CaseSensitive := false;
|
||
CbCollectAppList_ := TStringList.Create;
|
||
CbCollectAppList_.CaseSensitive := false;
|
||
|
||
sWebAbSigs_ := '';
|
||
sWebAbFNames_ := '';
|
||
sEtcAbSigs_ := '';
|
||
sEtcAbFNames_ := '';
|
||
sWebAbExts_ := '';
|
||
sEtcAbExts_ := '';
|
||
WebAbSigList_ := TStringList.Create;
|
||
WebAbFNameList_ := TStringList.Create;
|
||
EtcAbSigList_ := TStringList.Create;
|
||
EtcAbFNameList_ := TStringList.Create;
|
||
WebAbExtList_ := TStringList.Create;
|
||
EtcAbExtList_ := TStringList.Create;
|
||
|
||
KeyMonDll_ := TKeyMonDLL.Create(Handle, MAP_FILENAME_KM, GetRunExePathDir + DLL_KEYMON);
|
||
if KeyMonDll_.LastError <> ERROR_SUCCESS then
|
||
begin
|
||
MessageBox(Handle, PChar(Format('Fail .. Load KM DLL .. Error = %d',
|
||
[KeyMonDll_.LastError])), PChar(APP_TITLE), MB_ICONSTOP or MB_OK);
|
||
end;
|
||
|
||
bIsClearCB_ := false;
|
||
|
||
FrmPolicyView_ := TFrmPolicyView.Create(Self);
|
||
FrmPolicyView_.Parent := pnPolicyView;
|
||
FrmPolicyView_.Align := alClient;
|
||
FrmPolicyView_.Visible := true;
|
||
pnPolicyView.Visible := true;
|
||
{$IFDEF _MLANG_}
|
||
UpdateLangName(StrToIntDef('$' + ExtrNumStr(ExtractFileName(FreeLocalizer.LanguageFile)), 1042));
|
||
{$ENDIF}
|
||
|
||
// {$IFDEF DEBUG}
|
||
// btnTest1.Visible := true;
|
||
// {$ENDIF}
|
||
|
||
tInit.Enabled := true;
|
||
end;
|
||
|
||
begin
|
||
Inherited Create(aOwner);
|
||
ASSERT(gMain = nil);
|
||
gMain := Self;
|
||
|
||
sSysDir_ := GetSystemDir;
|
||
// MtxScrLogo_ := nil;
|
||
bExeRecover := true;
|
||
OutClient_ := nil;
|
||
ProcW_ := nil;
|
||
lbCompanyName.Caption := '';
|
||
{$IFDEF DEBUG}
|
||
// DeleteFile('C:\taskToCSG\eCrmHE\OUT_Debug - Win64\conf\pdmsa.prop');
|
||
// DeleteFile('C:\taskToCSG\eCrmHE\OUT_Debug - Win64\conf\admsa.prop');
|
||
// DeleteFile('C:\taskToCSG\eCrmHE\OUT_Debug - Win64\conf\cdmsa.prop');
|
||
|
||
// 테스트 방해물? 먼저 제거
|
||
TerminateProcessByName('eCrmHeService.exe');
|
||
TerminateProcessByName('eCrmHomeEdition.exe', GetCurrentProcessId);
|
||
if TerminateProcessByName('javaw.exe') then
|
||
Sleep(1000);
|
||
|
||
// btnTest1.Visible := true;
|
||
// btnTest2.Visible := true;
|
||
{$ENDIF}
|
||
|
||
MgSvc_ := nil;
|
||
TrayIcon_ := nil;
|
||
HTTP_ := nil;
|
||
SSL_ := nil;
|
||
// Client_ := nil;
|
||
|
||
AccObj_SubTitle_ := nil;
|
||
VariantClear(varSubTitle_);
|
||
hEditWnd_ := 0;
|
||
|
||
dwChkAbMon_ := 0;
|
||
sChkAbMon_ := '';
|
||
sRecentBwUrl_ := '';
|
||
sRecentBwTitle_ := '';
|
||
// bIsDebugMode_ := false;
|
||
sRecentABFile_ := '';
|
||
dwRecentAB_ := 0;
|
||
//
|
||
FileAbLogs_ := TStringList.Create;
|
||
sLastNotExistFile_ := '';
|
||
|
||
bUsePersonalFun_ := true;
|
||
// bPopChromeSK_ := false;
|
||
dwBlockInputCTick_ := 0;
|
||
bCtrlA_ := false;
|
||
|
||
TerminateProcessByName(EXE_BROWSER_SECU);
|
||
|
||
qNoti_ := TQueue<String>.Create;
|
||
ThdTaskTimer_ := TThdTaskTimer.Create(500, true);
|
||
ThdTaskTimer_.AddTask(TimerNotification, 500, true);
|
||
//// ThdTaskTimer_.AddTask(TimerReqCoreInfo, 1000, true);
|
||
ThdTaskTimer_.StartTimerThread;
|
||
|
||
ThdWebOC_ := TThdWebOpenCheck.Create;
|
||
ThdWebOC_.StartThread;
|
||
|
||
{$IFDEF DEBUG}
|
||
// CUSTOMER_TYPE := CUSTOMER_DEV;
|
||
// CUSTOMER_TYPE := CUSTOMER_SANKYO;
|
||
// CUSTOMER_TYPE := CUSTOMER_SOSLAB;
|
||
// CUSTOMER_TYPE := CUSTOMER_KORENTAL;
|
||
// CUSTOMER_TYPE := CUSTOMER_SOLMIX;
|
||
// CUSTOMER_TYPE := CUSTOMER_WELFNI;
|
||
CUSTOMER_TYPE := CUSTOMER_WELFND;
|
||
// CUSTOMER_TYPE := CUSTOMER_BLUECORNER;
|
||
// CUSTOMER_TYPE := CUSTOMER_SHSC;
|
||
// CUSTOMER_TYPE := CUSTOMER_SHCI;
|
||
// CUSTOMER_TYPE := CUSTOMER_JUVIS;
|
||
// CUSTOMER_TYPE := CUSTOMER_WINSTN;
|
||
// CUSTOMER_TYPE := CUSTOMER_SOLIDEO;
|
||
// CUSTOMER_TYPE := CUSTOMER_LOTTEMART;
|
||
// CUSTOMER_TYPE := CUSTOMER_GIORDANO;
|
||
// CUSTOMER_TYPE := CUSTOMER_GEC;
|
||
// CUSTOMER_TYPE := CUSTOMER_HDENG;
|
||
// CUSTOMER_TYPE := CUSTOMER_KOCES;
|
||
// CUSTOMER_TYPE := CUSTOMER_KBIZ;
|
||
// CUSTOMER_TYPE := CUSTOMER_CJONS;
|
||
// CUSTOMER_TYPE := CUSTOMER_KIMCHANG;
|
||
// CUSTOMER_TYPE := CUSTOMER_SERVE1;
|
||
// CUSTOMER_TYPE := CUSTOMER_UNITUS;
|
||
// CUSTOMER_TYPE := CUSTOMER_MOTRAS;
|
||
// CUSTOMER_TYPE := CUSTOMER_KDNVN;
|
||
// CUSTOMER_TYPE := CUSTOMER_DEMO;
|
||
// CUSTOMER_TYPE := CUSTOMER_SKEC;
|
||
// CUSTOMER_TYPE := CUSTOMER_SCD;
|
||
{$ENDIF}
|
||
|
||
InitCtrls;
|
||
|
||
//mgkim 테스트를 위해 주석
|
||
RecoverSvc_ := TRecoverService.Create;
|
||
// if bExeRecover then
|
||
// RecoverSvc_.StartService;
|
||
|
||
if IsLogSendToWindbg then
|
||
begin
|
||
ProcW_ := TThdProcessWatch.Create;
|
||
ProcW_.OnProcessWatchNotify := OnProcNotify;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.CreateParams(var Params: TCreateParams);
|
||
begin
|
||
inherited CreateParams( Params );
|
||
Params.ExStyle := WS_EX_APPWINDOW;
|
||
Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW;
|
||
end;
|
||
|
||
Destructor TDlgeCrmHeMain.Destroy;
|
||
begin
|
||
{$IFNDEF DEBUG}
|
||
// TTgTrace.T('TDlgeCrmHeMain.Destroy() ..');
|
||
// 자연종료 된다면 컴터 꺼지는걸로 판단한다
|
||
if MgSvc_ <> nil then
|
||
MgSvc_.ProcessEndSession
|
||
else
|
||
SetRegValueString(HKEY_LOCAL_MACHINE, REG_HE, 'EDT', IntToStr(DelphiToJavaDateTime(Now)), true);
|
||
{$ENDIF}
|
||
|
||
if dlgWaterProg_ <> nil then
|
||
FreeAndNil(dlgWaterProg_);
|
||
|
||
if dlgPrtWProg_ <> nil then
|
||
FreeAndNil(dlgPrtWProg_);
|
||
|
||
tMtx.Enabled := false;
|
||
FreeAndNil(FileAbLogs_);
|
||
FreeAndNil(RecoverSvc_);
|
||
FreeAndNil(ThdWebOC_);
|
||
FreeAndNil(KeyMonDll_);
|
||
FreeAndNil(CbAbleAppList_);
|
||
FreeAndNil(CbCollectAppList_);
|
||
FreeAndNil(EtcAbExtList_);
|
||
FreeAndNil(WebAbExtList_);
|
||
FreeAndNil(EtcAbFNameList_);
|
||
FreeAndNil(EtcAbSigList_);
|
||
FreeAndNil(WebAbFNameList_);
|
||
FreeAndNil(WebAbSigList_);
|
||
{$IFDEF OLD_CB_MON}
|
||
if CbMon_ <> nil then
|
||
FreeAndNil(CbMon_);
|
||
{$ENDIF}
|
||
FreeAndNil(DispLogosST_);
|
||
FreeAndNil(DispLogos_);
|
||
if DispBlock_ <> nil then
|
||
FreeAndNil(DispBlock_);
|
||
FreeAndNil(ThdTaskTimer_);
|
||
FreeAndNil(qNoti_);
|
||
// if MtxScrLogo_ <> nil then
|
||
// FreeAndNil(MtxScrLogo_);
|
||
if OutClient_ <> nil then
|
||
FreeAndNil(OutClient_);
|
||
if HTTP_ <> nil then
|
||
FreeAndNil(HTTP_);
|
||
if SSL_ <> nil then
|
||
FreeAndNil(SSL_);
|
||
if KwdSchKvCLient_ <> nil then
|
||
FreeAndNil(KwdSchKvCLient_);
|
||
// if Client_ <> nil then
|
||
// FreeAndNil(Client_);
|
||
if ThdCustomScanSch_ <> nil then
|
||
FreeAndNil(ThdCustomScanSch_);
|
||
if ProcW_ <> nil then
|
||
FreeAndNil(ProcW_);
|
||
if gTrForm <> nil then
|
||
FreeAndNil(gTrForm);
|
||
gMain := nil;
|
||
Inherited;
|
||
if MgSvc_ <> nil then
|
||
FreeAndNil(MgSvc_);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.TimerNotification(Sender: TObject);
|
||
var
|
||
sNoti,
|
||
sTitle: String;
|
||
nPos: Integer;
|
||
begin
|
||
if qNoti_.Count = 0 then
|
||
exit;
|
||
|
||
PostMessage(Handle, WM_POPUP_MSG, 1, 0);
|
||
// sNoti := qNoti_.Dequeue;
|
||
// if sNoti = '' then
|
||
// exit;
|
||
//
|
||
// sTitle := APP_TITLE;
|
||
// nPos := Pos(':', sNoti);
|
||
// if nPos > 0 then
|
||
// begin
|
||
// sTitle := Copy(sNoti, 1, nPos - 1);
|
||
// Delete(sNoti, 1, nPos);
|
||
// end;
|
||
//
|
||
//
|
||
// ShowNotification(sTitle, sNoti);
|
||
// TTgTrace.T('TimerNotification() .. ShowNotification()');
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.TimerReqCoreInfo(aSender: TObject);
|
||
begin
|
||
// if (Client_ <> nil) and Client_.Connected then
|
||
// begin
|
||
// Client_.SendPacket(TTgPacket.Create(SLC_REQUEST_CURRENT_STATUS));
|
||
// end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.UpdateLangRes;
|
||
begin
|
||
try
|
||
if sTrayHint_ = '' then
|
||
sTrayHint_ := APP_TITLE;
|
||
|
||
case CUSTOMER_TYPE of
|
||
CUSTOMER_ABL :
|
||
begin
|
||
sTrayHint_ := RS_Tray_ABL;
|
||
lbIpInfo.Font.Size := 9;
|
||
lbWinAccount.Font.Size := 9;
|
||
lbCompanyName.Caption := RS_Tray_ABL;
|
||
lbCompanyName.Visible := (MgSvc_ = nil) or (MgSvc_.HeModeKind <> hmkVulnerability);
|
||
end;
|
||
else begin
|
||
if IsCJ_Affiliates then
|
||
begin
|
||
lbChangeEmpNo.Caption := RS_IDCHANGE;
|
||
miChangeEmpNo.Caption := RS_IDCHANGE;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
if TrayIcon_ <> nil then
|
||
TrayIcon_.Hint := sTrayHint_;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. UpdateLangRes()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.AfterLangChange(Sender: TObject; const LanguageFile: string);
|
||
begin
|
||
Caption := APP_TITLE;
|
||
UpdateLangRes;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.btnTest1Click(Sender: TObject);
|
||
var
|
||
sUrl: String;
|
||
begin
|
||
// sUrl := gMgSvc.SendApproval(0, pEnt_);
|
||
|
||
if sUrl = '' then
|
||
begin
|
||
// gMgSvc.MgPrt.DelPrintInfo(pEnt_.sId);
|
||
TTgTrace.T('Fail .. SendApprovalPrint()');
|
||
MessageBox(Handle, PChar('결재자 정보를 가져올 수 없습니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
end else
|
||
ExecutePath(gMgSvc.DestIPort + sUrl);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.btnTest2Click(Sender: TObject);
|
||
var
|
||
LogInfo: TLogInfo;
|
||
DrvInfo: TDriveInfo;
|
||
begin
|
||
GetDriveDetail('D:\', @DrvInfo, true);
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
LogInfo.sCode := MONITOR_EMBEDDEDHARDDISK;
|
||
LogInfo.sDevName := DrvInfo.sFriendlyName;
|
||
LogInfo.sDevSerial := DrvInfo.sSerial;
|
||
LogInfo.sDevClassId := DrvInfo.sClassGuid;
|
||
LogInfo.sSummary := '[Remove] Fixed Disk';
|
||
LogInfo.sResInfo := IntToStr(DrvInfo.llSize);
|
||
LogInfo.sAppPath := DrvInfo.sDrive;
|
||
LogInfo.sComment := Format('%s, %s', [DrvInfo.sClass, DrvInfo.sDesc]);
|
||
// LogInfo.
|
||
MgSvc_.SendEventLogEx(@LogInfo);
|
||
// MgSvc_.SendEventLog(URI_USER_ACTION, MODE_SECURITY_END, '[DEBUG..REG] Sleep mode');
|
||
// MgSvc_.MgCampn.SendPrintTest;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.InitHttp;
|
||
begin
|
||
if (HTTP_ = nil) and (SSL_ = nil) then
|
||
begin
|
||
SSL_ := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
|
||
SSL_.SSLOptions.Method := sslvSSLv23;
|
||
SSL_.SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_1, sslvTLSv1];
|
||
|
||
HTTP_ := TIdHTTP.Create(nil);
|
||
HTTP_.IOHandler := SSL_;
|
||
with HTTP_ do
|
||
begin
|
||
Request.Clear;
|
||
Request.UserAgent := 'Mozilla/5.0';
|
||
Request.ContentType := 'application/json; charset=utf-8'; //'application/xml';
|
||
Request.Accept := 'application/json; charset=utf-8';
|
||
Request.Charset := 'utf-8';
|
||
// Request.Connection := 'Keep-Alive';
|
||
// Request.CustomHeaders.Values['Keep-Alive'] := 'timeout=300, max=100';
|
||
Request.Connection := 'close';
|
||
HTTPOptions := HTTPOptions - [hoKeepOrigProtocol];
|
||
Request.CacheControl := 'no-store';
|
||
ConnectTimeout := 2000;
|
||
ReadTimeout := 2000;
|
||
|
||
|
||
// HandleRedirects := true;
|
||
// Request.Clear;
|
||
// Request.UserAgent := 'Mozilla/5.0';
|
||
// Request.ContentType := 'application/xml';
|
||
//// Request.Accept := 'application/json; charset=utf-8';
|
||
//// Request.Charset := 'utf-8';
|
||
// Request.AcceptCharSet := 'UTF-8'; //'application/json; charset=utf-8';
|
||
//// Request.CacheControl := 'no-store';
|
||
// Request.Connection := 'Keep-Alive';
|
||
// HTTPOptions := HTTP_.HTTPOptions + [hoForceEncodeParams];
|
||
// ConnectTimeout := 2000;
|
||
// ReadTimeout := 2000;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.acHelpExecute(Sender: TObject);
|
||
var
|
||
dlg: TDlgHelp;
|
||
begin
|
||
if FindWindow('TDlgHelp', nil) <> 0 then
|
||
exit;
|
||
|
||
dlg := TDlgHelp.Create(Self);
|
||
dlg.Show;
|
||
end;
|
||
|
||
function TDlgeCrmHeMain.CtrlTagToImage(aSender: TObject): TImage;
|
||
begin
|
||
Result := nil;
|
||
if aSender is TControl then
|
||
begin
|
||
case TControl(aSender).Tag of
|
||
0 : Result := imgOsInfo;
|
||
2 : Result := imgSetOs;
|
||
5 : Result := imgSetAntiVirus;
|
||
7 : Result := imgSetAccPass;
|
||
9 : Result := imgSetScreenSaver;
|
||
11 : Result := imgSetFW;
|
||
else exit;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.VisibleMainform(bVal: Boolean; bForce: Boolean = false);
|
||
var
|
||
OldFormStyle: TFormStyle;
|
||
begin
|
||
if bVal then
|
||
begin
|
||
if not bForce and (MgSvc_ <> nil) and MgSvc_.PrefModel.HideMainUI then
|
||
exit;
|
||
|
||
// 보안모드가 아닐때 취약점 알림 끔 25_0403 11:09:36 kku
|
||
// if not Visible and
|
||
// (MgSvc_ <> nil) and
|
||
// not MgSvc_.IsServiceAvailable and
|
||
// not MgSvc_.VulService.IsVpnOn then
|
||
// MgSvc_.VulService.CallPopup(true, false);
|
||
|
||
TTgTrace.T('메인 화면 확인 - ON', 3);
|
||
|
||
WindowState := LastWS_;
|
||
Show;
|
||
OldFormStyle := FormStyle;
|
||
FormStyle := fsStayOnTop;
|
||
FormStyle := OldFormStyle;
|
||
SetForegroundWindow(Handle);
|
||
RefreshView;
|
||
end else begin
|
||
LastWS_ := WindowState;
|
||
WindowState := wsMinimized;
|
||
Hide;
|
||
|
||
TTgTrace.T('메인 화면 확인 - OFF', 3);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.SetStateImage(nIdx: Integer);
|
||
|
||
function SetAppIcon(sId: String): Boolean;
|
||
var
|
||
res: TResourceStream;
|
||
ms: TMemoryStream;
|
||
begin
|
||
Result := false;
|
||
|
||
try
|
||
res := TResourceStream.Create(HInstance, sId, 'raw');
|
||
if res <> nil then
|
||
begin
|
||
Guard(ms, TMemoryStream.Create);
|
||
res.SaveToStream(ms);
|
||
res.Free;
|
||
ms.Position := 0;
|
||
Application.Icon.LoadFromStream(ms);
|
||
Result := true;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(E, Format('Fail .. SetAppIcon(), ID="%s"', [sId]));
|
||
end;
|
||
end;
|
||
|
||
var
|
||
bLoadAppIcon: Boolean;
|
||
nIdx2: Integer;
|
||
begin
|
||
try
|
||
if (MgSvc_ <> nil) and MgSvc_.IsSearchingPersonalInfo then
|
||
begin
|
||
if not MgSvc_.IsNewApi or
|
||
( (MgSvc_.ProcCampn <> nil) and
|
||
(MgSvc_.ProcCampn.Info.bShowScan) ) then
|
||
begin
|
||
nIdx := 3;
|
||
if not tCttSchTimer.Enabled then
|
||
begin
|
||
lbCttSchSP.Caption := '....';
|
||
lbCttSchSP.Visible := true;
|
||
try
|
||
if MgSvc_.ThdScanSch.SchTitle <> '' then
|
||
begin
|
||
lbSchTitle.Caption := MgSvc_.ThdScanSch.SchTitle;
|
||
lbSchTitle.Visible := true;
|
||
end;
|
||
except
|
||
// ..
|
||
end;
|
||
tCttSchTimer.Enabled := true;
|
||
end;
|
||
end else
|
||
if not tCttSchTimer.Enabled then
|
||
tCttSchTimer.Enabled := true;
|
||
end;
|
||
|
||
// BSOne, eCrm 혼용 사용
|
||
// todo : BSOne로 통일 시 삭제 23_0207 09:35:24 kku
|
||
nIdx2 := nIdx;
|
||
if IsBS1Display then
|
||
begin
|
||
case nIdx of
|
||
0 : nIdx2 := 11;
|
||
1 : nIdx2 := 12;
|
||
2 : nIdx2 := 13;
|
||
3 : nIdx2 := 14;
|
||
end;
|
||
end;
|
||
|
||
// [2022-06-27 13:42:50] TDlgeCrmHeMain :: ETgException .. EInvalidPointer, Msg="Invalid pointer operation" : Info = Fail .. SetStateImage()
|
||
// 원인모를 오류 발생
|
||
if imgMainList = nil then
|
||
TTgTrace.T('SetStateImage() .. imgMainList = nil')
|
||
else if imgMainList.Items.Count <= nIdx2 then
|
||
TTgTrace.T('SetStateImage() .. imgMainList.Items.Count <= nIdx (%d)', [nIdx2])
|
||
else if imgMainList.Items[nIdx2].PngImage = nil then
|
||
TTgTrace.T('SetStateImage() .. imgMainList.Items[nIdx].PngImage = nil')
|
||
else
|
||
imgMain.Picture.Assign(imgMainList.Items[nIdx2].PngImage); // good
|
||
|
||
if TrayIcon_ <> nil then
|
||
begin
|
||
case nIdx of
|
||
15 : TrayIcon_.IconIndex := 4;
|
||
16 : TrayIcon_.IconIndex := 5;
|
||
else TrayIcon_.IconIndex := nIdx;
|
||
end;
|
||
end;
|
||
|
||
bLoadAppIcon := false;
|
||
case nIdx2 of // todo : BSOne로 통일 시 삭제 23_0207 09:35:24 kku
|
||
0, 11 : bLoadAppIcon := SetAppIcon('RS_SLEEPICON');
|
||
1, 12 : bLoadAppIcon := SetAppIcon('RS_SECUREICON');
|
||
2, 13 : bLoadAppIcon := SetAppIcon('RS_WARNINGICON');
|
||
3, 14 : bLoadAppIcon := SetAppIcon('RS_MONITORICON');
|
||
15 : bLoadAppIcon := SetAppIcon('RS_OFFLINEICON');
|
||
16 : bLoadAppIcon := SetAppIcon('RS_OFFLINEEXPICON');
|
||
end;
|
||
if not bLoadAppIcon then
|
||
imgTrayState.GetIcon(nIdx, Application.Icon);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. SetStateImage()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.UpdateCttSchRstButton;
|
||
begin
|
||
if GetPersonalInfoResults > 0 then
|
||
begin
|
||
lbCttSchRst.Font.Color := $00DB6646;
|
||
lbCttSchRst.Enabled := true;
|
||
imgCttSchRst.Picture.Assign(imgMainList.Items[4].PngImage);
|
||
imgCttSchRst.Enabled := true;
|
||
end else begin
|
||
lbCttSchRst.Font.Color := clGray;
|
||
lbCttSchRst.Enabled := false;
|
||
imgCttSchRst.Picture.Assign(imgMainList.Items[6].PngImage);
|
||
imgCttSchRst.Enabled := false;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.SetExtendMainView(bVal: Boolean);
|
||
begin
|
||
if (MgSvc_ <> nil) and MgSvc_.IsNewApi then
|
||
bVal := false;
|
||
|
||
if bUsePersonalFun_ = bVal then
|
||
exit;
|
||
bUsePersonalFun_ := bVal;
|
||
|
||
if bVal then
|
||
begin
|
||
imgBack.Picture.Assign(imgMainList.Items[8].PngImage);
|
||
imgList.Picture.Assign(imgMainList.Items[10].PngImage);
|
||
imgCttSch.Visible := true;
|
||
imgCttSchRst.Visible := true;
|
||
lbCttSch.Visible := true;
|
||
lbCttSchRst.Visible := true;
|
||
imgCttSch.Picture.Assign(imgMainList.Items[4].PngImage);
|
||
UpdateCttSchRstButton;
|
||
|
||
imgOsInfo.Top := 388;
|
||
lbOsVerTop.Top := 404;
|
||
imgOsVerState.Top := 446;
|
||
lbOS.Top := 508; // 523;
|
||
|
||
imgSetOs.Top := 388;
|
||
lbOsPatch.Top := 404;
|
||
imgOsPatchState.Top := 446;
|
||
lbOsPatchState.Top := 523;
|
||
imgOsPchInfo.Top := 489;
|
||
|
||
imgSetAntiVirus.Top := 388;
|
||
lbAntiV.Top := 404;
|
||
imgAvState.Top := 446;
|
||
lbAV.Top := 523;
|
||
imgAvInfo.Top := 489;
|
||
|
||
imgSetAccPass.Top := 576;
|
||
lbPW.Top := 595;
|
||
imgPassState.Top := 637;
|
||
lbPassState.Top := 714;
|
||
imgPwDateInfo.Top := 683;
|
||
|
||
imgSetScreenSaver.Top := 576;
|
||
lbScrSav.Top := 595;
|
||
imgScrSavState.Top := 637;
|
||
lbScrSavState.Top := 714;
|
||
|
||
imgSetFW.Top := 576;
|
||
lbFireW.Top := 595;
|
||
imgFwState.Top := 637;
|
||
lbFW.Top := 714;
|
||
imgFwInfo.Top := 683;
|
||
|
||
lbVer.Top := 765;
|
||
pnMain.Height := 800;
|
||
pnPolicyView.Height := 696;
|
||
pnList.Height := 800;
|
||
|
||
Height := 800;
|
||
end else begin
|
||
imgBack.Picture.Assign(imgMainList.Items[7].PngImage);
|
||
imgList.Picture.Assign(imgMainList.Items[9].PngImage);
|
||
|
||
imgCttSch.Visible := false;
|
||
imgCttSchRst.Visible := false;
|
||
lbCttSch.Visible := false;
|
||
lbCttSchRst.Visible := false;
|
||
|
||
imgOsInfo.Top := 328;
|
||
lbOsVerTop.Top := 344;
|
||
imgOsVerState.Top := 386;
|
||
lbOS.Top := 448; // 463;
|
||
|
||
imgSetOs.Top := 328;
|
||
lbOsPatch.Top := 344;
|
||
imgOsPatchState.Top := 386;
|
||
lbOsPatchState.Top := 463;
|
||
imgOsPchInfo.Top := 429;
|
||
|
||
imgSetAntiVirus.Top := 328;
|
||
lbAntiV.Top := 344;
|
||
imgAvState.Top := 386;
|
||
lbAV.Top := 463;
|
||
imgAvInfo.Top := 429;
|
||
|
||
imgSetAccPass.Top := 516;
|
||
lbPW.Top := 535;
|
||
imgPassState.Top := 577;
|
||
lbPassState.Top := 654;
|
||
imgPwDateInfo.Top := 623;
|
||
|
||
imgSetScreenSaver.Top := 516;
|
||
lbScrSav.Top := 535;
|
||
imgScrSavState.Top := 577;
|
||
lbScrSavState.Top := 654;
|
||
|
||
imgSetFW.Top := 516;
|
||
lbFireW.Top := 535;
|
||
imgFwState.Top := 577;
|
||
lbFW.Top := 654;
|
||
imgFwInfo.Top := 623;
|
||
|
||
lbVer.Top := 705;
|
||
pnMain.Height := 740;
|
||
pnPolicyView.Height := 637;
|
||
pnList.Height := 740;
|
||
|
||
Height := 740;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.UpdateScreenLogo(bForceUpdate: Boolean = false);
|
||
var
|
||
ms: TMemoryStream;
|
||
sTemp, sTemp2, sTemp3,
|
||
sWindowsAccount: String;
|
||
O: ISuperObject;
|
||
nUpdateMSec, n, nAlpha: Integer;
|
||
F: TFont;
|
||
PO: TPrefModel;
|
||
sOutCode: AnsiString;
|
||
|
||
procedure SetScreenData;
|
||
begin
|
||
try
|
||
// 커스텀 로고 처리 추가 23_0524 09:12:02 kku
|
||
|
||
sTemp := StringReplace(O.S['TxStr'], '§', ' ', [rfReplaceAll]);
|
||
sTemp := StringReplace(sTemp, '|*|', #13#10, [rfReplaceAll]);
|
||
// 예약어 치환 처리
|
||
if sTemp.Contains('{IpAddr}') then
|
||
sTemp := StringReplace(sTemp, '{IpAddr}', MgSvc_.NicService.GetIP, [rfReplaceAll]);
|
||
if sTemp.Contains('{HostName}') then
|
||
sTemp := StringReplace(sTemp, '{HostName}', MgSvc_.Domain, [rfReplaceAll]);
|
||
if sTemp.Contains('{MacAddr}') then
|
||
sTemp := StringReplace(sTemp, '{MacAddr}', MgSvc_.NicService.GetMAC, [rfReplaceAll]);
|
||
if sTemp.Contains('{EmpNo}') then
|
||
sTemp := StringReplace(sTemp, '{EmpNo}', MgSvc_.EmpNo, [rfReplaceAll]);
|
||
if sTemp.Contains('{Dept}') then
|
||
sTemp := StringReplace(sTemp, '{Dept}', MgSvc_.DeptName, [rfReplaceAll]);
|
||
if sTemp.Contains('{UserName}') then
|
||
sTemp := StringReplace(sTemp, '{UserName}', MgSvc_.UName, [rfReplaceAll]);
|
||
|
||
if O.O['TxFont'] <> nil then
|
||
begin
|
||
try
|
||
F.Name := O.O['TxFont'].S['Name'];
|
||
F.Size := O.O['TxFont'].I['Size'];
|
||
F.Color := O.O['TxFont'].I['Color'];
|
||
F.Style := TTgRtti.Int64ToSetType<TFontStyles>(O.O['TxFont'].I['Style']);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. UpdateScreenLogo() .. LoadFont');
|
||
end;
|
||
end;
|
||
|
||
DispLogos_.SetText(sTemp, F, O.I['TxHPos'], O.I['TxVPos'], O.I['TxOri'], O.I['TxOriT'],
|
||
TColor(O.I['TxCol']), TColor(O.I['TxColB']), O.S['TxDtFmt'], nUpdateMSec);
|
||
|
||
if O.S['ImData'] <> '' then
|
||
begin
|
||
try
|
||
Guard(ms, TMemoryStream.Create);
|
||
var pBuf: TBytes := DecodeBase64(O.S['ImData']);
|
||
ms.Write(pBuf[0], Length(pBuf));
|
||
ms.Position := 0;
|
||
DispLogos_.SetImageFromStream(ms, O.I['ImHPos'], O.I['ImVPos']);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. UpdateScreenLogo() .. SetImageFromStream()');
|
||
end;
|
||
end;
|
||
nAlpha := O.I['Alpha'];
|
||
DispLogos_.SetTaskbarDetect(O.B['TBar']);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. SetScreenData()');
|
||
end;
|
||
end;
|
||
|
||
Label
|
||
LB_ProcDef;
|
||
begin
|
||
sOutCode := '';
|
||
try
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
|
||
if MgSvc_.IsScreenLogo then
|
||
begin
|
||
PO := MgSvc_.ModePolicy;
|
||
if not bForceUpdate and (DispLogos_.Count = Screen.MonitorCount) then // 모니터 추가 연결도 체크 22_0609 09:23:36 kku
|
||
begin
|
||
exit
|
||
end else begin
|
||
DispLogos_.Clear;
|
||
DispLogosST_.Clear;
|
||
end;
|
||
|
||
sWindowsAccount := MgSvc_.VulService.WindowsAccount;
|
||
if sWindowsAccount = '' then // 아직 준비가 되지 않음
|
||
exit;
|
||
|
||
nUpdateMSec := PO.ScreenLogoUpdateMin * 60000;
|
||
if nUpdateMSec = 0 then
|
||
tSnapTag.Enabled := false;
|
||
|
||
nAlpha := 25; // 기본 투명도
|
||
|
||
if PO.ScreenLogoVisible then
|
||
begin
|
||
O := nil;
|
||
DispLogos_.CreateLogos;
|
||
// DispLogosST_.CreateLogos;
|
||
sTemp := PO.ScreenLogoData;
|
||
if sTemp <> '' then
|
||
begin
|
||
try
|
||
O := SO(DecryptStr(sTemp));
|
||
except
|
||
// ..
|
||
end;
|
||
end;
|
||
|
||
Guard(F, TFont.Create);
|
||
// F.Assign(pnMain.Font);
|
||
F.Name := 'Tahoma';
|
||
if O = nil then
|
||
begin
|
||
ms := nil;
|
||
try
|
||
case CUSTOMER_TYPE of
|
||
CUSTOMER_NHL :
|
||
begin
|
||
F.Size := 23;
|
||
F.Style := F.Style + [fsBold];
|
||
|
||
DispLogos_.SetText(#13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10#13#10 +
|
||
' ' +
|
||
sWindowsAccount + #13#10 +
|
||
' ' +
|
||
'{DateTime}' + //DateTimeToStr(Now) +
|
||
#13#10#13#10#13#10 +
|
||
' ' +
|
||
RS_MsgLogoWarningNHL, F, 3, 3, 0, 0, clBlack, clLime, '', nUpdateMSec);
|
||
end;
|
||
CUSTOMER_JB_DEV,
|
||
CUSTOMER_JB_MAINTAIN :
|
||
begin
|
||
F.Size := 75;
|
||
DispLogos_.SetText(sWindowsAccount + #13#10 + '{DateTime}', //DateTimeToStr(Now),
|
||
F, 3, 3, 0, 0, clBlack, clLime, '', nUpdateMSec);
|
||
ms := GetLogoImg('RS_LOGO_JB');
|
||
if ms <> nil then
|
||
DispLogos_.SetImageFromStream(ms, 3, 1, 200);
|
||
end;
|
||
CUSTOMER_KFTC :
|
||
begin
|
||
F.Size := 28;
|
||
DispLogos_.SetText(#13#10#13#10#13#10#13#10 +
|
||
sWindowsAccount +
|
||
' ' + #13#10 +
|
||
'{DateTime}' + //DateTimeToStr(Now) +
|
||
' ',
|
||
F, 2, 1, 0, 0, clBlack, clLime, '', nUpdateMSec);
|
||
ms := GetLogoImg('RS_LOGO_KFTC');
|
||
if ms <> nil then
|
||
DispLogos_.SetImageFromStream(ms, 3, 3);
|
||
end;
|
||
CUSTOMER_KR :
|
||
begin
|
||
F.Size := 26;
|
||
DispLogos_.SetText(#13#10#13#10 +
|
||
// '코리안리재보험 재택근무' +
|
||
MgSvc_.AgentModel.Account + ' (' + MgSvc_.NicService.GetIP + ')' +
|
||
' ' + #13#10 +
|
||
'{DateTime}' + //DateTimeToStr(Now) +
|
||
' ',
|
||
F, 2, 1, 0, 0, clBlack, clLime, '', nUpdateMSec);
|
||
ms := GetLogoImg('RS_LOGO_KR');
|
||
if ms <> nil then
|
||
DispLogos_.SetImageFromStream(ms, 3, 3);
|
||
|
||
nAlpha := 15;
|
||
end;
|
||
CUSTOMER_LX :
|
||
begin
|
||
F.Size := 28;
|
||
DispLogos_.SetText(#13#10#13#10#13#10#13#10 +
|
||
RS_MsgLogoLX +
|
||
' ',
|
||
// +
|
||
// #13#10 +
|
||
// DateTimeToStr(Now) +
|
||
// ' ',
|
||
F, 2, 1, 0, 0, clBlack, clLime, '', nUpdateMSec);
|
||
ms := GetLogoImg('RS_LOGO_LX');
|
||
if ms <> nil then
|
||
DispLogos_.SetImageFromStream(ms, 3, 3);
|
||
end;
|
||
CUSTOMER_VOLVO :
|
||
begin
|
||
F.Size := 28;
|
||
DispLogos_.SetText(#13#10#13#10#13#10#13#10 +
|
||
RS_MsgLogoVolvo +
|
||
' ' + #13#10 +
|
||
'{DateTime}' +// DateTimeToStr(Now) +
|
||
' ',
|
||
F, 2, 1, 0, 0, clBlack, clLime, '', nUpdateMSec);
|
||
ms := GetLogoImg('RS_LOGO_VOLVO');
|
||
if ms <> nil then
|
||
DispLogos_.SetImageFromStream(ms, 3, 3);
|
||
|
||
nAlpha := 15;
|
||
end;
|
||
CUSTOMER_ABL :
|
||
begin
|
||
F.Size := 16;
|
||
F.Style := F.Style + [fsBold];
|
||
// sTemp := ExtractFilePath(sWindowsAccount) + MgSvc_.EmpNo;
|
||
sTemp := 'ABL생명 ' + MgSvc_.EmpNo;
|
||
// var sTemp2: String := '';
|
||
// var sTemp3: String := '';
|
||
var i, nRepeat: Integer;
|
||
|
||
if Screen.Width > 1920 then
|
||
nRepeat := 12
|
||
else
|
||
nRepeat := 6;
|
||
|
||
for i := 0 to nRepeat do
|
||
SumString(sTemp2, sTemp, ' ');
|
||
|
||
sTemp := ' ' + '{DateTime}'; // DateTimeToStr(Now);
|
||
for i := 0 to nRepeat do
|
||
SumString(sTemp3, sTemp, ' ');
|
||
sTemp := sTemp2 + #13#10 + sTemp3;
|
||
sTemp2 := '';
|
||
|
||
if Screen.Height > 1080 then
|
||
nRepeat := 22
|
||
else
|
||
nRepeat := 11;
|
||
|
||
for i := 0 to nRepeat do
|
||
SumString(sTemp2, sTemp, #13#10#13#10#13#10#13#10);
|
||
|
||
DispLogos_.SetText(sTemp2, F, 3, 3, 180, (Screen.Height - (Screen.Height div 3)) * -1, clBlack, clLime, '', nUpdateMSec);
|
||
|
||
nAlpha := 17;
|
||
end;
|
||
CUSTOMER_WELFND,
|
||
CUSTOMER_WELFNI :
|
||
begin
|
||
F.Size := 22;
|
||
|
||
sTemp := '';
|
||
SumString(sTemp, '{DateTime}' {DateTimeToStr(Now)}, ' ');
|
||
SumString(sTemp, MgSvc_.EmpNo, ' ');
|
||
if MgSvc_.UName <> '' then
|
||
SumString(sTemp, MgSvc_.UName, ' ');
|
||
|
||
DispLogos_.SetTaskbarDetect(true);
|
||
// 46도 회전
|
||
DispLogos_.SetTextWEL(sTemp, 3, F, 3, 3, 460, clBlack, clSilver, 'yyyy-mm-dd hh:nn:ss', nUpdateMSec);
|
||
|
||
nAlpha := 20; // 투명도 통일 24_0902 15:17:04 kku
|
||
end;
|
||
CUSTOMER_DEMO,
|
||
CUSTOMER_DEV,
|
||
CUSTOMER_LOCAL,
|
||
CUSTOMER_SHCI,
|
||
CUSTOMER_SOSLAB,
|
||
CUSTOMER_WINSTN,
|
||
CUSTOMER_GEC,
|
||
CUSTOMER_HDENG :
|
||
begin
|
||
F.Size := 10;
|
||
var i, nRepeat: Integer;
|
||
|
||
sTemp := '';
|
||
// 부서 표시
|
||
// sTemp := MgSvc_.DeptName;
|
||
// if sTemp <> '' then
|
||
// sTemp := ExtrLastDelimiterStr(sTemp, ';');
|
||
// if MgSvc_.UName <> '' then
|
||
// SumString(sTemp, MgSvc_.UName, ' / ');
|
||
SumString(sTemp, MgSvc_.EmpNo, ' / ');
|
||
SumString(sTemp, MgSvc_.NicService.GetIP, ' / ');
|
||
SumString(sTemp, '{DateTime}' {DateTimeToStr(Now)}, ' / ');
|
||
|
||
DispLogos_.SetTaskbarDetect(true);
|
||
DispLogos_.SetTextHEC(sTemp, 3, F, 3, 3, 250, clBlack, clSilver, 'yyyy-mm-dd', nUpdateMSec);
|
||
|
||
nAlpha := 20; // 투명도 통일 24_0902 15:17:04 kku
|
||
end;
|
||
CUSTOMER_SOLMIX :
|
||
begin
|
||
F.Size := 10;
|
||
var i, nRepeat: Integer;
|
||
|
||
sTemp := '';
|
||
SumString(sTemp, MgSvc_.EmpNo, ' / ');
|
||
SumString(sTemp, FormatDateTime('yyyy-mm-dd', Now), ' / ');
|
||
SumString(sTemp, FormatDateTime('hh:nn:ss', Now), ' / ');
|
||
|
||
DispLogos_.SetTaskbarDetect(true);
|
||
DispLogos_.SetTextHEC(sTemp, 3, F, 3, 3, 250, clBlack, clSilver, 'yyyy-mm-dd', nUpdateMSec);
|
||
|
||
nAlpha := 20; // 투명도 통일 24_0902 15:17:04 kku
|
||
end;
|
||
CUSTOMER_BLUECORNER :
|
||
begin
|
||
F.Size := 10;
|
||
var i, nRepeat: Integer;
|
||
|
||
sTemp := '';
|
||
SumString(sTemp, '{DateTime}', ' . ');
|
||
SumString(sTemp, MgSvc_.EmpNo, ' . ');
|
||
if MgSvc_.UName <> '' then
|
||
SumString(sTemp, MgSvc_.UName, ' . ');
|
||
|
||
DispLogos_.SetTaskbarDetect(true);
|
||
DispLogos_.SetTextHEC(sTemp, 3, F, 3, 3, 250, clBlack, clSilver, 'yyyy.mm.dd', nUpdateMSec);
|
||
|
||
nAlpha := 20; // 투명도 통일 24_0902 15:17:04 kku
|
||
end;
|
||
else
|
||
begin
|
||
LB_ProcDef :
|
||
F.Size := 75;
|
||
DispLogos_.SetText(sWindowsAccount + #13#10 + '{DateTime}', // DateTimeToStr(Now),
|
||
F, 3, 3, 0, 0, clBlack, clLime, '', nUpdateMSec);
|
||
end;
|
||
end;
|
||
finally
|
||
if ms <> nil then
|
||
FreeAndNil(ms);
|
||
end;
|
||
|
||
case CUSTOMER_TYPE of
|
||
CUSTOMER_WELFND,
|
||
CUSTOMER_WELFNI :
|
||
begin
|
||
var sImgPath: String := GetRunExePathDir + DIR_CONF + 'CI1000.bmp';
|
||
if FileExists(sImgPath) then
|
||
DispLogos_.SetImage(sImgPath, 3, 3);
|
||
end;
|
||
CUSTOMER_BLUECORNER,
|
||
CUSTOMER_DEMO :
|
||
begin
|
||
var sImgPath: String := GetRunExePathDir + DIR_CONF + 'CI.png';
|
||
if FileExists(sImgPath) then
|
||
DispLogos_.SetImage(sImgPath, 3, 3);
|
||
end;
|
||
end;
|
||
end else
|
||
SetScreenData;
|
||
end;
|
||
|
||
if IsUseSnaptag and PO.ScreenLogoInvisible then
|
||
begin
|
||
DispLogosST_.CreateLogos;
|
||
// 스냅태그 연동
|
||
sTemp := GetRunExePathDir + DIR_CONF + DLL_ST;
|
||
if FileExists(sTemp) then
|
||
begin
|
||
var bSuccess: Boolean := false;
|
||
try
|
||
sTemp2 := GetRunExePathDir + DIR_CONF + DAT_SNAPTAGKEY_S;
|
||
if not FileExists(sTemp2) then
|
||
begin
|
||
var StrList: TStringList;
|
||
Guard(StrList, TStringList.Create);
|
||
StrList.Text := ST_Key_S;
|
||
StrList.SaveToFile(sTemp2, TEncoding.ANSI);
|
||
end;
|
||
|
||
sTemp3 := GetRunExePathDir + DIR_CONF + PNG_SNAPTAGDATA_LOGO;
|
||
n := labGuardPS(sTemp2, sTemp3, 2, 3, 1 {유저코드?},
|
||
FormatDateTime('yyyy/mm/dd hh:nn', Now), sOutCode);
|
||
if n = 0 then
|
||
begin
|
||
DispLogosST_.SetImage(sTemp3, -99, -99);
|
||
bSuccess := true;
|
||
|
||
if PO.ScreenLogoAlpha <> 0 then
|
||
nAlpha := PO.ScreenLogoAlpha;
|
||
DispLogosST_.SetAlpha(nAlpha);
|
||
|
||
if (nUpdateMSec > 0) and not tSnapTag.Enabled then
|
||
begin
|
||
tSnapTag.Interval := nUpdateMSec;
|
||
tSnapTag.Enabled := true;
|
||
end;
|
||
end else
|
||
TTgTrace.T('Fail .. Snaptag .. code = %d', [n], 1);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. UpdateScreenLogo() .. HCA-ST');
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
if (DispLogos_.Count + DispLogosST_.Count) > 0 then
|
||
begin
|
||
if PO.ScreenLogoAlpha <> 0 then
|
||
nAlpha := PO.ScreenLogoAlpha;
|
||
|
||
if MgSvc_.IsScreenLogoBold then
|
||
begin
|
||
Inc(nAlpha, 40);
|
||
if nAlpha < 100 then
|
||
nAlpha := 100;
|
||
end;
|
||
|
||
if nAlpha > 255 then
|
||
nAlpha := 255;
|
||
|
||
if DispLogos_.Count > 0 then
|
||
DispLogos_.SetAlpha(nAlpha);
|
||
// if DispLogosST_.Count > 0 then
|
||
// DispLogosST_.SetAlpha(nAlpha);
|
||
|
||
if sOutCode <> '' then
|
||
begin
|
||
TTgTrace.T('상시 로고 - ON, ST=%s', [sOutCode], 1);
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, PREVENT_SCREENLOGO, Format('ST=%s, ScreenLogo ON', [sOutCode]));
|
||
end else begin
|
||
TTgTrace.T('상시 로고 - ON', 1);
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, PREVENT_SCREENLOGO, 'ScreenLogo ON');
|
||
end;
|
||
end;
|
||
|
||
// if MtxScrLogo_ = nil then
|
||
// MtxScrLogo_ := TTgMutex.Create(MUTEX_SCREENLOGO);
|
||
|
||
// DispLogos_.SetTaskbarDetect(true);
|
||
end else
|
||
if DispLogos_.Count > 0 then
|
||
begin
|
||
// if MtxScrLogo_ <> nil then
|
||
// FreeAndNil(MtxScrLogo_);
|
||
DispLogos_.Clear;
|
||
|
||
if DispLogosST_.Count > 0 then
|
||
DispLogosST_.Clear;
|
||
|
||
TTgTrace.T('상시 로고 - OFF', 1);
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, PREVENT_SCREENLOGO, 'ScreenLogo OFF');
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
begin
|
||
DispLogos_.Clear;
|
||
ETgException.TraceException(Self, E, 'Fail .. UpdateScreenLogo()');
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.RefreshView;
|
||
|
||
procedure SetState(aLabel: TLabel; aImg: TImage; bVal: Boolean; sInfo: String = '');
|
||
begin
|
||
if bVal then
|
||
begin
|
||
if sInfo <> '' then
|
||
aLabel.Caption := sInfo
|
||
else
|
||
aLabel.Caption := RS_StateNormal;
|
||
aLabel.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, aImg, aImg.Tag);
|
||
end else begin
|
||
if sInfo <> '' then
|
||
aLabel.Caption := sInfo
|
||
else
|
||
aLabel.Caption := RS_StateVul;
|
||
aLabel.Font.Color := clRed;
|
||
SetImgBtn(imgStateList, aImg, aImg.Tag + 1);
|
||
end;
|
||
end;
|
||
|
||
var
|
||
sVer, sTemp: String;
|
||
PrefModel: TPrefModel;
|
||
begin
|
||
try
|
||
if Application.Terminated then
|
||
exit;
|
||
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
|
||
if MgSvc_.VulService = nil then
|
||
exit;
|
||
|
||
PrefModel := MgSvc_.PrefModel;
|
||
|
||
TTgTrace.T('메인 화면 새로고침', 3);
|
||
|
||
with MgSvc_.VulService do
|
||
begin
|
||
// 상시로고 설정
|
||
UpdateScreenLogo;
|
||
|
||
case MgSvc_.HeModeKind of
|
||
hmkSleep :
|
||
begin
|
||
SetStateImage(0);
|
||
// if IsHD then
|
||
// lbMode.Caption := RS_HEC_SleepMode
|
||
// else
|
||
// lbMode.Caption := RS_SleepMode;
|
||
end;
|
||
hmkSecurity :
|
||
begin
|
||
SetStateImage(1);
|
||
// if IsHD then
|
||
// lbMode.Caption := RS_HEC_SecuMode
|
||
// else
|
||
// lbMode.Caption := RS_SecuMode;
|
||
end;
|
||
hmkVulnerability :
|
||
begin
|
||
SetStateImage(2);
|
||
// lbMode.Caption := RS_VulMode;
|
||
end;
|
||
hmkOffline :
|
||
begin
|
||
SetStateImage(15);
|
||
// lbMode.Caption := RS_OFFLINE;
|
||
end;
|
||
hmkException :
|
||
begin
|
||
SetStateImage(16);
|
||
// lbMode.Caption := RS_OFFLINEEXP;
|
||
end;
|
||
end;
|
||
|
||
lbMode.Caption := MgSvc_.
|
||
ModeName;
|
||
|
||
if not tTempConn.Enabled and
|
||
(MgSvc_.IsTemporaryConn or MgSvc_.IsOfflineExp) then
|
||
begin
|
||
lbConn.Font.Color := clYellow;
|
||
tTempConn.Enabled := true;
|
||
end;
|
||
|
||
imgOsPchInfo.Visible := (GetOsPatchCheckTerm > 0) and (PrefModel.OsPatchCheck <> opcNone);
|
||
imgChangeEmpNo.Visible := (IsChangeAbleEmpNo and PrefModel.IsEmpVerify) or
|
||
( (CUSTOMER_TYPE = CUSTOMER_GIORDANO) and not IsJoinAD );
|
||
lbChangeEmpNo.Visible := imgChangeEmpNo.Visible;
|
||
if imgExpend.Visible <> PrefModel.IsShowPolicy then
|
||
begin
|
||
imgExpend.Visible := PrefModel.IsShowPolicy;
|
||
if bWndExpend_ and not PrefModel.IsShowPolicy then
|
||
begin
|
||
if Visible then
|
||
begin
|
||
WndAni_.AnimateWidth(Width - SIZE_EXTEND_FORM_W, nil, FinishWindowExpend);
|
||
end else begin
|
||
Width := SIZE_DEF_FORM_W;
|
||
bWndExpend_ := false;
|
||
VisibleMainform(true);
|
||
Sleep(100);
|
||
VisibleMainform(false);
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
if lbEmpNo.Visible <> PrefModel.IsShowAInfo then
|
||
begin
|
||
lbEmpNo.Visible := PrefModel.IsShowAInfo;
|
||
lbIpInfo.Visible := lbEmpNo.Visible;
|
||
lbWinAccount.Visible := lbEmpNo.Visible;
|
||
end;
|
||
|
||
if MgSvc_.AgentModel <> nil then
|
||
begin
|
||
sTemp := MgSvc_.AgentModel.EmpNo;
|
||
if sTemp = '' then
|
||
begin
|
||
sTemp := WindowsAccount;
|
||
lbEmpNo.Font.Style := lbEmpNo.Font.Style + [fsBold];
|
||
end else
|
||
lbEmpNo.Font.Style := lbEmpNo.Font.Style - [fsBold];
|
||
lbEmpNo.Caption := Format('%s (%s)', [sTemp,
|
||
BooleanToStr(MgSvc_.AgentModel.Location = '', 'Unknown', MgSvc_.AgentModel.Location)]);
|
||
end;
|
||
|
||
if not PrefModel.IsEnableCheck then
|
||
begin
|
||
lbOS.Caption := RS_CheckOff;
|
||
lbOS.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgOsVerState, 14);
|
||
|
||
lbOsPatchState.Caption := RS_CheckOff;
|
||
lbOsPatchState.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgOsPatchState, imgOsPatchState.Tag + 2);
|
||
|
||
lbAV.Caption := RS_CheckOff;
|
||
lbAV.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgAvState, 15);
|
||
|
||
lbPassState.Caption := RS_CheckOff;
|
||
lbPassState.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgPassState, 13);
|
||
|
||
lbScrSavState.Caption := RS_CheckOff;
|
||
lbScrSavState.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgScrSavState, 16);
|
||
|
||
lbFW.Caption := RS_CheckOff;
|
||
lbFW.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgFwState, 17);
|
||
end else begin
|
||
if PrefModel.VulOsVersion then
|
||
begin
|
||
if (MgSvc_.HandleConfig <> nil) and (MgSvc_.HandleConfig.OsMajorVer <> '') then
|
||
SetState(lbOS, imgOsVerState, IsOsSafe, Format('MS Windows %s' + #13#10 + '(%s)',
|
||
[OsVersion, MgSvc_.HandleConfig.OsMajorVer]))
|
||
else
|
||
SetState(lbOS, imgOsVerState, IsOsSafe, Format('MS Windows %s', [OsVersion]));
|
||
end else begin
|
||
lbOS.Caption := RS_CheckOff;
|
||
lbOS.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgOsVerState, 14);
|
||
end;
|
||
|
||
if PrefModel.OsPatchCheck = opcNone then
|
||
begin
|
||
lbOsPatchState.Caption := RS_CheckOff;
|
||
lbOsPatchState.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgOsPatchState, imgOsPatchState.Tag + 2);
|
||
end else
|
||
SetState(lbOsPatchState, imgOsPatchState, IsOsPatchUptoDate);
|
||
|
||
if IsSkipPwd or not PrefModel.VulPassword then
|
||
begin
|
||
lbPassState.Caption := RS_CheckOff;
|
||
lbPassState.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgPassState, 13);
|
||
end else
|
||
SetState(lbPassState, imgPassState, IsPasswordSet and IsPasswordSetTermOk);
|
||
imgPwDateInfo.Visible := (PrefModel.PwChkTerm <> pctNone) and (PrefModel.PwChkTermDay > 0);
|
||
|
||
if IsSkipScreenSaver or not PrefModel.VulScreenSaver then
|
||
begin
|
||
lbScrSavState.Caption := RS_CheckOff;
|
||
lbScrSavState.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgScrSavState, 16);
|
||
end else
|
||
SetState(lbScrSavState, imgScrSavState, IsScreenSaverSet);
|
||
|
||
if not PrefModel.VulAntiVirus then
|
||
begin
|
||
lbAV.Caption := RS_CheckOff;
|
||
lbAV.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgAvState, 15);
|
||
end else
|
||
SetState(lbAV, imgAvState, IsAntiVirusUpToDate);
|
||
|
||
if not PrefModel.VulFirewall then
|
||
begin
|
||
lbFW.Caption := RS_CheckOff;
|
||
lbFW.Font.Color := $00635653;
|
||
SetImgBtn(imgStateList, imgFwState, 17);
|
||
end else
|
||
SetState(lbFW, imgFwState, IsFirewallOn);
|
||
end;
|
||
|
||
if CUSTOMER_TYPE = CUSTOMER_ABL then
|
||
begin
|
||
lbIpInfo.Caption := RS_MsgMain1_ABL;
|
||
lbWinAccount.Caption := RS_MsgMain2_ABL;
|
||
end else begin
|
||
if MgSvc_.NicService <> nil then
|
||
lbIpInfo.Caption := MgSvc_.NicService.GetIP
|
||
else
|
||
lbIpInfo.Caption := 'ip';
|
||
if MgSvc_.VulService <> nil then
|
||
lbWinAccount.Caption := MgSvc_.VulService.WindowsAccount
|
||
else
|
||
lbWinAccount.Caption := MgSvc_.Account;
|
||
end;
|
||
lbConn.Caption := AccessStatus;
|
||
if not MgSvc_.IsTemporaryConn and not MgSvc_.IsOfflineExp then
|
||
begin
|
||
if not IsAllowAccess then
|
||
begin
|
||
if (MgSvc_.IsServiceAvailable and (not (IsSafeMode and IsWhiteApp)or not IsOsPatchUptoDate)) or
|
||
(AvInfo = nil) or (AvInfo.Name = '') then
|
||
lbConn.Font.Color := clAqua // 취약상태에서 빨간글씨 안보여서 추가 22_0614 13:58:50 kku
|
||
else
|
||
lbConn.Font.Color := clRed;
|
||
end else
|
||
lbConn.Font.Color := clWhite;
|
||
end;
|
||
|
||
sVer := SdkVersion;
|
||
if MgSvc_.Connected then
|
||
begin
|
||
sVer := sVer + ' (Manage Mode)';
|
||
lbVer.Font.Color := clBlue;
|
||
end else
|
||
if MgSvc_.HeModeKind = hmkOffline then
|
||
begin
|
||
sVer := sVer + ' (Offline Mode)';
|
||
lbVer.Font.Color := clGray;
|
||
end else
|
||
begin
|
||
sVer := sVer + ' (Standalone Mode)';
|
||
lbVer.Font.Color := clGreen;
|
||
end;
|
||
lbVer.Caption := sVer + ' @Tocsg Provided' + BooleanToStr(MgSvc_.IsNewApi, ' N', '');
|
||
end;
|
||
|
||
if FrmPolicyView_ <> nil then
|
||
FrmPolicyView_.AddModePolicy(MgSvc_.ModePolicy, true);
|
||
|
||
SetExtendMainView(MgSvc_.IsSchRstVul);
|
||
|
||
// 폼이 쪼그라드는 경우가 있다? 재현이 안되서 보안코드 추가 22_0623 07:15:12 kku
|
||
if Width < SIZE_DEF_FORM_W then
|
||
begin
|
||
if bWndExpend_ then
|
||
Width := SIZE_DEF_FORM_W + SIZE_EXTEND_FORM_W
|
||
else
|
||
Width := SIZE_DEF_FORM_W;
|
||
end else
|
||
if (bWndExpend_ and (Width < (SIZE_DEF_FORM_W + SIZE_EXTEND_FORM_W))) or
|
||
(Width > (SIZE_DEF_FORM_W + SIZE_EXTEND_FORM_W)) then
|
||
Width := SIZE_DEF_FORM_W + SIZE_EXTEND_FORM_W;
|
||
|
||
// 세로 크기 보정 23_0313 17:20:19 kku
|
||
if bUsePersonalFun_ then
|
||
begin
|
||
if Height <> SIZE_UP_FORM_H then
|
||
Height := SIZE_UP_FORM_H;
|
||
end else
|
||
if Height <> SIZE_DEF_FORM_H then
|
||
Height := SIZE_DEF_FORM_H;
|
||
|
||
sTrayHint_ := Format('%s'+#13#10+'%s', [lbMode.Caption, sVer]);
|
||
if CUSTOMER_TYPE = CUSTOMER_LOTTEMART then
|
||
begin
|
||
if MgSvc_.NicService <> nil then
|
||
SumString(sTrayHint_, 'IP :' + MgSvc_.NicService.GetIP, #13#10)
|
||
else
|
||
SumString(sTrayHint_, 'IP :' + 'ip', #13#10);
|
||
SumString(sTrayHint_, RS_EmpNoC + MgSvc_.EmpNo, #13#10);
|
||
if MgSvc_.DeptName <> '' then
|
||
SumString(sTrayHint_, RS_DeptC + ExtrLastDelimiterStr(MgSvc_.DeptName, ';'), #13#10);
|
||
if MgSvc_.UName <> '' then
|
||
SumString(sTrayHint_, RS_NameC + MgSvc_.UName, #13#10);
|
||
end else begin
|
||
SumString(sTrayHint_, lbEmpNo.Caption, #13#10);
|
||
if MgSvc_ <> nil then
|
||
begin
|
||
if MgSvc_.UName <> '' then
|
||
SumString(sTrayHint_, MgSvc_.UName, ', ');
|
||
if MgSvc_.DeptName <> '' then
|
||
SumString(sTrayHint_, MgSvc_.DeptName, ', ');
|
||
end;
|
||
end;
|
||
UpdateLangRes;
|
||
|
||
Application.ProcessMessages;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. RefreshView()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.SetImgBtn(aImgList: TPngImageList; imgBtn: TImage; nImgIdx: Integer);
|
||
begin
|
||
try
|
||
aImgList.GetIcon(nImgIdx, imgBtn.Picture.Icon);
|
||
imgBtn.Repaint
|
||
except
|
||
// ..
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.FinishWindowExpend;
|
||
begin
|
||
bWndExpend_ := not bWndExpend_;
|
||
imgExpendMouseEnter(nil);
|
||
imgExpend.Enabled := true;
|
||
|
||
// 보험
|
||
if Width < SIZE_DEF_FORM_W then
|
||
Width := SIZE_DEF_FORM_W
|
||
else if Width > (SIZE_DEF_FORM_W + SIZE_EXTEND_FORM_W) then
|
||
Width := SIZE_DEF_FORM_W + SIZE_EXTEND_FORM_W;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgExpendClick(Sender: TObject);
|
||
begin
|
||
imgExpend.Enabled := false;
|
||
if not bWndExpend_ then
|
||
WndAni_.AnimateWidth(Width + SIZE_EXTEND_FORM_W, nil, FinishWindowExpend)
|
||
else
|
||
WndAni_.AnimateWidth(Width - SIZE_EXTEND_FORM_W, nil, FinishWindowExpend);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgExpendMouseDown(Sender: TObject;
|
||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||
begin
|
||
if not bWndExpend_ then
|
||
SetImgBtn(imgArrow, imgExpend, 2)
|
||
else
|
||
SetImgBtn(imgArrow, imgExpend, 5);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgExpendMouseEnter(Sender: TObject);
|
||
begin
|
||
if not bWndExpend_ then
|
||
SetImgBtn(imgArrow, imgExpend, 1)
|
||
else
|
||
SetImgBtn(imgArrow, imgExpend, 4);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgExpendMouseLeave(Sender: TObject);
|
||
begin
|
||
if not bWndExpend_ then
|
||
SetImgBtn(imgArrow, imgExpend, 0)
|
||
else
|
||
SetImgBtn(imgArrow, imgExpend, 3);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgExpendMouseUp(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
begin
|
||
if not bWndExpend_ then
|
||
SetImgBtn(imgArrow, imgExpend, 1)
|
||
else
|
||
SetImgBtn(imgArrow, imgExpend, 4);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.LockScreen;
|
||
begin
|
||
{$IFDEF DEBUG}
|
||
if DebugHook <> 0 then
|
||
exit;
|
||
{$ENDIF}
|
||
TDlgLockScreen.Create(Self, MgSvc_.PrefModel.ScreenLockPwd).DoLockScreen;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.ResetTrayIcon;
|
||
var
|
||
sPath: String;
|
||
nUpdate: Integer;
|
||
begin
|
||
TTgTrace.T('ResetTrayIcon()', 1);
|
||
if TrayIcon_ <> nil then
|
||
FreeAndNil(TrayIcon_);
|
||
|
||
if (CUSTOMER_TYPE = CUSTOMER_LOTTEMART) and (MgSvc_ <> nil) and MgSvc_.PrefModel.HideMainUI then
|
||
exit;
|
||
|
||
// imgTrayState.GetIcon(0, Icon_);
|
||
// if Icon_ <> nil then
|
||
// SendMessage(Handle, WM_SETICON, ICON_SMALL, NativeInt(Icon_.Handle));
|
||
|
||
TrayIcon_ := TTrayIcon.Create(Self);
|
||
TrayIcon_.BalloonFlags := bfInfo;
|
||
TrayIcon_.Hint := sTrayHint_;
|
||
TrayIcon_.PopupMenu := popTray;
|
||
TrayIcon_.Icons := imgTrayState;
|
||
TrayIcon_.IconIndex := 0;
|
||
imgTrayState.GetIcon(0, TrayIcon_.Icon);
|
||
TrayIcon_.OnDblClick := miAgentStateClick;
|
||
TrayIcon_.Visible := true;
|
||
|
||
if (MgSvc_ <> nil) and (MgSvc_.PrefModel <> nil) then
|
||
begin
|
||
// 음.. 여기에 놓는건 보기 않좋지만.. 트레이가 생성 후
|
||
// 메시지가 팝업되는게 좋기 때문에 여기서 체크한다. 22_0531 14:16:00 kku
|
||
// sPath := GetRunExePathDir + LOG_PATCH;
|
||
// if FileExists(sPath) then
|
||
nUpdate := GetRegValueAsInteger(HKEY_LOCAL_MACHINE, REG_HE, 'update');
|
||
if nUpdate <> 0 then
|
||
begin
|
||
// DeleteFile(sPath);
|
||
SetRegValueInteger(HKEY_LOCAL_MACHINE, REG_HE, 'update', 0, true);
|
||
case nUpdate of // 1 = update, 2 = install, 3 = update & LockScreen
|
||
1, 3 :
|
||
begin
|
||
case CUSTOMER_TYPE of
|
||
CUSTOMER_GEC,
|
||
CUSTOMER_HDENG,
|
||
CUSTOMER_KR, // KR은 업데이트 팝업 보이지 않도록 조치 22_0922 10:48:13 kku
|
||
CUSTOMER_SANKYO : ;
|
||
else begin
|
||
if MgSvc_.ModePolicy.IsNotiSystem then
|
||
MgSvc_.PopupMessage(TYPE_MSG_UPDATE);
|
||
end;
|
||
end;
|
||
|
||
MgSvc_.SendEventLog(URI_USERUPDATE, SYSEVT_AGENT_PATCH, 'Patch Completed : ' + SdkVersion);
|
||
|
||
// 패치 시 화면잠금 상태였다면 다시 화면 잠금 해줌 22_1018 13:53:19 kku
|
||
if (nUpdate = 3) and MgSvc_.PrefModel.IsStartupScreenLock then
|
||
LockScreen;
|
||
end;
|
||
2 :
|
||
begin
|
||
MgSvc_.SendEventLog(URI_USERUPDATE, SYSEVT_AGENT_INSTALL, 'Agent Installed : ' + SdkVersion);
|
||
end;
|
||
end;
|
||
end else
|
||
if MgSvc_.PrefModel.IsStartupScreenLock then
|
||
LockScreen;
|
||
end;
|
||
|
||
Application.ProcessMessages;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.tInitTimer(Sender: TObject);
|
||
var
|
||
ini: TIniFile;
|
||
sPath: String;
|
||
begin
|
||
tInit.Enabled := false;
|
||
|
||
try
|
||
try
|
||
sPath := GetRunExePathDir + INI_HE;
|
||
Guard(ini, TIniFile.Create(sPath));
|
||
ini.WriteString('Config', 'MW', IntToStr(Handle));
|
||
ini.WriteInt64('Config', 'CT', CUSTOMER_TYPE);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. tInitTimer() .. ProcIni');
|
||
end;
|
||
|
||
MgSvc_ := TManagerService.Create(Handle);
|
||
// if GetProcessPidByName(EXE_MG) <> 0 then
|
||
begin
|
||
// 앞서 실행되어 있으면 종료해준다. 22_0624 13:15:04 kku
|
||
TerminateProcessByName(EXE_MG);
|
||
// MgSvc_.ActiveThdreadProcess := true;
|
||
end;
|
||
SetExtendMainView(false);
|
||
// TTgTrace.T('tMtx.Enabled .. off', 1);
|
||
tMtx.Enabled := true;
|
||
|
||
if IsCJ_Affiliates and (MgSvc_.EmpNo = CJ_EMPTY_EMPNO) then
|
||
imgChangeEmpNoClick(nil);
|
||
|
||
{$IFDEF DEBUG}
|
||
VisibleMainform(true);
|
||
{$ENDIF}
|
||
|
||
if IsCJ_Affiliates then
|
||
begin
|
||
lbQA.Visible := false;
|
||
imgQA.Visible := false;
|
||
miChangeEmpNo.Caption := RS_IDCHANGE;
|
||
lbChangeEmpNo.Caption := RS_IDCHANGE;
|
||
lbChangeEmpNo.Left := lbQA.Left;
|
||
imgChangeEmpNo.Left := imgQA.Left;
|
||
end;
|
||
|
||
if ShowTestFun then
|
||
begin
|
||
miBrowserSecu.Enabled := true;
|
||
miBrowserSecu.Visible := true;
|
||
// miPrintCtrl.Enabled := true;
|
||
// miPrintCtrl.Visible := true;
|
||
miPcCleanup.Enabled := true;
|
||
miPcCleanup.Visible := true;
|
||
miFileErase.Enabled := true;
|
||
miFileErase.Visible := true;
|
||
|
||
var sIniPrefPath: String := GetRunExePathDir + INI_PREVFUN;
|
||
if FileExists(sIniPrefPath) then
|
||
begin
|
||
Guard(ini, TIniFile.Create(sIniPrefPath));
|
||
MgSvc_.SharePcPrintBlock := ini.ReadBool('Feature', 'SharePcPrintBlock', false);
|
||
MgSvc_.WSDPortPrintBlock := ini.ReadBool('Feature', 'WSDPortPrintBlock', false);
|
||
MgSvc_.TcpIpPrintBlock := ini.ReadBool('Feature', 'TcpIpPrintBlock', false);
|
||
MgSvc_.PrintSavingBlock := ini.ReadBool('Feature', 'PrintSavingBlock', false);
|
||
|
||
if ini.ReadBool('Feature', 'BrowserSecu', false) then
|
||
ExecutePath_hide(GetRunExePathDir + DIR_CONF + EXE_BROWSER_SECU);
|
||
end else begin
|
||
MgSvc_.SharePcPrintBlock := false;
|
||
MgSvc_.WSDPortPrintBlock := false;
|
||
MgSvc_.TcpIpPrintBlock := false;
|
||
MgSvc_.PrintSavingBlock := false;
|
||
end;
|
||
|
||
if not miPrintCtrl.Enabled then
|
||
begin
|
||
MgSvc_.SharePcPrintBlock := false;
|
||
MgSvc_.WSDPortPrintBlock := false;
|
||
MgSvc_.TcpIpPrintBlock := false;
|
||
MgSvc_.PrintSavingBlock := false;
|
||
end;
|
||
end;
|
||
|
||
if IsUsePrintWatermarkExpOnce then
|
||
begin
|
||
miNoWaterApproval.Enabled := true;
|
||
miNoWaterApproval.Visible := true;
|
||
end;
|
||
|
||
miAprvFileExport.Enabled := IsApproveSupport;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. tInitTimer()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.tMtxTimer(Sender: TObject);
|
||
var
|
||
sPath: String;
|
||
begin
|
||
if MutexExists(MUTEX_KILL) then
|
||
begin
|
||
OutputDebugString(PChar('[MGKIM] tMtxTimer ..in '));
|
||
tMtx.Enabled := false;
|
||
|
||
if RecoverSvc_ <> nil then
|
||
RecoverSvc_.StopService;
|
||
|
||
OutputDebugString(PChar('[MGKIM] tMtxTimer ..RecoverSvc_.StopService in '));
|
||
|
||
try
|
||
if TrayIcon_ <> nil then
|
||
TrayIcon_.Visible := false;
|
||
|
||
if MutexExists(MUTEX_UNINSTALL) then
|
||
begin
|
||
// 삭제 이벤트는 큐에 넣지말고 직접 보내줘야 한다. 22_0624 09:05:12 kku
|
||
// MgSvc_.DirectSendEventLog(URI_USER_ACTION, SYSEVT_AGENT_UNINSTALL, 'Uninstall Agent'); // 이거 동작안해서 동작 실행전으로 변경함 24_0905 10:13:09 kku
|
||
end;
|
||
|
||
// 보안모듈 안전 종료를 위한 처리 추가 23_0331 09:22:44 kku
|
||
OutputDebugString(PChar('[MGKIM] tMtxTimer ..MUTEX_UNINSTALL in '));
|
||
if MgSvc_ <> nil then
|
||
MgSvc_.StopService;
|
||
|
||
OutputDebugString(PChar('[MGKIM] tMtxTimer ..MgSvc_.StopService in '));
|
||
except
|
||
// ..
|
||
end;
|
||
OutputDebugString(PChar('[MGKIM] TerminateProcess ..out '));
|
||
TerminateProcess(GetCurrentProcess, 99);
|
||
end;
|
||
|
||
if (KeyMonDll_ <> nil) and (dwBlockInputCTick_ <> 0) and ((GetTickCount - dwBlockInputCTick_) > 1500) then
|
||
begin
|
||
KeyMonDll_.SetDisableKey_Ctrl(false);
|
||
KeyMonDll_.SetDisableKey_Etc(0, 0);
|
||
dwBlockInputCTick_ := 0;
|
||
end;
|
||
|
||
// 서비스를 DLL로 구동 시 필요하지 않음 22_0511 13:45:23 kku
|
||
if not MutexExists(MUTEX_SERVICE) then
|
||
begin
|
||
// SetVisibleServce(NAME_SERVICE, true);
|
||
|
||
if not ServiceExists(NAME_SERVICE) then
|
||
begin
|
||
if not UseSvcExe and FileExists(sSysDir_ + DLL_SV) then
|
||
begin
|
||
InstallServiceDll(sSysDir_ + DLL_SV,
|
||
SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START);
|
||
end else
|
||
if FileExists(sSysDir_ + EXE_SV) then
|
||
begin
|
||
InstallService(NAME_SERVICE, sSysDir_ + EXE_SV, NAME_SERVICE,
|
||
SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START);
|
||
end;
|
||
end;
|
||
|
||
case GetServiceStatus(NAME_SERVICE) of
|
||
0, SERVICE_RUNNING,
|
||
SERVICE_START_PENDING : ;
|
||
else begin
|
||
ServiceStart(NAME_SERVICE);
|
||
// 서비스를 숨기면 윈도우 메이저 업데이트 시 서비스가 사라지는 문제가 있음 24_0105 08:18:24 kku
|
||
// SetVisibleServce(NAME_SERVICE, false);
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
// 삭제 시 다시 재설치하는 증상이 있어서 일단 막음 25_0818 14:49:23 kku
|
||
// if CUSTOMER_TYPE = CUSTOMER_KIMCHANG then
|
||
// begin
|
||
// case GetServiceStatus('BSonePrintService') of
|
||
// SERVICE_RUNNING,
|
||
// SERVICE_START_PENDING : ;
|
||
// else begin
|
||
// var bDoInst: Boolean := true;
|
||
// var sXprtDir: String := 'C:\ProgramData\bsoneprint\';
|
||
// var O: ISuperObject;
|
||
// if LoadJsonObjFromFile(O, sXprtDir + 'bsonelocal.conf') then
|
||
// begin
|
||
// if O.S['stopPassword'] <> '' then
|
||
// bDoInst := false;
|
||
// end;
|
||
//
|
||
// if bDoInst then
|
||
// begin
|
||
// var sXprtExe: String := sXprtDir + EXE_xPrintSvc;
|
||
// if FileExists(sXprtExe) then
|
||
// begin
|
||
// ExecutePath_hide(sXprtExe, '-install');
|
||
// Sleep(2000);
|
||
// end;
|
||
// end;
|
||
// end;
|
||
// end;
|
||
// end;
|
||
|
||
if not UseSvcExe then
|
||
begin
|
||
if GetRegValueAsInteger(HKEY_LOCAL_MACHINE, REG_SVC, 'Start') <> 2 then
|
||
SetRegValueInteger(HKEY_LOCAL_MACHINE, REG_SVC, 'Start', 2, true);
|
||
|
||
if GetRegValueAsInteger(HKEY_LOCAL_MACHINE, REG_SVC, 'Type') <> 16 then
|
||
SetRegValueInteger(HKEY_LOCAL_MACHINE, REG_SVC, 'Type', 16, true);
|
||
|
||
if GetRegValueAsInteger(HKEY_LOCAL_MACHINE, REG_SVC, 'ErrorControl') <> 1 then
|
||
SetRegValueInteger(HKEY_LOCAL_MACHINE, REG_SVC, 'ErrorControl', 1, true);
|
||
|
||
if GetRegValueAsString(HKEY_LOCAL_MACHINE, REG_SVC, 'DisplayName') <> NAME_SERVICE then
|
||
SetRegValueString(HKEY_LOCAL_MACHINE, REG_SVC, 'DisplayName', NAME_SERVICE, true);
|
||
|
||
if GetRegValueAsString(HKEY_LOCAL_MACHINE, REG_SVC, 'ImagePath') <> REG_IMGPATH then
|
||
SetRegValueStringEx(HKEY_LOCAL_MACHINE, REG_SVC, 'ImagePath', REG_IMGPATH, true);
|
||
|
||
if GetRegValueAsString(HKEY_LOCAL_MACHINE, REG_SVC, 'ObjectName') <> 'LocalSystem' then
|
||
SetRegValueString(HKEY_LOCAL_MACHINE, REG_SVC, 'ObjectName', 'LocalSystem', true);
|
||
|
||
sPath := sSysDir_ + DLL_SV;
|
||
if FileExists(sPath) then
|
||
begin
|
||
if not ExistsKey(HKEY_LOCAL_MACHINE, REG_SVC + 'Parameters') then
|
||
SetRegValueStringEx(HKEY_LOCAL_MACHINE, REG_SVC + 'Parameters', 'ServiceDll', sPath, true);
|
||
|
||
if GetRegValueAsString(HKEY_LOCAL_MACHINE, REG_SVC + 'Parameters', 'ServiceDll') <> sPath then
|
||
SetRegValueStringEx(HKEY_LOCAL_MACHINE, REG_SVC + 'Parameters', 'ServiceDll', sPath, true);
|
||
|
||
if GetRegValueAsInteger(HKEY_LOCAL_MACHINE, REG_SVC + 'Parameters', 'ServiceDllUnloadOnStop') <> 1 then
|
||
SetRegValueInteger(HKEY_LOCAL_MACHINE, REG_SVC + 'Parameters', 'ServiceDllUnloadOnStop', 1, true);
|
||
end;
|
||
end;
|
||
// 작업표시줄 유무따라 트레이 죽이고 살리기 22_0524 09:31:22 kku
|
||
if FindWindow('Shell_TrayWnd', '') <> 0 then
|
||
begin
|
||
if (CUSTOMER_TYPE = CUSTOMER_LOTTEMART) and (TrayIcon_ <> nil) and (MgSvc_ <> nil) and MgSvc_.PrefModel.HideMainUI then
|
||
begin
|
||
FreeAndNil(TrayIcon_);
|
||
TTgTrace.T('Remove TrayIcon .. 1', 1);
|
||
end else
|
||
if TrayIcon_ = nil then
|
||
ResetTrayIcon;
|
||
end else
|
||
if TrayIcon_ <> nil then
|
||
begin
|
||
FreeAndNil(TrayIcon_);
|
||
TTgTrace.T('Remove TrayIcon .. 2', 1);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.tSchTimerTimer(Sender: TObject);
|
||
var
|
||
sProcFile: String;
|
||
llTotalTgFileCnt,
|
||
llProcTgFileCnt: LONGLONG;
|
||
wPercent: WORD;
|
||
begin
|
||
if (MgSvc_ = nil) or (not MgSvc_.IsSearchingPersonalInfo) then
|
||
begin
|
||
tSchTimer.Enabled := false;
|
||
lbSchProgMsg.Visible := false;
|
||
exit;
|
||
end;
|
||
|
||
try
|
||
case MgSvc_.ThdScanSch.WorkState of
|
||
tsWorking :
|
||
begin
|
||
sProcFile := MgSvc_.ThdScanSch.ProcSchFile;
|
||
if sProcFile <> '' then
|
||
begin
|
||
llProcTgFileCnt := MgSvc_.ThdScanSch.ProcTgFileCount;
|
||
llTotalTgFileCnt := MgSvc_.ThdScanSch.TotalTgFileCount;
|
||
if llTotalTgFileCnt > 0 then
|
||
wPercent := (llProcTgFileCnt * 100) div llTotalTgFileCnt
|
||
else
|
||
wPercent := 0;
|
||
|
||
lbSchProgMsg.Caption := Format(RS_FMT_Searching,
|
||
[ConvSecBetweenToProgTime(MgSvc_.ThdScanSch.BeginDT, Now),
|
||
llProcTgFileCnt, llTotalTgFileCnt, wPercent, sProcFile]);
|
||
end else
|
||
lbSchProgMsg.Caption := Format(RS_FMT_Scaning,
|
||
[ConvSecBetweenToProgTime(MgSvc_.ThdScanSch.BeginDT, Now),
|
||
MgSvc_.ThdScanSch.ProcDir, MgSvc_.ThdScanSch.TotalFileCount]);
|
||
end;
|
||
tsStop,
|
||
tsCompleted,
|
||
tsFail :
|
||
begin
|
||
tSchTimer.Enabled := false;
|
||
lbSchProgMsg.Visible := false;
|
||
end;
|
||
end;
|
||
|
||
Application.ProcessMessages;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. tSchTimerTimer()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.tSnapTagTimer(Sender: TObject);
|
||
var
|
||
sTemp, sTemp2, sTemp3: String;
|
||
sOutCode: AnsiString;
|
||
n, nAlpha: Integer;
|
||
begin
|
||
sTemp := GetRunExePathDir + DIR_CONF + DLL_ST;
|
||
if FileExists(sTemp) then
|
||
begin
|
||
try
|
||
sTemp2 := GetRunExePathDir + DIR_CONF + DAT_SNAPTAGKEY_S;
|
||
if not FileExists(sTemp2) then
|
||
begin
|
||
var StrList: TStringList;
|
||
Guard(StrList, TStringList.Create);
|
||
StrList.Text := ST_Key_S;
|
||
StrList.SaveToFile(sTemp2, TEncoding.ANSI);
|
||
end;
|
||
|
||
sTemp3 := GetRunExePathDir + DIR_CONF + PNG_SNAPTAGDATA_LOGO;
|
||
n := labGuardPS(sTemp2, sTemp3, 2, 3, 1 {유저코드?},
|
||
FormatDateTime('yyyy/mm/dd hh:nn', Now), sOutCode);
|
||
if n = 0 then
|
||
begin
|
||
DispLogosST_.SetImage(sTemp3, -99, -99);
|
||
nAlpha := 20;
|
||
|
||
if MgSvc_.PrefModel.ScreenLogoAlpha <> 0 then
|
||
nAlpha := MgSvc_.PrefModel.ScreenLogoAlpha;
|
||
DispLogosST_.SetAlpha(nAlpha);
|
||
|
||
if sOutCode <> '' then
|
||
begin
|
||
TTgTrace.T('상시 로고 - ST_Update, ST=%s', [sOutCode], 1);
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, PREVENT_SCREENLOGO, Format('ST=%s, ScreenLogo Update', [sOutCode]));
|
||
end;
|
||
end else
|
||
TTgTrace.T('Fail .. Snaptag .. code = %d', [n], 1);
|
||
|
||
// F.Size := 75;
|
||
// DispLogos_.SetText(sWindowsAccount + #13#10 + '{DateTime}', // DateTimeToStr(Now),
|
||
// F, 3, 3, 0, 0, clBlack, clLime, '', nUpdateMSec);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. UpdateScreenLogo() .. HCA-ST');
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.tStatusTimer(Sender: TObject);
|
||
var
|
||
sMsg: String;
|
||
begin
|
||
(*
|
||
if (Client_ <> nil) and Client_.Connected then
|
||
begin
|
||
case Client_.MgCore.CoreState of
|
||
csIdle :
|
||
begin
|
||
// lbStatus.Caption := Format('폴더 %s개 파일 %s개',
|
||
// [InsertPointComma(Client_.MgCore.TotalDir, 3),
|
||
// InsertPointComma(Client_.MgCore.TotalFile, 3)]);
|
||
sMsg := Client_.MgCore.CoreInfoText;
|
||
if lbTagInfo.Caption <> sMsg then
|
||
lbTagInfo.Caption := sMsg;
|
||
|
||
if miShowTagInfo.Checked <> lbTagInfo.Visible then
|
||
lbTagInfo.Visible := miShowTagInfo.Checked;
|
||
|
||
if DTagList_ <> nil then
|
||
DTagList_.FrmTagList.RefreshList(Client_.MgCore.TgList);
|
||
end;
|
||
csExtrFile :
|
||
begin
|
||
sMsg := Format('[%s]'#13#10'파일 추출 중...'#13#10#13#10'폴더 : %s'#13#10'파일 : %s',
|
||
[ConvSecBetweenToProgTime(Client_.MgCore.ScanDT, Now),
|
||
// Client_.MgCore.ProcPath,
|
||
InsertPointComma(Client_.MgCore.TotalDir, 3),
|
||
InsertPointComma(Client_.MgCore.TotalFile, 3)]);
|
||
lbTagInfo.Caption := sMsg;
|
||
end;
|
||
csExtrTxt :
|
||
begin
|
||
// sMsg := Format('%s'#13#10'태그 수집 중...'#13#10#13#10'%s / %s',
|
||
// [ConvSecBetweenToProgTime(Client_.MgCore.ScanDT, Now),
|
||
// InsertPointComma(Client_.MgCore.ProcCount, 3),
|
||
// InsertPointComma(Client_.MgCore.TotalCount, 3)]);
|
||
//// Client_.MgCore.ProcPath]);
|
||
sMsg := Format('[%s]'#13#10'태그 수집 중...',
|
||
[ConvSecBetweenToProgTime(Client_.MgCore.ScanDT, Now)]);
|
||
// Client_.MgCore.ProcPath]);
|
||
lbTagInfo.Caption := sMsg;
|
||
end;
|
||
end;
|
||
end;
|
||
*)
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.tTempConnTimer(Sender: TObject);
|
||
var
|
||
llTick: LONGLONG;
|
||
nTime: Integer;
|
||
bIsTempConn, bIsOffExp: Boolean;
|
||
begin
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
|
||
bIsTempConn := MgSvc_.IsTemporaryConn;
|
||
bIsOffExp := MgSvc_.IsOfflineExp;
|
||
if not bIsTempConn and not bIsOffExp then
|
||
begin
|
||
RefreshView;
|
||
tTempConn.Enabled := false;
|
||
exit;
|
||
end;
|
||
|
||
if bIsTempConn then
|
||
begin
|
||
llTick := GetTickCount; // Integer Stackoverflow 방지
|
||
// nTime := SEC_USE_TEMPCONN - (llTick - MgSvc_.TempConnBegin);
|
||
nTime := (MgSvc_.PrefModel.TemporaryConnMin * 60000) - (llTick - MgSvc_.TempConnBegin);
|
||
if nTime > 1000 then
|
||
nTime := nTime div 1000
|
||
else
|
||
nTime := 0;
|
||
|
||
lbConn.Caption := Format('%s - %s', [RS_CONNECTION_TEMP, ConvSecToProgTime(nTime)]);
|
||
end else begin
|
||
var dt := IncMinute(MgSvc_.ExpPolicyBeginDT, MgSvc_.ExpPolicyUseMin);
|
||
nTime := SecondsBetween(Now, dt);
|
||
if MgSvc_.ExpPolicyUseMin = 9999 then
|
||
lbConn.Caption := Format('%s - %s', [RS_CONNECTION_EXP, RS_CONNECTION_EXP_TODAY])
|
||
else
|
||
lbConn.Caption := Format('%s - %s', [RS_CONNECTION_EXP, ConvSecToProgTime(nTime)]);
|
||
end;
|
||
|
||
Application.ProcessMessages;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.tUpdateLogoTimer(Sender: TObject);
|
||
begin
|
||
tUpdateLogo.Enabled := false;
|
||
UpdateScreenLogo;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgQAClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgQnA;
|
||
begin
|
||
if FindWindow('TDlgQnA', nil) <> 0 then
|
||
exit;
|
||
|
||
var sExe: String := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
var O: ISuperObject := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_SEND_QnA_MESSAGE;
|
||
O.S['WinCap'] := APP_TITLE;
|
||
O.S['Desc'] := RS_InputQnA;
|
||
O.S['BtnOk'] := RS_QnA;
|
||
O.S['BtnCancel'] := RS_Cancel;
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sExe);
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
end;
|
||
|
||
// Guard(dlg, TDlgQnA.Create(Self));
|
||
// if dlg.ShowModal = mrOk then
|
||
// MgSvc_.SendEventLog(URI_USER_ACTION, REQUEST_QNA, dlg.mmQnA.Text);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgQAMouseEnter(Sender: TObject);
|
||
var
|
||
img: TImage;
|
||
begin
|
||
if Sender = nil then
|
||
exit;
|
||
|
||
if Sender is TImage then
|
||
img := TImage(Sender)
|
||
else if Sender = lbQA then
|
||
img := imgQA
|
||
else
|
||
img := imgChangeEmpNo;
|
||
|
||
if img = imgQA then
|
||
lbQA.Font.Color := $00635653
|
||
else
|
||
lbChangeEmpNo.Font.Color := $00635653;
|
||
|
||
SetImgBtn(imgEvList, img, img.Tag + 1);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgQAMouseLeave(Sender: TObject);
|
||
var
|
||
img: TImage;
|
||
begin
|
||
if Sender = nil then
|
||
exit;
|
||
|
||
if Sender is TImage then
|
||
img := TImage(Sender)
|
||
else if Sender = lbQA then
|
||
img := imgQA
|
||
else
|
||
img := imgChangeEmpNo;
|
||
|
||
if img = imgQA then
|
||
lbQA.Font.Color := clWhite
|
||
else
|
||
lbChangeEmpNo.Font.Color := clWhite;
|
||
|
||
SetImgBtn(imgEvList, img, img.Tag);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgSetAccPassClick(Sender: TObject);
|
||
begin
|
||
ExecutePath_hide('cmd.exe', PARAM_GO_SETPASS);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgSetAntiVirusClick(Sender: TObject);
|
||
begin
|
||
ExecutePath_hide('cmd.exe', PARAM_GO_ANTIVIRUS);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgSetFWClick(Sender: TObject);
|
||
begin
|
||
if StrToIntDef(MgSvc_.HandleConfig.OsVersion, 7) >= 10 then
|
||
ExecutePath_hide('cmd.exe', PARAM_GO_FIREWALL2)
|
||
else
|
||
ExecutePath_hide('cmd.exe', PARAM_GO_FIREWALL);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgSetOsClick(Sender: TObject);
|
||
begin
|
||
ExecutePath_hide('cmd.exe', PARAM_GO_WINUPDATE);
|
||
MgSvc_.DoCheckOsUpdate;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgSetOsMouseEnter(Sender: TObject);
|
||
begin
|
||
if Sender is TImage then
|
||
SetImgBtn(imgBtnList, TImage(Sender), 1);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgSetOsMouseLeave(Sender: TObject);
|
||
begin
|
||
if Sender is TImage then
|
||
SetImgBtn(imgBtnList, TImage(Sender), 0);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgSetScreenSaverClick(Sender: TObject);
|
||
begin
|
||
{$IFDEF DEBUG}
|
||
ExecutePath_hide('cmd.exe', PARAM_GO_SETSAVER);
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', 'rundll32.exe', 'shell32.dll,Control_RunDLL desk.cpl,,1', SW_HIDE);
|
||
{$ENDIF}
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbOsVerTopMouseDown(Sender: TObject;
|
||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||
begin
|
||
imgOsInfoMouseDown(CtrlTagToImage(Sender), Button, Shift, X, Y);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbOsVerTopMouseEnter(Sender: TObject);
|
||
begin
|
||
imgSetOsMouseEnter(CtrlTagToImage(Sender));
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbOsVerTopMouseLeave(Sender: TObject);
|
||
begin
|
||
imgSetOsMouseLeave(CtrlTagToImage(Sender));
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbOsVerTopMouseUp(Sender: TObject;
|
||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||
begin
|
||
imgOsInfoMouseUp(CtrlTagToImage(Sender), Button, Shift, X, Y);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbTagInfoDblClick(Sender: TObject);
|
||
begin
|
||
// if DTagList_ <> nil then
|
||
// DTagList_.Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbVerDblClick(Sender: TObject);
|
||
var
|
||
ShiftState: TShiftState;
|
||
begin
|
||
ShiftState := KeyDataToShiftState(0);
|
||
if GetKeyState(VK_LMENU) < 0 then
|
||
Include(ShiftState, ssAlt);
|
||
|
||
if (ssShift in ShiftState) and
|
||
(ssAlt in ShiftState) and
|
||
(ssCtrl in ShiftState) then
|
||
begin
|
||
ShowMessage(GetCustomerName + #13#10 + gMgSvc.DestIPort + #13#10 + BUILD_DT);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbWinAccountDblClick(Sender: TObject);
|
||
var
|
||
ShiftState: TShiftState;
|
||
begin
|
||
ShiftState := KeyDataToShiftState(0);
|
||
if GetKeyState(VK_LMENU) < 0 then
|
||
Include(ShiftState, ssAlt);
|
||
|
||
if (ssShift in ShiftState) and
|
||
(ssAlt in ShiftState) and
|
||
(ssCtrl in ShiftState) then
|
||
begin
|
||
if MgSvc_ <> nil then
|
||
ShowMessage(MgSvc_.Domain);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbCttSchClick(Sender: TObject);
|
||
var
|
||
PerList: TPerInfoEntList;
|
||
dlg: TDlgSelPerInfo;
|
||
EntInfo: TPerInfoEnt;
|
||
O: ISuperObject;
|
||
sPath: String;
|
||
ScanOpt: TFileScanOpt;
|
||
|
||
// sPath: String;
|
||
// dlg: TDlgCustomCttSch;
|
||
// SchOpt: TFileScanOpt;
|
||
begin
|
||
if MgSvc_.IsSearchingPersonalInfo then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_PiScanning+#13+#10+
|
||
RS_ConfirmRetry), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
if FindWindow('TDlgViewCustomCttSchResult', nil) <> 0 then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_ClosePerInfoResult), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
ZeroMemory(@EntInfo, SizeOf(EntInfo));
|
||
|
||
Guard(PerList, TPerInfoEntList.Create);
|
||
if GetPersonalInfoResults(PerList) = 0 then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_NoScanData), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
if PerList.Count = 1 then
|
||
begin
|
||
EntInfo := PerList[0]^;
|
||
end else begin
|
||
Guard(dlg, TDlgSelPerInfo.Create(Self, PerList));
|
||
if dlg.ShowModal = mrOk then
|
||
EntInfo := dlg.SelEnt^;
|
||
end;
|
||
|
||
if EntInfo.sScanId <> '' then
|
||
begin
|
||
if MessageBox(Handle, PChar(Format(RS_ScanConfirm1 + #13#10 +
|
||
RS_ScanConfirm2+#13+#10+
|
||
RS_ScanConfirm3+#13+#10+#13+#10+
|
||
RS_ScanConfirm4 + #13#10 + RS_ScanConfirm5,
|
||
[DateTimeToStr(EntInfo.dtBegin), InsertPointComma(EntInfo.dwVulFileCnt, 3), EntInfo.sTime])),
|
||
PChar(APP_TITLE), MB_ICONQUESTION or MB_YESNO) = IDNO then exit;
|
||
|
||
sPath := GetRunExePathDir + DIR_CTTSCHRST + EntInfo.sScanId + '.' + DAT_CTTSCHOPT;
|
||
if not LoadJsonObjFromEncFile(O, sPath, PASS_STRENC) or (O.S['sScanId'] = '') then
|
||
if not LoadJsonObjFromFile(O, sPath) or (O.S['sScanId'] = '') then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_FailScanOpt), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
ScanOpt := TTgJson.GetDataAsType<TFileScanOpt>(O);
|
||
ScanOpt.CttSchOpt.hRcvHwnd := Handle;
|
||
MgSvc_.StartPiSchTask(ScanOpt, 0 {최근 스캔일 재활용}, false);
|
||
end else
|
||
MessageBox(Handle, PChar(RS_FailScanOpt), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
|
||
|
||
// try
|
||
// if MgSvc_.IsSearchingPersonalInfo then
|
||
// begin
|
||
// if MessageBox(Handle, PChar('이미 검사중입니다. 기존 검사를 취소하시겠습니까?'),
|
||
// PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDNO then exit;
|
||
//
|
||
// MgSvc_.StopPersonalInfoSearch;
|
||
// end;
|
||
//
|
||
// sPath := GetRunExePathDir + DIR_CTTSCHRST + DAT_CTTSCHRST;
|
||
// if FileExists(sPath) then
|
||
// begin
|
||
// if MessageBox(Handle, PChar(RS_AlreadyCttSchRts1+#13+#10+RS_AlreadyCttSchRts2),
|
||
// PChar(APP_TITLE), MB_ICONQUESTION or MB_YESNO) = IDNO then exit;
|
||
// DeleteDir(ExtractFilePath(sPath));
|
||
// end;
|
||
// UpdateCttSchRstButton;
|
||
//
|
||
// Guard(dlg, TDlgCustomCttSch.Create(Self));
|
||
// if dlg.ShowModal = mrOk then
|
||
// begin
|
||
// if FileExists(sPath) then
|
||
// DeleteDir(ExtractFilePath(sPath));
|
||
//
|
||
// if not ForceDirectories(GetRunExePathDir + DIR_CTTSCHRST) then
|
||
// begin
|
||
// TTgTrace.T('Fail .. CreateDir() .. Path="%s"', [GetRunExePathDir + DIR_CTTSCHRST]);
|
||
// MessageBox(Handle, PChar('작업 폴더를 생성하는 중 오류가 발생했습니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
// exit;
|
||
// end;
|
||
//
|
||
// ZeroMemory(@SchOpt, SizeOf(SchOpt));
|
||
// SchOpt.sTgDirs := dlg.Paths;
|
||
// SchOpt.sScanExt := dlg.mmExt.Text;
|
||
// SchOpt.sSchPtrns := dlg.Patterns;
|
||
// SchOpt.nLangId := 1;
|
||
// SchOpt.nLimitSizeMB := dlg.LimitSizeMB;
|
||
// SchOpt.CttSchOpt.hRcvHwnd := Handle;
|
||
// SchOpt.CttSchOpt.nWorkPriority := -1;
|
||
// SchOpt.CttSchOpt.sKvMdPath := GetRunExePathDir + 'bin\';
|
||
// MgSvc_.StartPersonalInfoSearch(SchOpt);
|
||
//
|
||
// TDlgProgCustomCttSch.Create(nil).Show;
|
||
// UpdateCttSchRstButton;
|
||
// end;
|
||
// except
|
||
// on E: Exception do
|
||
// ETgException.TraceException(Self, E, 'Fail .. miCttSchClick()');
|
||
// end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbCttSchRstClick(Sender: TObject);
|
||
var
|
||
PerList: TPerInfoEntList;
|
||
dlg: TDlgSelPerInfo;
|
||
begin
|
||
if FindWindow('TDlgViewCustomCttSchResult', nil) <> 0 then
|
||
exit;
|
||
|
||
if MgSvc_.IsSearchingPersonalInfo then
|
||
begin
|
||
var bEncCamp: Boolean := false;
|
||
try
|
||
bEncCamp := (MgSvc_.ProcCampn <> nil) and (MgSvc_.ProcCampn.Info.CampnType = ctForceEnc);
|
||
except
|
||
// ..
|
||
end;
|
||
|
||
// if bEncCamp then
|
||
// MessageBox(Handle, PChar(RS_EncScanning+#13+#10+
|
||
// RS_ConfirmRetry), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK)
|
||
// else
|
||
// MessageBox(Handle, PChar(RS_PiScanning+#13+#10+
|
||
// RS_ConfirmRetry), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK);
|
||
//
|
||
// exit;
|
||
|
||
// 파일 암호화 캠페인은 검출결과 확인 가능하도록 수정 24_0423 15:50:49 kku
|
||
if not bEncCamp then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_PiScanning+#13+#10+
|
||
RS_ConfirmRetry), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK);
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
Guard(PerList, TPerInfoEntList.Create);
|
||
if GetPersonalInfoResults(PerList) = 0 then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_NoScanData), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
if PerList.Count = 1 then
|
||
begin
|
||
TDlgViewCttSchResult.Create(PerList[0].sScanId).Show;
|
||
end else begin
|
||
Guard(dlg, TDlgSelPerInfo.Create(Self, PerList));
|
||
if dlg.ShowModal = mrOk then
|
||
TDlgViewCttSchResult.Create(dlg.SelEnt.sScanId).Show;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbEmpNoDblClick(Sender: TObject);
|
||
begin
|
||
// ShowMessage(GetRegValueAsString(HKEY_CURRENT_USER, 'SOFTWARE\7-Zip', 'Path'));
|
||
// MgSvc_.SendEventLog(URI_USER_ACTION, LOGCODE_MONITOR_DOMAIN, 'Domain : www.daum.net');
|
||
// MgSvc_.SendEventLog(URI_USER_ACTION, LOGCODE_MONITOR_CONNECTION, 'Domain : www.daum.net');
|
||
// MgSvc_.SendEventLog(URI_USER_ACTION, LOGCODE_PREVENT_USB, 'Domain : www.daum.net');
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbIpInfoDblClick(Sender: TObject);
|
||
begin
|
||
//SetAipLabel('C:\Users\kku\Desktop\456_label.docx', '');
|
||
end;
|
||
|
||
function ProtectCurrentProcess: Boolean;
|
||
var
|
||
hProcess: THandle;
|
||
pSD: PSECURITY_DESCRIPTOR;
|
||
// ea: EXPLICIT_ACCESS;
|
||
ea: array[0..2] of EXPLICIT_ACCESS;
|
||
pNewDACL, pTempDACL: PACL;
|
||
b1, b2: LongBool;
|
||
i: Integer;
|
||
const
|
||
TrusteeNames: array[0..3] of PChar = (
|
||
'EVERYONE',
|
||
'Administrator',
|
||
'KKU-PC\Administrators',
|
||
'NT AUTHORITY\SYSTEM'
|
||
);
|
||
begin
|
||
Result := false;
|
||
hProcess := OpenProcess(WRITE_DAC, FALSE, GetCurrentProcessId);
|
||
if hProcess = 0 then Exit;
|
||
|
||
for i := 0 to High(ea) do
|
||
begin
|
||
ZeroMemory(@ea[i], SizeOf(EXPLICIT_ACCESS));
|
||
ea[i].grfAccessPermissions := PROCESS_TERMINATE;
|
||
ea[i].grfAccessMode := DENY_ACCESS;
|
||
ea[i].grfInheritance := NO_INHERITANCE;
|
||
ea[i].Trustee.TrusteeForm := TRUSTEE_IS_NAME;
|
||
ea[i].Trustee.TrusteeType := TRUSTEE_IS_USER;
|
||
ea[i].Trustee.ptstrName := TrusteeNames[i];
|
||
end;
|
||
|
||
// ZeroMemory(@ea, SizeOf(EXPLICIT_ACCESS));
|
||
// ea.grfAccessPermissions := PROCESS_ALL_ACCESS;
|
||
// ea.grfAccessMode := DENY_ACCESS;
|
||
// ea.grfInheritance := NO_INHERITANCE;
|
||
// ea.Trustee.TrusteeForm := TRUSTEE_IS_NAME;
|
||
// ea.Trustee.TrusteeType := TRUSTEE_IS_USER;
|
||
// ea.Trustee.ptstrName := 'Administrators';
|
||
|
||
if SetEntriesInAcl(Length(ea), @ea, nil, pNewDACL) = ERROR_SUCCESS then
|
||
begin
|
||
pTempDACL := nil;
|
||
GetSecurityDescriptorDacl(pSD, b1, pTempDACL, b2);
|
||
SetSecurityInfo(hProcess, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, pNewDACL, nil);
|
||
LocalFree(HLOCAL(pNewDACL));
|
||
Result := true;
|
||
end;
|
||
|
||
CloseHandle(hProcess);
|
||
end;
|
||
|
||
procedure SetDesktopWallpaper(const sPath: string);
|
||
begin
|
||
// 1. 레지스트리에 이미지 경로 저장
|
||
SetRegValueString(HKEY_CURRENT_USER, 'Control Panel\Desktop', 'Wallpaper', sPath, true);
|
||
|
||
// 2. 시스템에 배경화면 변경 적용
|
||
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(sPath),
|
||
SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.lbModeDblClick(Sender: TObject);
|
||
//var
|
||
// dlg: TDlgSimpleInfo;
|
||
// dlg: TDlgEjectDLL;
|
||
begin
|
||
{$IFDEF DEBUG}
|
||
var dlg: TDlgDecryptAip := TDlgDecryptAip.Create(nil);
|
||
dlg.Show;
|
||
exit;
|
||
|
||
// var LogInfo: TLogInfo;
|
||
// ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
// LogInfo.sCode := MONITOR_appScreenRec;
|
||
// LogInfo.sLogId := StrsReplace(TGUID.NewGuid.ToString, ['{', '}'], '');
|
||
//
|
||
// var sData: String := MgSvc_.GetPostData(Format('aapi/files/issue?origin=inc.%s&type=appScreenRec', [LogInfo.sLogId]), '');
|
||
// if sData = '' then
|
||
// begin
|
||
// ShowMessage('실패 1');
|
||
// exit;
|
||
// end;
|
||
// var O: ISuperObject := SO(sData);
|
||
// var sFid: String := O.S['fileId'];
|
||
// var sUpUrl: String := O.S['uploadUrl'];
|
||
// var sPath: String := 'C:\Users\kku\Desktop\TEST\_ColTest\1.mp4';
|
||
// MgSvc_.SendFile('file', sUpUrl, sPath, 0, 20);
|
||
//
|
||
// var OA := TSuperObject.Create(stArray);
|
||
// OA.AsArray.Add(sFid);
|
||
// LogInfo.sThumbIds := OA.AsJSon;
|
||
// LogInfo.sSummary := Format('TEST - mp4 Upload, %s', [DateTimeToStr(Now)]);
|
||
// MgSvc_.SendEventLogEx(@LogInfo);
|
||
{$ENDIF}
|
||
|
||
//dlg.mmInfo := nil;
|
||
//ShowMessage(dlg.mmInfo.Text);
|
||
//var msg: String := '';
|
||
//msg[234] := 'd';
|
||
//{$IFDEF DEBUG}
|
||
// MgSvc_.SendEventLog(URI_CONNECT, SYSEVT_AGENT_INSTALL, 'Agent first connected');
|
||
//{$ENDIF}
|
||
|
||
// var sUrl := gMgSvc.SendApprovalPrint('0001', 'DocText', '', 'DocName.txt');
|
||
// if sUrl <> '' then
|
||
// ExecutePath(gMgSvc.DestIPort + sUrl);
|
||
//exit;
|
||
|
||
//{$IFDEF DEBUG} // TEST_KJ
|
||
//UpdateScreenLogo(true);
|
||
// MgSvc_.PopupMessage(TYPE_MSG_CTTSCH_COMPLETE, '00:00:00|347');
|
||
//exit;
|
||
//{$ENDIF}
|
||
|
||
// var sMsg: String := 'Name : ' + MgSvc_.UName + #13#10 +
|
||
// 'Dept : ' + MgSvc_.DeptName + #13#10 +
|
||
// 'Email : ' + MgSvc_.Email;
|
||
//
|
||
// ShowMessage(sMsg);
|
||
//
|
||
// exit;
|
||
|
||
// dlg := TDlgSimpleInfo.Create(Self);
|
||
// dlg.FillCurrentModeInfo;
|
||
// dlg.Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miAgentStateClick(Sender: TObject);
|
||
begin
|
||
VisibleMainform(true);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miAip2KessClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgAip2KessDrm;
|
||
begin
|
||
Guard(dlg, TDlgAip2KessDrm.Create(Self));
|
||
dlg.ShowModal;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miAipTryClick(Sender: TObject);
|
||
begin
|
||
MgSvc_.AipFailCnt := 0;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miAprvListClick(Sender: TObject);
|
||
var
|
||
sUrl: String;
|
||
begin
|
||
sUrl := MgSvc_.GetApprovalUrl('1');
|
||
if sUrl <> '' then
|
||
begin
|
||
// ExecutePath(gMgSvc.DestIPort + sUrl);
|
||
|
||
var sHlpExe: String := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sHlpExe) then
|
||
begin
|
||
var O: ISuperObject := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_EXECUTE_FILE;
|
||
O.S['Path'] := gMgSvc.DestIPort + sUrl;
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sHlpExe);
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
end else
|
||
ExecutePath(gMgSvc.DestIPort + sUrl);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miAprvReqListClick(Sender: TObject);
|
||
var
|
||
sUrl: String;
|
||
begin
|
||
sUrl := MgSvc_.GetApprovalUrl('3');
|
||
if sUrl <> '' then
|
||
begin
|
||
// ExecutePath(gMgSvc.DestIPort + sUrl);
|
||
|
||
var sHlpExe: String := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sHlpExe) then
|
||
begin
|
||
var O: ISuperObject := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_EXECUTE_FILE;
|
||
O.S['Path'] := gMgSvc.DestIPort + sUrl;
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sHlpExe);
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
end else
|
||
ExecutePath(gMgSvc.DestIPort + sUrl);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miBrowserSecuClick(Sender: TObject);
|
||
var
|
||
sBrExe: String;
|
||
ini: TIniFile;
|
||
begin
|
||
sBrExe := GetRunExePathDir + DIR_CONF + EXE_BROWSER_SECU;
|
||
if not FileExists(sBrExe) then
|
||
begin
|
||
MessageBox(Handle, '브라우저 보안 모듈이 존재하지 않습니다.', PChar(APP_TITLE), MB_OK + MB_ICONWARNING);
|
||
exit;
|
||
end;
|
||
|
||
if miBrowserSecu.Checked then
|
||
begin
|
||
if MessageBox(Handle, '브라우저 보안 기능을 중지하시겠습니까?',
|
||
PChar(APP_TITLE), MB_YESNO + MB_ICONQUESTION) = IDNO then exit;
|
||
|
||
TerminateProcessByName(EXE_BROWSER_SECU);
|
||
Guard(ini, TIniFile.Create(GetRunExePathDir + INI_PREVFUN));
|
||
ini.WriteBool('Feature', 'BrowserSecu', false);
|
||
MessageBox(Handle, '브라우저 보안 기능을 중지했습니다.', PChar(APP_TITLE), MB_OK + MB_ICONINFORMATION);
|
||
end else begin
|
||
var dlg: TDlgBrowserOpt;
|
||
Guard(dlg, TDlgBrowserOpt.Create(Self));
|
||
if dlg.ShowModal = mrOk then
|
||
begin
|
||
Guard(ini, TIniFile.Create(GetRunExePathDir + INI_PREVFUN));
|
||
ini.WriteBool('Feature', 'BrowserSecu', true);
|
||
ExecutePath_hide(sBrExe);
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miCttSchClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgCustomCttSchOpt;
|
||
Opt: TFileScanOpt;
|
||
sInfoDir: String;
|
||
begin
|
||
if ThdCustomScanSch_ <> nil then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_CustomCttSching), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
Guard(dlg, TDlgCustomCttSchOpt.Create(Self));
|
||
if dlg.ShowModal = mrOk then
|
||
begin
|
||
ZeroMemory(@Opt, SizeOf(Opt));
|
||
Opt.sSchPtrns := '<Empty>'; // 이거 비어 있으면 ptnsch.dat 파일에서 체크된 항목 검사됨
|
||
Opt.sSchTitle := 'Custom';
|
||
Opt.nLimitSizeMB := StrToIntDef(dlg.edLimitMB.Text, 50);
|
||
Opt.nSchTimeoutSec := StrToIntDef(dlg.edTmSec.Text, 30);
|
||
Opt.sIgrWordPath := dlg.mmExcept.Text;
|
||
Opt.sScanExt := dlg.edTgExts.Text;
|
||
Opt.sTgDirs := dlg.mmTarget.Text;
|
||
|
||
Opt.nLangId := 1;
|
||
Opt.CttSchOpt.nUnzipDepth := MgSvc_.ModePolicy.CfZipDepth;
|
||
Opt.CttSchOpt.hRcvHwnd := Handle;
|
||
Opt.CttSchOpt.nWorkPriority := -1;
|
||
Opt.CttSchOpt.sKvMdPath := GetRunExePathDir + 'bin\';
|
||
Opt.CttSchOpt.nKvTimeoutSec := Opt.nSchTimeoutSec;
|
||
Opt.CttSchOpt.sMK := GetMK(false);
|
||
Opt.CttSchOpt.bIncFName := dlg.chIncFName.Checked;
|
||
Opt.CttSchOpt.bIncZip := dlg.chIncZip.Checked;
|
||
if Opt.CttSchOpt.bIncZip then
|
||
begin
|
||
Opt.CttSchOpt.sZipExts := Opt.sScanExt;
|
||
// Opt.sScanExt := dlg.edTgExts.Text + '|' + COMPRESS_EXTS;
|
||
end;
|
||
Opt.CttSchOpt.bIncDrm := true;
|
||
Opt.CttSchOpt.sCustomKwdPtrn := MgSvc_.MgRule.GetRuleSearchStrFromIds(dlg.UseRule);
|
||
// Opt.CttSchOpt.bExtrTxt := ;
|
||
|
||
sInfoDir := GetRunExePathDir + DIR_CTTSCHRST_CUSTOM;
|
||
DeleteDir(sInfoDir);
|
||
|
||
sSchRstPath_ := sInfoDir + DAT_CTTSCHRSTDATA_CUSTOM;
|
||
|
||
if not ForceDirectories(sInfoDir) then
|
||
TTgTrace.T('Fail .. Create sch workdir ..');
|
||
|
||
ThdCustomScanSch_ := TThdSchFileScan.Create(Opt.sTgDirs, Opt, 0, true);
|
||
// ThdCustomScanSch_.OnScanSearchBegin := OnCampaignTaskBegin;
|
||
// ThdCustomScanSch_.OnScanSearchEnd := OnCampaignTaskEnd;
|
||
ThdCustomScanSch_.StartThread;
|
||
|
||
TDlgProgCustomCttSch.Create(Self, ThdCustomScanSch_).Show;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miCttSchResultClick(Sender: TObject);
|
||
begin
|
||
TDlgViewCustomCttSchResult.Create(nil).Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.AddFoundCttSchRst(pResult: PSchResult);
|
||
var
|
||
StrList,
|
||
RstList,
|
||
RNameList: TStringList;
|
||
i: Integer;
|
||
begin
|
||
// if pResult.nHitCnt > 0 then
|
||
// begin
|
||
ThdCustomScanSch_.IncFoundCount(pResult.nHitCnt);
|
||
ThdCustomScanSch_.IncFoundFileCount;
|
||
|
||
Guard(StrList, TStringList.Create);
|
||
SplitString(pResult.sSchName, RESULT_SEPARATOR, StrList);
|
||
Guard(RstList, TStringList.Create);
|
||
SplitString(pResult.sResultStr, RESULT_SEPARATOR, RstList);
|
||
Guard(RNameList, TStringList.Create);
|
||
for i := 0 to StrList.Count - 1 do
|
||
begin
|
||
if (i = 0) and (StrList[i] = '*KWD*') then
|
||
begin
|
||
// MgFnd_.PushFoundKeyword(RstList[i]);
|
||
end else begin
|
||
// sTemp := MgRule_.GetRuleNameFromId(StrList[i]);
|
||
RNameList.Add(MgSvc_.MgRule.GetRuleNameFromId(StrList[i]));
|
||
// MgFnd_.PushFoundPattern(sTemp, GetCountOverlapWordsCount(RstList[i]));
|
||
// SumString(pResult.sSchName, ExtractFileName(StrList[i]), ';');
|
||
end;
|
||
end;
|
||
|
||
TTgTrace.T('[MGKIM] AddFoundCttSchRst .. sSchRstPath(%s)', [sSchRstPath_], 10);
|
||
if sSchRstPath_ <> '' then
|
||
with pResult^ do
|
||
WriteLnFileEndUTF8(sSchRstPath_,
|
||
Format('%s<!>%d<!>%s<!>%s<!>%s<!>%s<!>%s',
|
||
[RNameList.CommaText, nHitCnt, sPath, RstList.CommaText, sFName,
|
||
pResult.sSchName, pResult.sResultStr]));
|
||
// end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miDebugModeClick(Sender: TObject);
|
||
begin
|
||
try
|
||
// if bIsDebugMode_ then
|
||
if gTrForm <> nil then
|
||
begin
|
||
if MessageBox(Handle, PChar('디버그 모드를 종료하시겠습니까?'),
|
||
PChar(APP_TITLE), MB_ICONQUESTION or MB_YESNO) = IDNO then exit;
|
||
|
||
TTgTrace.T('DebugMode .. OFF');
|
||
gTrForm.Close;
|
||
|
||
// if TTgTrace.SetAllocConsole(false) then
|
||
begin
|
||
if gTrace <> nil then
|
||
begin
|
||
if MgSvc_ <> nil then
|
||
gTrace.Level := MgSvc_.PrefModel.LogLv
|
||
else
|
||
gTrace.Level := 99;
|
||
end;
|
||
// bIsDebugMode_ := false;
|
||
end;
|
||
end else begin
|
||
var dlg: TDlgDebugPW;
|
||
Guard(dlg, TDlgDebugPW.Create(Self));
|
||
{$IFNDEF DEBUG}
|
||
if IsDev or (dlg.ShowModal = mrOk) then
|
||
{$ENDIF}
|
||
begin
|
||
// if TTgTrace.SetAllocConsole(true) then
|
||
TDlgBs1Log.Create.Show;
|
||
begin
|
||
if gTrace <> nil then
|
||
gTrace.Level := 99;
|
||
|
||
// bIsDebugMode_ := true;
|
||
TTgTrace.T('DebugMode .. ON');
|
||
end;
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. DebugModeClick()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miDecryptDrmClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgDecryptDrm;
|
||
sExe, sParam: String;
|
||
O: ISuperObject;
|
||
PO: TPrefModel;
|
||
begin
|
||
// if CUSTOMER_TYPE = CUSTOMER_BLUECORNER then
|
||
begin
|
||
sExe := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
PO := MgSvc_.ModePolicy;
|
||
|
||
O := SO;
|
||
O.I['Cmd'] := HPCMD_OPEN_DECRYPT;
|
||
O.S['WinCap'] := APP_TITLE;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['CT'] := CUSTOMER_TYPE;
|
||
O.S['UName'] := MgSvc_.UName;
|
||
O.S['Dept'] := MgSvc_.DeptName;
|
||
if O.S['Dept'] = '' then
|
||
O.S['Dept'] := PO.DeptName;
|
||
O.S['EN'] := MgSvc_.EmpNo;
|
||
O.S['PON'] := PO.PolicyName;
|
||
O.B['AVAL'] := IsApproveSupport and gMgSvc.ModePolicy.DrmApproval;
|
||
|
||
sParam := GetRunExePathDir + DIR_CONF + DAT_PARAM;
|
||
SaveJsonObjToFile(O, sParam);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sExe, Format('/p "%s"', [sParam]));
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
// DeleteFile(sParam);
|
||
end;
|
||
end;
|
||
// else begin
|
||
// dlg := TDlgDecryptDrm.Create(Self);
|
||
// dlg.Show;
|
||
// end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.DoAgentUninstall;
|
||
var
|
||
sDstDir,
|
||
sCurPath: String;
|
||
O: ISuperObject;
|
||
begin
|
||
TTgTrace.T('DoAgentUninstall()');
|
||
sCurPath := GetRunExePath;
|
||
sDstDir := ExtractFilePath(ExcludeTrailingPathDelimiter(ExtractFilePath(sCurPath))) + ExtractFileName(sCurPath);
|
||
if CopyFile(PChar(sCurPath), PChar(sDstDir), false) then
|
||
begin
|
||
Sleep(1000);
|
||
O := SO;
|
||
O.I['M'] := MODE_DELETE;
|
||
O.S['ID'] := ExtractFilePath(sCurPath);
|
||
O.B['SD'] := true;
|
||
sCurPath := GetRunExePathDir + 'reqprm.json';
|
||
if SaveJsonObjToFile(O, sCurPath) then
|
||
ExecutePath_hide(sDstDir, Format('-i "%s"', [sCurPath]))
|
||
else
|
||
DeleteFile(sDstDir);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miDelAgentClick(Sender: TObject);
|
||
begin
|
||
// if MgSvc_.VulService.IsVpnOn then
|
||
// begin
|
||
// MessageBox(Handle, PChar(RS_NoDeleteSecuMode1+#13+#10+RS_NoDeleteSecuMode2), PChar(APP_TITLE), MB_ICONSTOP or MB_OK);
|
||
// exit;
|
||
// end;
|
||
|
||
if ( MgSvc_.IsNewApi and
|
||
(MgSvc_.PrefModel.UninstKind = uikPassword) and
|
||
(MgSvc_.PrefModel.UninstallPW <> '') ) or
|
||
( not MgSvc_.IsNewApi and (MgSvc_.PrefModel.UninstallPW <> '')) then
|
||
begin
|
||
if FindWindow('TDlgUninstallPW', nil) <> 0 then
|
||
exit;
|
||
|
||
var dlg: TDlgUninstallPW;
|
||
Guard(dlg, TDlgUninstallPW.Create(Self));
|
||
if dlg.ShowModal <> mrOk then
|
||
exit;
|
||
end else
|
||
if MgSvc_.PrefModel.UninstKind = uikOTP then
|
||
begin
|
||
|
||
var dlg: TDlgOtpAuth;
|
||
Guard(dlg, TDlgOtpAuth.Create(Self));
|
||
if dlg.ShowModal <> mrOk then
|
||
exit;
|
||
end else
|
||
if MgSvc_.PrefModel.UninstKind = uikCode then
|
||
begin
|
||
var dlg: TDlgDeleteCode;
|
||
Guard(dlg, TDlgDeleteCode.Create(Self));
|
||
if dlg.ShowModal <> mrOk then
|
||
exit;
|
||
end;
|
||
|
||
if MessageBox(Handle, PChar(Format(RS_Q_DeleteHE1, [APP_TITLE])+#13+#10+
|
||
RS_Q_DeleteHE2+#13+#10+RS_Q_DeleteHE3+#13+#10+
|
||
RS_Q_DeleteHE4), PChar(APP_TITLE), MB_ICONWARNING or MB_YESNO) = IDNO then exit;
|
||
|
||
if MgSvc_ <> nil then
|
||
MgSvc_.DirectSendEventLog(URI_USER_ACTION, SYSEVT_REQ_AGENT_UNINSTALL, '[User] Uninstall Agent');
|
||
|
||
DoAgentUninstall;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.EncFile(sPath: String);
|
||
var
|
||
sExt,
|
||
sFName: String;
|
||
sDestUrl,
|
||
sBoundary,
|
||
sEncPath: String;
|
||
Params: TIdMultiPartFormDataStream;
|
||
fsEnc: TFileStream;
|
||
begin
|
||
if GetFileSize_path(sPath) > 52428800{50MB} then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_MsgIsBigFile50MbLow),
|
||
PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
sFName := ExtractFileName(sPath);
|
||
sExt := GetFileExt(sFName);
|
||
if sExt = '' then
|
||
sExt := 'unknown';
|
||
|
||
fsEnc := nil;
|
||
sDestUrl := StringReplace(MgSvc_.DestServerUrl, 'agentLogRequest.do', 'drmEncUpload.do', [rfReplaceAll]);
|
||
sDestUrl := StringReplace(sDestUrl, 'agentLogRequests.do', 'drmEncUpload.do', [rfReplaceAll]);
|
||
|
||
InitHttp;
|
||
sBoundary := Format('%X', [GetLocalIncUtcMin * 6000]);
|
||
HTTP_.Request.ContentType := Format('multipart/form-data; boundary=%s; charset=utf-8', [sBoundary]);
|
||
|
||
Guard(Params, TIdMultiPartFormDataStream.Create);
|
||
with Params.AddFile(sFName, sPath, Format('application/%s', [sExt])) do
|
||
begin
|
||
ContentTransfer := '';
|
||
HeaderEncoding := '8'; //8bit
|
||
HeaderCharSet := 'utf-8';
|
||
Charset := 'utf-8';
|
||
end;
|
||
|
||
sEncPath := CutFileExt(sPath) + '_enc.' + GetFileExt(sFName);
|
||
fsEnc := TFileStream.Create(sEncPath, fmCreate);
|
||
try
|
||
HTTP_.Post(sDestUrl, Params, fsEnc);
|
||
FreeAndNil(fsEnc);
|
||
|
||
if HTTP_.ResponseCode = 200 then
|
||
begin
|
||
MessageBox(Handle, PChar(Format(RS_MsgEncFile+#13+#10+'(Path="%s")', [sEncPath])),
|
||
PChar(Caption), MB_ICONINFORMATION or MB_OK);
|
||
end;
|
||
finally
|
||
if fsEnc <> nil then
|
||
FreeAndNil(fsEnc);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.DecFile(sPath: String);
|
||
var
|
||
sExt,
|
||
sFName: String;
|
||
sDestUrl,
|
||
sBoundary,
|
||
sDecPath: String;
|
||
Params: TIdMultiPartFormDataStream;
|
||
fsDec: TFileStream;
|
||
begin
|
||
if GetFileSize_path(sPath) > 52428800{50MB} then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_MsgIsBigFile50MbLow),
|
||
PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
sFName := ExtractFileName(sPath);
|
||
sExt := GetFileExt(sFName);
|
||
if sExt = '' then
|
||
sExt := 'unknown';
|
||
|
||
fsDec := nil;
|
||
sDestUrl := StringReplace(MgSvc_.DestServerUrl, 'agentLogRequest.do', 'drmUpload.do', [rfReplaceAll]);
|
||
sDestUrl := StringReplace(sDestUrl, 'agentLogRequests.do', 'drmUpload.do', [rfReplaceAll]);
|
||
|
||
InitHttp;
|
||
sBoundary := Format('%X', [GetLocalIncUtcMin * 6000]);
|
||
HTTP_.Request.ContentType := Format('multipart/form-data; boundary=%s; charset=utf-8', [sBoundary]);
|
||
|
||
Guard(Params, TIdMultiPartFormDataStream.Create);
|
||
with Params.AddFile(sFName, sPath, Format('application/%s', [sExt])) do
|
||
begin
|
||
ContentTransfer := '';
|
||
HeaderEncoding := '8'; //8bit
|
||
HeaderCharSet := 'utf-8';
|
||
Charset := 'utf-8';
|
||
end;
|
||
|
||
sDecPath := CutFileExt(sPath) + '_dec.' + GetFileExt(sFName);
|
||
fsDec := TFileStream.Create(sDecPath, fmCreate);
|
||
try
|
||
HTTP_.Post(sDestUrl, Params, fsDec);
|
||
FreeAndNil(fsDec);
|
||
|
||
if HTTP_.ResponseCode = 200 then
|
||
begin
|
||
MessageBox(Handle, PChar(Format(RS_MsgDecFile+#13+#10+'(Path="%s")', [sDecPath])),
|
||
PChar(Caption), MB_ICONINFORMATION or MB_OK);
|
||
end;
|
||
finally
|
||
if fsDec <> nil then
|
||
FreeAndNil(fsDec);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.ApprovalFileExport(aList: TStrings);
|
||
var
|
||
LogInfo: TLogInfo;
|
||
ReqDevExceptInfo: TReqDevExceptInfo;
|
||
dtCreate, dtModify, dtAccess: TDateTime;
|
||
O, OA, ORst: ISuperObject;
|
||
sPath, sDestAddr, sUrl, sTemp: String;
|
||
i, nExpCnt, nMinMB, nLimitMB: Integer;
|
||
bResult, bSendBin, bFileUp: Boolean;
|
||
llTotalSize: LONGLONG;
|
||
begin
|
||
try
|
||
if aList.Count = 0 then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_NotFoundFile), PChar(APP_TITLE), MB_OK + MB_ICONWARNING);
|
||
exit;
|
||
end;
|
||
|
||
if aList.Count > 5 then
|
||
begin
|
||
MessageBox(Handle, PChar(Format(RS_FileExpoLimit, [5])), PChar(APP_TITLE), MB_OK + MB_ICONWARNING);
|
||
exit;
|
||
end;
|
||
|
||
llTotalSize := 0;
|
||
OA := TSuperObject.Create(stArray);
|
||
for i := 0 to aList.Count - 1 do
|
||
begin
|
||
sPath := aList[i];
|
||
if not FileExists(sPath) then
|
||
continue;
|
||
|
||
if MgSvc_.HasFileExp(sPath) then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_AlreadyApprovFile), PChar(APP_TITLE), MB_OK + MB_ICONWARNING);
|
||
exit;
|
||
end;
|
||
|
||
if not GetFileDateTime_Local(sPath, dtCreate, dtModify, dtAccess) then
|
||
begin
|
||
dtCreate := 0;
|
||
dtModify := 0;
|
||
dtAccess := 0;
|
||
end;
|
||
|
||
O := SO;
|
||
O.S['filePath'] := sPath;
|
||
O.S['createDt'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', dtCreate);
|
||
O.S['modifyDt'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', dtModify);
|
||
O.S['hash'] := GetFileToSha1Str_BS1(sPath);
|
||
OA.AsArray.Add(O);
|
||
|
||
Inc(llTotalSize, GetFileSize_path(sPath));
|
||
end;
|
||
|
||
nMinMB := MgSvc_.ModePolicy.FileExpMinMB;
|
||
nLimitMB := MgSvc_.ModePolicy.FileExpMaxMB;
|
||
bFileUp := (llTotalSize >= (LONGLONG(nMinMB) * 1048576)) and (llTotalSize <= (LONGLONG(nLimitMB) * 1048576));
|
||
if not bFileUp then
|
||
begin
|
||
if MessageBox(Handle, PChar(Format(RS_FileExpReqLimitMsg1 + #13#10 +
|
||
RS_FileExpReqLimitMsg2 + #13#10#13#10 + RS_FileExpReqLimitMsg3,
|
||
[nMinMB, nLimitMB])), PChar(APP_TITLE), MB_YESNO + MB_ICONQUESTION) = IDNO then exit;
|
||
end;
|
||
|
||
nExpCnt := OA.AsArray.Length;
|
||
if nExpCnt > 0 then
|
||
begin
|
||
// 기존에 만들어진 형식에 맞춰서 값을 넣어줌 25_1117 13:34:46 kku
|
||
ZeroMemory(@ReqDevExceptInfo, SizeOf(ReqDevExceptInfo));
|
||
ReqDevExceptInfo.sSerial := OA.AsJSon;
|
||
ReqDevExceptInfo.sDevName := Format('File Export Request(%d)', [nExpCnt]);
|
||
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
LogInfo.sCode := REQUEST_APPROVAL;
|
||
LogInfo.sDevName := ReqDevExceptInfo.sDevName;
|
||
LogInfo.sDevSerial := ReqDevExceptInfo.sSerial;
|
||
if nExpCnt = 1 then
|
||
LogInfo.sPath := OA.AsArray.O[0].S['filePath'];
|
||
LogInfo.sSummary := Format('Approval Request : File Export(%d)', [nExpCnt]);
|
||
|
||
sDestAddr := MgSvc_.DestIPort;
|
||
sUrl := MgSvc_.SendApproval(9, @ReqDevExceptInfo, BooleanToInt(bFileUp, nExpCnt, 0));
|
||
// sUrl := MgSvc_.SendApproval(4, @ReqDevExceptInfo, OA.AsArray.Length);
|
||
if sUrl = '' then
|
||
begin
|
||
TTgTrace.T('Fail .. SendApproval(9)');
|
||
MessageBox(Handle, PChar(RS_NoApprovalInfo), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
end else begin
|
||
ORst := nil;
|
||
if (sUrl <> '') and (sUrl[1] = '{') then
|
||
begin
|
||
// 구 버전 서버 대비 25_1118 10:57:33 kku
|
||
ORst := SO(sUrl);
|
||
sUrl := ORst.S['url'];
|
||
end;
|
||
MgSvc_.SendEventLogEx(@LogInfo, false);
|
||
|
||
sTemp := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sTemp) then
|
||
begin
|
||
O := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_EXECUTE_FILE;
|
||
O.S['Path'] := sDestAddr + sUrl;
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sTemp);
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sTemp, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
end else
|
||
ExecutePath(sDestAddr + sUrl);
|
||
|
||
if bFileUp and (ORst <> nil) then
|
||
begin
|
||
for i := 0 to nExpCnt - 1 do
|
||
begin
|
||
sTemp := OA.AsArray.O[i].S['filePath'];
|
||
|
||
bSendBin := false;
|
||
sUrl := ORst.S['binFileUploadUrl' + IntToStr(i + 1)];
|
||
if sUrl = '' then
|
||
begin
|
||
sUrl := ORst.S['fileUploadUrl' + IntToStr(i + 1)];
|
||
if sUrl = '' then
|
||
break;
|
||
end else begin
|
||
sUrl := sUrl + '&fileName=' + UrlEncodeUTF8(ExtractFileName(sTemp));
|
||
bSendBin := true;
|
||
end;
|
||
|
||
if sUrl[1] = '/' then
|
||
Delete(sUrl, 1, 1);
|
||
|
||
MgSvc_.SendFileNor(bSendBin, 'file', sUrl, sTemp, nMinMB, nLimitMB);
|
||
|
||
TTgTrace.T('[사전] 반출 요청 파일 업로드 .. URL=%s', [sUrl], 2);
|
||
// TTgTrace.T('반출 요청 파일 업로드 .. %s, %d : %s', [BooleanToStr(bResult, 'OK', 'Fail'), i + 1, sTemp], 2);
|
||
TTgTrace.T('[사전] 반출 요청 파일 업로드 .. %d : %s', [i + 1, sTemp], 2);
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. ApprovalFileExport()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.ApprovalFileDecrypt(OA: ISuperObject);
|
||
var
|
||
LogInfo: TLogInfo;
|
||
ReqDevExceptInfo: TReqDevExceptInfo;
|
||
dtCreate, dtModify, dtAccess: TDateTime;
|
||
O, ORst: ISuperObject;
|
||
sPath, sDestAddr, sUrl, sTemp: String;
|
||
i, nExpCnt, nMinMB, nLimitMB: Integer;
|
||
bResult, bSendBin, bFileUp: Boolean;
|
||
llTotalSize: LONGLONG;
|
||
begin
|
||
try
|
||
if OA.AsArray.Length = 0 then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_NotFoundFile), PChar(APP_TITLE), MB_OK + MB_ICONWARNING);
|
||
exit;
|
||
end;
|
||
|
||
if OA.AsArray.Length > 10 then
|
||
begin
|
||
MessageBox(Handle, PChar(Format(RS_FileExpoLimit, [5])), PChar(APP_TITLE), MB_OK + MB_ICONWARNING);
|
||
exit;
|
||
end;
|
||
|
||
llTotalSize := 0;
|
||
for i := OA.AsArray.Length - 1 downto 0 do
|
||
begin
|
||
O := OA.AsArray.O[i];
|
||
sPath := O.S['filePath'];
|
||
if not FileExists(sPath) then
|
||
begin
|
||
OA.AsArray.Delete(i);
|
||
continue;
|
||
end;
|
||
|
||
Inc(llTotalSize, GetFileSize_path(sPath));
|
||
end;
|
||
|
||
nMinMB := MgSvc_.ModePolicy.FileExpMinMB;
|
||
nLimitMB := MgSvc_.ModePolicy.FileExpMaxMB;
|
||
bFileUp := (llTotalSize >= (LONGLONG(nMinMB) * 1048576)) and (llTotalSize <= (LONGLONG(nLimitMB) * 1048576));
|
||
if not bFileUp then
|
||
begin
|
||
if MessageBox(Handle, PChar(Format(RS_FileExpReqLimitMsg1 + #13#10 +
|
||
RS_FileExpReqLimitMsg2 + #13#10#13#10 + RS_FileExpReqLimitMsg3,
|
||
[nMinMB, nLimitMB])), PChar(APP_TITLE), MB_YESNO + MB_ICONQUESTION) = IDNO then exit;
|
||
end;
|
||
|
||
nExpCnt := OA.AsArray.Length;
|
||
if nExpCnt > 0 then
|
||
begin
|
||
// 기존에 만들어진 형식에 맞춰서 값을 넣어줌 25_1117 13:34:46 kku
|
||
ZeroMemory(@ReqDevExceptInfo, SizeOf(ReqDevExceptInfo));
|
||
ReqDevExceptInfo.sSerial := OA.AsJSon;
|
||
ReqDevExceptInfo.sDevName := Format('File Decrypt Request(%d)', [nExpCnt]);
|
||
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
LogInfo.sCode := REQUEST_APPROVAL;
|
||
LogInfo.sDevName := ReqDevExceptInfo.sDevName;
|
||
LogInfo.sDevSerial := ReqDevExceptInfo.sSerial;
|
||
if nExpCnt = 1 then
|
||
LogInfo.sPath := OA.AsArray.O[0].S['filePath'];
|
||
LogInfo.sSummary := Format('Approval Request : File Decrypt(%d)', [nExpCnt]);
|
||
|
||
sDestAddr := MgSvc_.DestIPort;
|
||
sUrl := MgSvc_.SendApproval(3, OA, BooleanToInt(bFileUp, nExpCnt, 0));
|
||
if sUrl = '' then
|
||
begin
|
||
TTgTrace.T('Fail .. SendApproval(3)');
|
||
MessageBox(Handle, PChar(RS_NoApprovalInfo), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
end else begin
|
||
ORst := nil;
|
||
if (sUrl <> '') and (sUrl[1] = '{') then
|
||
begin
|
||
// 구 버전 서버 대비 25_1118 10:57:33 kku
|
||
ORst := SO(sUrl);
|
||
sUrl := ORst.S['url'];
|
||
end;
|
||
MgSvc_.SendEventLogEx(@LogInfo, false);
|
||
|
||
sTemp := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sTemp) then
|
||
begin
|
||
O := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_EXECUTE_FILE;
|
||
O.S['Path'] := sDestAddr + sUrl;
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sTemp);
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sTemp, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
end else
|
||
ExecutePath(sDestAddr + sUrl);
|
||
|
||
if bFileUp and (ORst <> nil) then
|
||
begin
|
||
for i := 0 to nExpCnt - 1 do
|
||
begin
|
||
sTemp := OA.AsArray.O[i].S['filePath'];
|
||
|
||
bSendBin := false;
|
||
sUrl := ORst.S['binFileUploadUrl' + IntToStr(i + 1)];
|
||
if sUrl = '' then
|
||
begin
|
||
sUrl := ORst.S['fileUploadUrl' + IntToStr(i + 1)];
|
||
if sUrl = '' then
|
||
break;
|
||
end else begin
|
||
sUrl := sUrl + '&fileName=' + UrlEncodeUTF8(ExtractFileName(sTemp));
|
||
bSendBin := true;
|
||
end;
|
||
|
||
if sUrl[1] = '/' then
|
||
Delete(sUrl, 1, 1);
|
||
|
||
MgSvc_.SendFileNor(bSendBin, 'file', sUrl, sTemp, nMinMB, nLimitMB);
|
||
|
||
TTgTrace.T('복호화 요청 파일 업로드 .. URL=%s', [sUrl], 2);
|
||
TTgTrace.T('복호화 요청 파일 업로드 .. %d : %s', [i + 1, sTemp], 2);
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. ApprovalFileExport()');
|
||
end;
|
||
end;
|
||
|
||
function GetCbData(aO: ISuperObject; var sBody: String; var sOcrBody: String; var sImgPath: String): Boolean;
|
||
var
|
||
CB: TClipboard;
|
||
hCb: THandle;
|
||
bmp: Vcl.Graphics.TBitmap;
|
||
png: TPngImage;
|
||
sTemp: String;
|
||
nLen: Integer;
|
||
arrFName: array [0..MAX_PATH-1] of WideChar;
|
||
i: Integer;
|
||
bFail,
|
||
// bIsExcel,
|
||
bExtrImg: Boolean;
|
||
nTry: Integer;
|
||
Label
|
||
LB_TryReadCB;
|
||
begin
|
||
Result := false;
|
||
Guard(CB, TClipboard.Create);
|
||
nTry := 0;
|
||
// bIsExcel := aO.B['IsExcel2'];
|
||
|
||
LB_TryReadCB :
|
||
bFail := false;
|
||
try
|
||
bExtrImg := not aO.B['IgrImgCB'];
|
||
if CB.HasFormat(CF_UNICODETEXT) then
|
||
begin
|
||
// if CB.GetSize < 10000 then
|
||
// begin
|
||
sTemp := Trim(CB.AsText);
|
||
|
||
// if bIsExcel then
|
||
// begin
|
||
// nLen := Length(sTemp);
|
||
// if nLen > 10000 then
|
||
// begin
|
||
// bExtrImg := false;
|
||
// SetLength(sTemp, 5000);
|
||
// sTemp := sTemp + Format(' ... (OrgSize=%d)', [InsertPointComma(nLen, 3)]);
|
||
// end;
|
||
// end;
|
||
|
||
if sTemp <> '' then
|
||
sBody := sTemp;
|
||
// end else
|
||
// bExtrImg := false;
|
||
end else
|
||
if CB.HasFormat(CF_TEXT) then
|
||
begin
|
||
// if CB.GetSize < 10000 then
|
||
// begin
|
||
sTemp := Trim(CB.AsText);
|
||
|
||
// if bIsExcel then
|
||
// begin
|
||
// nLen := Length(sTemp);
|
||
// if nLen > 10000 then
|
||
// begin
|
||
// bExtrImg := false;
|
||
// SetLength(sTemp, 5000);
|
||
// sTemp := sTemp + Format(' ... (OrgSize=%d)', [InsertPointComma(nLen, 3)]);
|
||
// end;
|
||
// end;
|
||
|
||
if sTemp <> '' then
|
||
sBody := sTemp;
|
||
// end else
|
||
// bExtrImg := false;
|
||
end else
|
||
if CB.HasFormat(CF_HDROP) then
|
||
begin
|
||
sTemp := '';
|
||
hCb := CB.GetAsHandle(CF_HDROP);
|
||
if hCb <> 0 then
|
||
begin
|
||
GlobalLock(hCb);
|
||
try
|
||
nLen := DragQueryFile(hCb, DWORD(-1), nil, MAX_PATH);
|
||
for i := 0 to nLen - 1 do
|
||
begin
|
||
if DragQueryFile(hCb, i, arrFName, MAX_PATH) <> 0 then
|
||
SumString(sTemp, arrFName, '|');
|
||
end;
|
||
finally
|
||
GlobalUnlock(hCb);
|
||
end;
|
||
end;
|
||
|
||
if sTemp <> '' then
|
||
sBody := sTemp;
|
||
end;
|
||
|
||
if bExtrImg and CB.HasFormat(CF_BITMAP) then
|
||
begin
|
||
hCb := CB.GetAsHandle(CF_BITMAP);
|
||
if hCb <> 0 then
|
||
begin
|
||
GlobalLock(hCb);
|
||
try
|
||
try
|
||
Guard(bmp, Vcl.Graphics.TBitmap.Create);
|
||
bmp.LoadFromClipboardFormat(CF_BITMAP, hCb, CB.GetAsHandle(CF_PALETTE));
|
||
|
||
Guard(png, TPngImage.Create);
|
||
png.Assign(bmp);
|
||
|
||
sTemp := 'C:\ProgramData\HE\Task\';
|
||
if ForceDirectories(sTemp) then
|
||
begin
|
||
sTemp := sTemp + FormatDateTime('yyyymmddhhnnss', Now) + '.png';
|
||
png.SaveToFile(sTemp);
|
||
if FileExists(sTemp) then
|
||
begin
|
||
sImgPath := sTemp;
|
||
if aO.B['DoClipOcr'] then
|
||
sOcrBody := ExtrTextFromImage(sImgPath);
|
||
end;
|
||
end else begin
|
||
TTgTrace.T('Fail .. GetCbData() .. creatDir');
|
||
exit;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(E, 'Fail .. GetCbData() .. make image', 2);
|
||
end;
|
||
finally
|
||
GlobalUnlock(hCb);
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
Result := true;
|
||
except
|
||
on E: EClipboardException do
|
||
bFail := true;
|
||
|
||
on E: Exception do
|
||
ETgException.TraceException(E, 'Fail .. GetCbData()');
|
||
end;
|
||
|
||
if bFail then
|
||
begin
|
||
if nTry < 5 then
|
||
begin
|
||
Inc(nTry);
|
||
Sleep(500);
|
||
goto LB_TryReadCB;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.OnClipboardNotify(Sender: TDrawClipboard);
|
||
var
|
||
bIsExcel: Boolean;
|
||
LogInfo: TLogInfo;
|
||
PO: TPrefModel;
|
||
hActive: HWND;
|
||
|
||
procedure ReqCbData;
|
||
var
|
||
bBlock: Boolean;
|
||
begin
|
||
var sExe: String := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
var O: ISuperObject := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_REQ_CLIPBOARD_DATA;
|
||
// O.B['IsExcel'] := bIsExcel;
|
||
// O.B['IsExcel2'] := CompareText(sLastCbAppName_, 'excel.exe') = 0;
|
||
O.B['IgrImgCB'] := (CUSTOMER_TYPE = CUSTOMER_TMAP) and bIsExcel; // CB 원문 수집 시 이미지 제외 24_0520 11:18:31 kku
|
||
O.B['DoClipOcr'] := MgSvc_.ModePolicy.DoClipOcr;
|
||
O.S['WndCap'] := LogInfo.sDevName;
|
||
O.S['AName'] := LogInfo.sAppName;
|
||
O.S['APath'] := LogInfo.sAppPath;
|
||
O.I['AWnd'] := hActive;
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sExe);
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
end;
|
||
end;
|
||
|
||
var
|
||
dtNow: TDateTime;
|
||
nTryCnt: Integer;
|
||
sMsg, sCttResults,
|
||
sPName, sPPath: String;
|
||
bBlock,
|
||
bCollectAble: Boolean;
|
||
begin
|
||
if bIsClearCB_ then
|
||
exit;
|
||
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
bIsExcel := false;
|
||
sCttResults := '';
|
||
bCollectAble := false;
|
||
|
||
// 클립보드 감시는 스레드로 옮기면 안된다 22_0818 13:22:42 kku
|
||
if (MgSvc_ = nil) or (MgSvc_.PrefModel = nil) then
|
||
exit;
|
||
|
||
PO := MgSvc_.ModePolicy;
|
||
if PO.ClipBlockKind = cbkNone then
|
||
exit;
|
||
|
||
// 모드 변경 후 1초동안은 무시한다 23_0112 08:12:05 kku
|
||
dtNow := Now;
|
||
if MilliSecondsBetween(MgSvc_.ChangeModeDT, dtNow) <= 1500 then
|
||
exit;
|
||
|
||
// vdi, 원격 환경에서 Ctrl + C 입력을 연속 두번하면 원격환경 클립보드에 들어가는데
|
||
// 이 경우는 차단 할 수 없어서 아래처럼 두번연속 못누르게 보완함 23_0518 14:39:41 kku
|
||
if (KeyMonDll_ <> nil) and (CUSTOMER_TYPE = CUSTOMER_TMAP) and (dwBlockInputCTick_ = 0) then
|
||
begin
|
||
// KeyMonDll_.SetDisableKey_Ctrl(true); // 추가 24_0712 14:47:52 kku
|
||
KeyMonDll_.SetDisableKey_Etc(0, 67); // c 키 연속으로 못누르게 막음 23_0518 14:21:05 kku
|
||
dwBlockInputCTick_ := GetTickCount;
|
||
end;
|
||
|
||
// 이렇게 비었지는 판단하면 엑셀에서 크러쉬 나서 뒤짐 22_0714 09:17:31 kku
|
||
// 그리고 대량으로 클립보드에 복사 시 문제될 여지가 큼
|
||
// if Sender.AsText > 0 then
|
||
begin
|
||
// sPPath := GetProcessPathFromWndHandle(GetForegroundWindow); // 이거 때문에 느려지는 PC가 있다... TYM 24_0521 15:42:30 kku
|
||
// sPName := ExtractFileName(sPPath);
|
||
// sPPath := ExtractFilePath(sPPath);
|
||
|
||
hActive := GetForegroundWindow;
|
||
sPName := GetProcessNameFromWndHandle(hActive);
|
||
if sPName = '' then
|
||
sPName := 'Windows System'; // 빈값 채우기... 추가 24_0704 10:25:05 kku
|
||
sPPath := '';
|
||
|
||
// if sPName = EXE_HE then // 에이전트 예외 제거 23_1228 13:34:12 kku
|
||
// exit;
|
||
bIsExcel := CompareText(sPName, 'excel.exe') = 0;
|
||
|
||
LogInfo.sDevName := GetWindowCaption(hActive);
|
||
LogInfo.sAppName := sPName;
|
||
LogInfo.sAppPath := sPPath;
|
||
|
||
if sCbAbleApps_ <> PO.ClipboardExceptApp then
|
||
begin
|
||
sCbAbleApps_ := PO.ClipboardExceptApp;
|
||
SplitString(sCbAbleApps_, ';', CbAbleAppList_);
|
||
end;
|
||
|
||
if sCbCollectApps_ <> PO.CBCollectApp then
|
||
begin
|
||
sCbCollectApps_ := PO.CBCollectApp;
|
||
SplitString(sCbCollectApps_, ';', CbCollectAppList_);
|
||
end;
|
||
|
||
if PO.IsClipboardExcept and (CbAbleAppList_.Count > 0) then
|
||
begin
|
||
if (sPName <> '') and (CbAbleAppList_.IndexOf(sPName) <> -1) then
|
||
begin
|
||
// 엑셀에서 먹통되는 현상이 생겨서 아래처럼 처리 22_1017 14:47:16 kku
|
||
bIgrNextCbNoti_ := true;
|
||
MgSvc_.DoClipboardUpdate;
|
||
// Sender.Reset;
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
// 허용 이후에 미허용 앱에 포커스가 가면 무조건 차단 팝업이 뜨는 문제가 있어서 보완 22_1017 15:09:22 kku
|
||
bIgrNextCbNotiExcel_ := bIgrNextCbNotiExcel_ and bIsExcel;
|
||
if bIgrNextCbNoti_ or bIgrNextCbNotiExcel_ then
|
||
begin
|
||
bIgrNextCbNoti_ := false;
|
||
bIgrNextCbNotiExcel_ := false;
|
||
dtRecentCbPopup_ := dtNow;
|
||
exit;
|
||
end;
|
||
|
||
bCollectAble := PO.CbCF.bActive or
|
||
( PO.IsCBCollect and
|
||
((CbCollectAppList_.IndexOf(sPName) <> -1) or bForceCollectCB_) );
|
||
if bCollectAble then
|
||
begin
|
||
if bIsExcel and bCtrlA_ then // 엑셀에서 대량의 셀 복사시 프리징 현상 보완을 위함 23_1107 08:16:30 kku
|
||
begin
|
||
// 전체 해제 풀어주기
|
||
// var pt: TPoint;
|
||
// // 마우스 포인터 위치 가져오기
|
||
// GetCursorPos(pt);
|
||
// // 활성화된 창의 클라이언트 좌표로 변환
|
||
// WinAPi.Windows.ScreenToClient(hActive, pt);
|
||
// // 마우스 왼쪽 버튼 누름 이벤트 전달
|
||
// PostMessage(hActive, WM_LBUTTONDOWN, MK_LBUTTON, (pt.y shl 16) or pt.x);
|
||
// // 마우스 왼쪽 버튼 뗌 이벤트 전달
|
||
// PostMessage(hActive, WM_LBUTTONUP, 0, (pt.y shl 16) or pt.x);
|
||
// bCtrlA_ := false;
|
||
|
||
LogInfo.sBody := 'Ctrl + A 후 클립보드 복사 감지됨';
|
||
// 이유는 모르겠지만 엑셀에서 키 입력할때 클립보드 감지가 한번더 발생한다...
|
||
bIgrNextCbNotiExcel_ := true;
|
||
end else begin
|
||
// KeyMonDll_.SetDisableKey_Ctrl(true); // 추가 24_0712 14:47:52 kku
|
||
if (CUSTOMER_TYPE = CUSTOMER_WINSTN) then
|
||
// (CompareText('Photos.exe', sPName) = 0) then
|
||
begin
|
||
KeyMonDll_.SetDisableKey_Etc(0, 86); // 바로 붙혀넣기 안되게 막음 23_0912 16:07:52 kku
|
||
dwBlockInputCTick_ := GetTickCount;
|
||
end;
|
||
// KeyMonDll_.SetDisableKey_Etc(0, 67); // 바로 복사 안되게 막음 24_0712 14:42:33 kku
|
||
// dwBlockInputCTick_ := GetTickCount;
|
||
ReqCbData;
|
||
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
// 스크린캡처키 눌린뒤 2번째 이벤트 무시하기 위해 처리 23_1228 13:49:14 kku
|
||
if (dtRecentPrtScrKey_ > 0) and
|
||
(MilliSecondsBetween(dtRecentPrtScrKey_, dtNow) < 1000) then exit;
|
||
|
||
bBlock := PO.ClipBlockKind = cbkBlock;
|
||
if bScrCapKey_ and PO.IsIgrScrCapKeyCB then
|
||
begin
|
||
bBlock := false;
|
||
if not bForceCollectCB_ then
|
||
begin
|
||
bScrCapKey_ := false;
|
||
dtRecentPrtScrKey_ := Now;
|
||
end;
|
||
end;
|
||
|
||
if bBlock then
|
||
begin
|
||
// if bIsExcel then
|
||
// begin
|
||
// // 엑셀이면 셀 선택 해제 24_0716 16:12:46 kku
|
||
// keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
|
||
//// PressKey(VK_ESCAPE);
|
||
// PostMessage(hActive, WM_KEYDOWN, VK_ESCAPE, 0);
|
||
// PostMessage(hActive, WM_KEYUP, VK_ESCAPE, 0);
|
||
// end;
|
||
|
||
// 클립보드가 열리지 않는 경우가 있다.
|
||
// 4초간 시도 해보는걸로 보완 22_0715 09:03:33 kku
|
||
nTryCnt := 0;
|
||
bIsClearCB_ := true;
|
||
try
|
||
while not ClearClipboard(MgSvc_.ModePolicy.CbImgBlock) do
|
||
begin
|
||
Inc(nTryCnt);
|
||
if nTryCnt > 20 then
|
||
begin
|
||
// TTgTrace.T('Fail .. ClearClipboard()');
|
||
exit;
|
||
end;
|
||
Sleep(200);
|
||
end;
|
||
finally
|
||
bIsClearCB_ := false;
|
||
end;
|
||
end;
|
||
|
||
// 최대 1초에 한번만 뜨게 함 22_0714 09:12:57 kku
|
||
// 클립보드 사용 이벤트 후 클리어 하면 두번 연속으로 떠서 이렇게 보완함
|
||
if (MilliSecondsBetween(dtRecentCbPopup_, dtNow) > 1000) then
|
||
begin
|
||
// 차단 시 두번째 오는거 걸러준다 23_0828 17:38:24 kku
|
||
// if MgSvc_.IsNewApi and bCollectAble then
|
||
// begin
|
||
// if (LogInfo.sBody = '') and (LogInfo.sOcrBody = '') then
|
||
// exit;
|
||
// end;
|
||
|
||
// if MgSvc_.IsNewApi and PO.CbCF.bActive and (sCttResults = '') then
|
||
// exit;
|
||
|
||
dtRecentCbPopup_ := dtNow;
|
||
|
||
// if CUSTOMER_TYPE = CUSTOMER_DEMO then // SK 하이닉스에서 크롬만 두번 뜨는문제 뭉게기 23_0511 16:07:22 kku
|
||
// begin
|
||
// if CompareText(sPName, 'chrome.exe') = 0 then
|
||
// begin
|
||
// if bPopChromeSK_ then
|
||
// begin
|
||
// bPopChromeSK_ := false;
|
||
// exit;
|
||
// end else
|
||
// bPopChromeSK_ := true;
|
||
// end;
|
||
// end;
|
||
|
||
if tUpdateLogo.Enabled then
|
||
begin
|
||
// 상시로고 업데이트 대기 상태면 바로 업데이트 되도록 조치 24_0411 14:46:28 kku
|
||
tUpdateLogo.Enabled := false;
|
||
UpdateScreenLogo;
|
||
end;
|
||
|
||
if bBlock then
|
||
begin
|
||
if Po.CbPopup then
|
||
MgSvc_.PopupMessage(TYPE_MSG_PREVENT_CLIPBOARD, sPName + '|' + sCttResults);
|
||
|
||
if sPName <> '' then
|
||
sMsg := Format('Clipboard Blocked : %s', [sPName])
|
||
else
|
||
sMsg := 'Clipboard Blocked';
|
||
|
||
LogInfo.sCode := LOGCODE_PREVENT_CLIPBOARD;
|
||
end else begin
|
||
if Po.CbPopup and (PO.ClipBlockKind <> cbkBlock) then
|
||
MgSvc_.PopupMessage(TYPE_MSG_PREVENT_CLIPBOARD, sPName + '|M' + '|' + sCttResults);
|
||
|
||
if sPName <> '' then
|
||
sMsg := Format('Clipboard : %s', [sPName])
|
||
else
|
||
sMsg := 'Clipboard';
|
||
|
||
LogInfo.sCode := MONITOR_CLIPBOARD;
|
||
end;
|
||
|
||
if MgSvc_.IsNewApi then
|
||
begin
|
||
LogInfo.sSummary := sMsg;
|
||
MgSvc_.SendEventLogEx(@LogInfo, false);
|
||
end else
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, LogInfo.sCode, sMsg);
|
||
end;
|
||
|
||
// Remotecall 에서 원격 "시작하기" 누르면 클립보드 체인이 꼬인다..
|
||
// 그래서 계속 Draw 메시지가 발동하고 결국 먹통이 되는 현상이 있는데...
|
||
// 아래 처리 추가해서 해결했다.. 찝찝하긴 하지만 일단 잘되니까 놔둠... 22_0718 15:56:23 kku
|
||
if (Sender <> nil) and not (bIsExcel and bCtrlA_) then
|
||
Sender.Reset;
|
||
|
||
// MgSvc_.DoClipboardUpdate;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miEncDrmFileClick(Sender: TObject);
|
||
var
|
||
sExe: String;
|
||
O: ISuperObject;
|
||
ProcInfo: TProcessInformation;
|
||
Label
|
||
LB_Direct;
|
||
begin
|
||
if not MgSvc_.VulService.IsVpnOn then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_MsgEncInSecuMode),
|
||
PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
if not MgSvc_.Connected then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_NoConnectServer+#13+#10+RS_WaitRetry),
|
||
PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
try
|
||
sExe := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
O := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_SELECT_FILE;
|
||
O.I['Ctrl'] := 1;
|
||
O.S['Filter'] := 'All files|*.*';
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
ProcInfo := ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
if ProcInfo.dwProcessId = 0 then
|
||
goto LB_Direct;
|
||
end else begin
|
||
LB_Direct :
|
||
OpenDialogDRM.FileName := '';
|
||
if MgSvc_.Domain <> '' then
|
||
begin
|
||
var sPath: String := 'C:\Users\' + ExtractFileName(MgSvc_.Domain) + '\Desktop';
|
||
if DirectoryExists(sPath) then
|
||
OpenDialogDRM.InitialDir := sPath;
|
||
end;
|
||
|
||
OpenDialogDRM.Filter := 'All files|*.*';
|
||
if OpenDialogDRM.Execute(Handle) then
|
||
begin
|
||
EncFile(OpenDialogDRM.FileName);
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. miEncDrmFileClick()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miOfflineExpClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgOfflineAuth;
|
||
begin
|
||
if FindWindow('TDlgOfflineAuth', nil) <> 0 then
|
||
exit;
|
||
|
||
dlg := TDlgOfflineAuth.Create(nil);
|
||
dlg.Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miOpenDrmFileClick(Sender: TObject);
|
||
var
|
||
sExe: String;
|
||
O: ISuperObject;
|
||
ProcInfo: TProcessInformation;
|
||
Label
|
||
LB_Direct;
|
||
begin
|
||
if not MgSvc_.VulService.IsVpnOn then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_MsgEncInSecuMode),
|
||
PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
if not MgSvc_.Connected then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_NoConnectServer+#13+#10+RS_WaitRetry),
|
||
PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
try
|
||
sExe := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
O := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_SELECT_FILE;
|
||
O.I['Ctrl'] := 2;
|
||
O.S['Filter'] := 'All files|*.*';
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
ProcInfo := ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
if ProcInfo.dwProcessId = 0 then
|
||
goto LB_Direct;
|
||
end else begin
|
||
LB_Direct :
|
||
OpenDialogDRM.FileName := '';
|
||
if MgSvc_.Domain <> '' then
|
||
begin
|
||
var sPath: String := 'C:\Users\' + ExtractFileName(MgSvc_.Domain) + '\Desktop';
|
||
if DirectoryExists(sPath) then
|
||
OpenDialogDRM.InitialDir := sPath;
|
||
end;
|
||
|
||
OpenDialogDRM.Filter := 'All files|*.*';
|
||
if OpenDialogDRM.Execute(Handle) then
|
||
begin
|
||
DecFile(OpenDialogDRM.FileName);
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. miEncDrmFileClick()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgAvInfoClick(Sender: TObject);
|
||
var
|
||
StrList: TStringList;
|
||
i: Integer;
|
||
dlg: TDlgLiteInfo;
|
||
pt: TPoint;
|
||
begin
|
||
Guard(StrList, TStringList.Create);
|
||
if MgSvc_.VulService.AvList <> nil then
|
||
begin
|
||
with MgSvc_.VulService do
|
||
begin
|
||
for i := 0 to AvList.Count - 1 do
|
||
StrList.Add(Format('%s ( %s :: %s )'#13#10, [AvList[i].Name, AvList[i].Status, AvList[i].AppType]));
|
||
end;
|
||
|
||
if StrList.Text = '' then
|
||
StrList.Text := '(none)';
|
||
end else
|
||
StrList.Text := RS_LodingInfo;
|
||
dlg := TDlgLiteInfo.Create(Self);
|
||
dlg.SetInfo(RS_AvInfo, StrList);
|
||
|
||
pt.X := imgAvInfo.Left;
|
||
pt.Y := imgAvInfo.Top;
|
||
pt := pnMain.ClientToScreen(pt);
|
||
dlg.Left := pt.X - dlg.Width;
|
||
dlg.Top := pt.Y - dlg.Height;
|
||
|
||
dlg.Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgChangeEmpNoClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgInputEmpNo;
|
||
begin
|
||
if FindWindow('TDlgInputEmpNo', nil) <> 0 then
|
||
exit;
|
||
|
||
InitHttp;
|
||
dlg := TDlgInputEmpNo.Create(Self, HTTP_);
|
||
dlg.Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgCloseClick(Sender: TObject);
|
||
begin
|
||
{$IFDEF DEBUG}
|
||
if DebugHook <> 0 then
|
||
begin
|
||
Close;
|
||
Application.MainForm.Close;
|
||
end else
|
||
{$ENDIF}
|
||
VisibleMainform(false);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgCloseMouseEnter(Sender: TObject);
|
||
begin
|
||
if Sender is TImage then
|
||
SetImgBtn(imgUpBtnList, TImage(Sender), TImage(Sender).Tag + 1);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgCloseMouseLeave(Sender: TObject);
|
||
begin
|
||
if Sender is TImage then
|
||
SetImgBtn(imgUpBtnList, TImage(Sender), TImage(Sender).Tag);
|
||
end;
|
||
|
||
function TDlgeCrmHeMain.SetAipLabel(sPath: String; sAipLabelId: String): Boolean;
|
||
var
|
||
h: HWND;
|
||
n: Integer;
|
||
begin
|
||
// _Trace('SetAipLabel() .. Path=%s', [sPath]);
|
||
|
||
Result := false;
|
||
h := MgSvc_.FindAipMdWnd;
|
||
if h <> 0 then
|
||
begin
|
||
var sEncPath: String := ConvAipEncExt(GetRunExePathDir + 'Data\' + Format('%d-dc_%s', [GetTickCount, ExtractFileName(sPath)]));
|
||
// var sEncPath: String:= CttSchOpt_.sTaskDir + ExtractFileName(sPath);
|
||
|
||
var O: ISuperObject := SO;
|
||
O.S['src'] := sPath;
|
||
O.S['dst'] := sEncPath;
|
||
if sAipLabelId = '' then
|
||
sAipLabelId := '9877e059-3e04-4eba-ad87-888eb0c7e9ba'; // HEC 대외비 개인정보
|
||
O.S['lid'] := sAipLabelId;
|
||
if (MgSvc_ <> nil) and (MgSvc_.Email <> '') then
|
||
O.S['mail'] := gMgSvc.Email;
|
||
|
||
// 0 : 레이블 추출, 1 : 암호화, 2 : 복호화, 3 : 암호화 확인, 4 : 레이블 확인, 5 : 레이블 설정
|
||
n := SendData(h, 5, O.AsString);
|
||
if (n = 10) and FileExists(sEncPath) then
|
||
begin
|
||
if DeleteFileForce(sPath) then
|
||
begin
|
||
var sCpPath: String := sPath;
|
||
if CheckMsPfileExt(sPath) then
|
||
begin
|
||
if CheckAipEncSign(sEncPath) then
|
||
sCpPath := sCpPath + '.pfile';
|
||
end else
|
||
sCpPath := CutFileExt(sCpPath) + '.' + GetFileExt(sEncPath);
|
||
|
||
if CopyFile(PChar(sEncPath), PChar(sCpPath), false) then // 이거 실패 대비를 해야 할까... 23_1024 09:04:08 kku
|
||
Result := true;
|
||
end;
|
||
end;
|
||
// else
|
||
// if (SendData(h, 1, O.AsString) = 10) and FileExists(sEncPath) then
|
||
// begin
|
||
// // 레이블 설정 실패하면 암호화 하도록 추가 23_1028 23:31:13 kku
|
||
// if DeleteFileForce(sPath) then
|
||
// begin
|
||
// if CopyFile(PChar(sEncPath), PChar(sPath), false) then // 이거 실패 대비를 해야 할까... 23_1024 09:04:08 kku
|
||
// Result := true;
|
||
// end;
|
||
// end;
|
||
DeleteFile(PChar(sEncPath));
|
||
|
||
if MgSvc_.PrefModel.AipEncMSec > 0 then
|
||
Sleep(MgSvc_.PrefModel.AipEncMSec);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgCttSchMouseEnter(Sender: TObject);
|
||
var
|
||
img: TImage;
|
||
begin
|
||
if Sender = nil then
|
||
exit;
|
||
|
||
if Sender is TImage then
|
||
img := TImage(Sender)
|
||
else if Sender = lbCttSch then
|
||
img := imgCttSch
|
||
else
|
||
img := imgCttSchRst;
|
||
|
||
if img.Enabled then
|
||
begin
|
||
if img = imgCttSch then
|
||
lbCttSch.Font.Color := clBlack
|
||
else
|
||
lbCttSchRst.Font.Color := clBlack;
|
||
img.Picture.Assign(imgMainList.Items[5].PngImage);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgCttSchMouseLeave(Sender: TObject);
|
||
var
|
||
img: TImage;
|
||
begin
|
||
if Sender = nil then
|
||
exit;
|
||
|
||
if Sender is TImage then
|
||
img := TImage(Sender)
|
||
else if Sender = lbCttSch then
|
||
img := imgCttSch
|
||
else
|
||
img := imgCttSchRst;
|
||
|
||
if img.Enabled then
|
||
begin
|
||
if img = imgCttSch then
|
||
lbCttSch.Font.Color := $00DB6646
|
||
else
|
||
lbCttSchRst.Font.Color := $00DB6646;
|
||
img.Picture.Assign(imgMainList.Items[4].PngImage);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgFwInfoClick(Sender: TObject);
|
||
var
|
||
StrList: TStringList;
|
||
i: Integer;
|
||
dlg: TDlgLiteInfo;
|
||
pt: TPoint;
|
||
begin
|
||
Guard(StrList, TStringList.Create);
|
||
if MgSvc_.VulService.FwList <> nil then
|
||
begin
|
||
with MgSvc_.VulService do
|
||
begin
|
||
for i := 0 to FwList.Count - 1 do
|
||
StrList.Add(Format('%s ( %s :: %s )'#13#10, [FwList[i].Name, FwList[i].Status, FwList[i].AppType]));
|
||
end;
|
||
|
||
if StrList.Text = '' then
|
||
StrList.Text := '(none)';
|
||
end else
|
||
StrList.Text := RS_LodingInfo;
|
||
|
||
dlg := TDlgLiteInfo.Create(Self);
|
||
dlg.SetInfo(RS_FwInfo, StrList);
|
||
|
||
pt.X := imgFwInfo.Left;
|
||
pt.Y := imgFwInfo.Top;
|
||
pt := pnMain.ClientToScreen(pt);
|
||
dlg.Left := pt.X - dlg.Width;
|
||
dlg.Top := pt.Y - dlg.Height;
|
||
|
||
dlg.Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.UpdateLangName(nLang: Integer);
|
||
begin
|
||
case nLang of
|
||
$0412 : lbLang.Caption := 'KOR';
|
||
$0409 : lbLang.Caption := 'ENG';
|
||
$0411 : lbLang.Caption := 'JPN';
|
||
$0804 : lbLang.Caption := 'CHN'; // 간체, 중국 본토(중국 대륙)에서 사용하는 간체자
|
||
$0404 : lbLang.Caption := 'CHT'; // 번체, 대만, 홍콩, 마카오 등에서 사용하는 번체자
|
||
$0419 : lbLang.Caption := 'RUS';
|
||
$0443 : lbLang.Caption := 'UZB';
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.OnSetLangClick(aSender: TObject);
|
||
var
|
||
item: TMenuItem;
|
||
ini: TIniFile;
|
||
begin
|
||
if aSender is TMenuItem then
|
||
begin
|
||
item := TMenuItem(aSender);
|
||
if item.Checked then
|
||
exit;
|
||
FreeLocalizer.LanguageFile := Format(FILE_LANG_FMT, [item.Tag]);
|
||
UpdateLangName(item.Tag);
|
||
Guard(ini, TIniFile.Create(GetRunExePathDir + INI_HE));
|
||
ini.WriteInteger('Lang', 'SetLang', item.Tag);
|
||
RefreshView;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgLangClick(Sender: TObject);
|
||
var
|
||
sLangDir,
|
||
sCurrLangFile: String;
|
||
pt: TPoint;
|
||
|
||
procedure AddLangItem(dwLangId: DWORD; sLangName: String);
|
||
var
|
||
sFName: String;
|
||
item: TMenuItem;
|
||
begin
|
||
sFName := Format(FILE_LANG_FMT, [dwLangId]);
|
||
if FileExists(sLangDir + sFName) then
|
||
begin
|
||
item := TMenuItem.Create(popLang);
|
||
item.Caption := sLangName;
|
||
item.Tag := dwLangId;
|
||
item.Checked := CompareText(sCurrLangFile, sFName) = 0;
|
||
item.OnClick := OnSetLangClick;
|
||
popLang.Items.Add(item);
|
||
end;
|
||
end;
|
||
|
||
begin
|
||
popLang.Items.Clear;
|
||
sLangDir := IncludeTrailingPathDelimiter(FreeLocalizer.LanguageDir);
|
||
if not DirectoryExists(sLangDir) then
|
||
exit;
|
||
|
||
sCurrLangFile := ExtractFileName(FreeLocalizer.LanguageFile);
|
||
if IsCJ_Affiliates then
|
||
begin
|
||
AddLangItem($0412, 'KOR');
|
||
AddLangItem($0409, 'ENG');
|
||
AddLangItem($0411, 'JPN');
|
||
AddLangItem($0804, 'CHN');
|
||
AddLangItem($0404, 'CHT');
|
||
AddLangItem($0419, 'RUS');
|
||
AddLangItem($0443, 'UZB');
|
||
end else begin
|
||
AddLangItem($0412, '한국어');
|
||
AddLangItem($0409, 'English');
|
||
AddLangItem($0411, '日本語');
|
||
AddLangItem($0804, '中国人');
|
||
AddLangItem($0404, '中國人');
|
||
AddLangItem($0419, 'Русский язык');
|
||
AddLangItem($0443, 'Oʻzbek tili');
|
||
end;
|
||
|
||
pt.X := imgLang.Left;
|
||
pt.Y := imgLang.Top + imgLang.Height;
|
||
pt := pnMain.ClientToScreen(pt);
|
||
popLang.Popup(pt.X, pt.Y);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgLangMouseEnter(Sender: TObject);
|
||
begin
|
||
lbLang.Font.Color := $00635653;
|
||
SetImgBtn(imgLangList, imgLang, 1);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgLangMouseLeave(Sender: TObject);
|
||
begin
|
||
lbLang.Font.Color := clWhite;
|
||
SetImgBtn(imgLangList, imgLang, 0);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgMainMouseDown(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
begin
|
||
if imgExpend.Enabled then
|
||
begin
|
||
ReleaseCapture;
|
||
SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgOsInfoClick(Sender: TObject);
|
||
begin
|
||
ExecutePath_hide('cmd.exe', PARAM_GO_SYSTEMINFO);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgOsInfoMouseDown(Sender: TObject;
|
||
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
||
begin
|
||
if Sender is TImage then
|
||
SetImgBtn(imgBtnList, TImage(Sender), 2);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgOsInfoMouseUp(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
begin
|
||
if Sender is TImage then
|
||
SetImgBtn(imgBtnList, TImage(Sender), 1);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgOsPchInfoClick(Sender: TObject);
|
||
var
|
||
StrList: TStringList;
|
||
i: Integer;
|
||
dlg: TDlgLiteInfo;
|
||
pt: TPoint;
|
||
begin
|
||
i := GetOsPatchCheckTerm;
|
||
if i = 0 then
|
||
exit;
|
||
|
||
Guard(StrList, TStringList.Create);
|
||
if MgSvc_.AgentModel.LastOsPatchDT <> 0 then
|
||
begin
|
||
StrList.Add(Format('%s : %s', [RS_RecentDtPatchOS, DateTimeToStr(MgSvc_.AgentModel.LastOsPatchDT)]));
|
||
if DaysBetween(MgSvc_.AgentModel.LastOsPatchDT, Now) < i then
|
||
begin
|
||
StrList.Add(Format('%s : %s', [RS_RemainOsCheckTime, ConvSecBetweenToProgTime(Now, IncDay(MgSvc_.AgentModel.LastOsPatchDT, i))]))
|
||
end else begin
|
||
if not MgSvc_.IsPatchUptoDate then
|
||
StrList.Add(RS_OsPatchAble)
|
||
else
|
||
StrList.Add(RS_CheckingOsPatch);
|
||
end;
|
||
end else begin
|
||
StrList.Add(Format('%s : (none)', [RS_RecentDtPatchOS]));
|
||
if not MgSvc_.IsPatchUptoDate then
|
||
StrList.Add(RS_OsPatchAble)
|
||
else
|
||
StrList.Add(RS_CheckingOsPatch);
|
||
end;
|
||
|
||
dlg := TDlgLiteInfo.Create(Self);
|
||
dlg.SetInfo(RS_OsPatchInfo, StrList);
|
||
|
||
pt.X := imgOsPchInfo.Left;
|
||
pt.Y := imgOsPchInfo.Top;
|
||
pt := pnMain.ClientToScreen(pt);
|
||
dlg.Left := pt.X - dlg.Width;
|
||
dlg.Top := pt.Y - dlg.Height;
|
||
|
||
dlg.Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.imgPwDateInfoClick(Sender: TObject);
|
||
var
|
||
StrList: TStringList;
|
||
i: Integer;
|
||
dlg: TDlgLiteInfo;
|
||
pt: TPoint;
|
||
dtLast: TDateTime;
|
||
begin
|
||
if (MgSvc_ = nil) or (MgSvc_.ComName = '') then
|
||
exit;
|
||
|
||
dtLast := GetLastChangePasswordDT(MgSvc_.ComName, ExtractFileName(MgSvc_.Domain));
|
||
if dtLast = 0 then
|
||
exit;
|
||
|
||
Guard(StrList, TStringList.Create);
|
||
StrList.Add(RS_PwLastDate + DateTimeToStr(dtLast));
|
||
i := DaysBetween(Now, dtLast);
|
||
if MgSvc_.PrefModel.PwChkTermDay > i then
|
||
StrList.Add(Format(RS_MsgPwChgUntil, [MgSvc_.PrefModel.PwChkTermDay - i]))
|
||
else
|
||
StrList.Add(RS_MsgPwChg);
|
||
|
||
dlg := TDlgLiteInfo.Create(Self);
|
||
dlg.SetInfo(lbPW.Caption, StrList);
|
||
|
||
pt.X := imgPwDateInfo.Left;
|
||
pt.Y := imgPwDateInfo.Top;
|
||
pt := pnMain.ClientToScreen(pt);
|
||
dlg.Left := pt.X - dlg.Width;
|
||
dlg.Top := pt.Y - dlg.Height;
|
||
|
||
dlg.Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miScreenLockClick(Sender: TObject);
|
||
begin
|
||
LockScreen;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miViewSchPersonalInfoClick(Sender: TObject);
|
||
begin
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
|
||
if not MgSvc_.IsSearchingPersonalInfo then
|
||
exit;
|
||
|
||
if tSchTimer.Enabled then
|
||
begin
|
||
tSchTimer.Enabled := false;
|
||
lbSchProgMsg.Visible := false;
|
||
end else begin
|
||
lbSchProgMsg.Caption := RS_InitWork;
|
||
tSchTimer.Enabled := true;
|
||
lbSchProgMsg.Visible := true;
|
||
end;
|
||
|
||
Application.ProcessMessages;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miSendSoftInstInfoClick(Sender: TObject);
|
||
begin
|
||
MgSvc_.SendAppInstInfo;
|
||
|
||
MessageBox(Handle, PChar(RS_SendAppInstInfo),
|
||
PChar(Caption), MB_ICONINFORMATION or MB_OK);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miSharePcPrintBlockClick(Sender: TObject);
|
||
var
|
||
ini: TIniFile;
|
||
begin
|
||
if Sender is TMenuItem then
|
||
begin
|
||
Guard(ini, TIniFile.Create(GetRunExePathDir + INI_PREVFUN));
|
||
case TMenuItem(Sender).Tag of
|
||
1 :
|
||
begin
|
||
MgSvc_.SharePcPrintBlock := not TMenuItem(Sender).Checked;
|
||
ini.WriteBool('Feature', 'SharePcPrintBlock', MgSvc_.SharePcPrintBlock);
|
||
end;
|
||
2 :
|
||
begin
|
||
MgSvc_.WSDPortPrintBlock := not TMenuItem(Sender).Checked;
|
||
ini.WriteBool('Feature', 'WSDPortPrintBlock', MgSvc_.WSDPortPrintBlock);
|
||
end;
|
||
3 :
|
||
begin
|
||
MgSvc_.TcpIpPrintBlock := not TMenuItem(Sender).Checked;
|
||
ini.WriteBool('Feature', 'TcpIpPrintBlock', MgSvc_.TcpIpPrintBlock);
|
||
end;
|
||
4 :
|
||
begin
|
||
MgSvc_.PrintSavingBlock := not TMenuItem(Sender).Checked;
|
||
ini.WriteBool('Feature', 'PrintSavingBlock', MgSvc_.PrintSavingBlock);
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miShowTagInfoClick(Sender: TObject);
|
||
begin
|
||
miShowTagInfo.Checked := not miShowTagInfo.Checked;
|
||
lbTagInfo.Visible := miShowTagInfo.Checked;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miTempDelClick(Sender: TObject);
|
||
var
|
||
sWinDir, sUsersDir, sDir, sPath: String;
|
||
UserList, FileList, DirList: TStringList;
|
||
i, nCnt, nFail: Integer;
|
||
EntList: TRstEntList;
|
||
pEnt: PRstEnt;
|
||
dlg: TDlgProgCttSchTask;
|
||
begin
|
||
if FindWindow('TDlgProgCttSchTask', nil) <> 0 then
|
||
begin
|
||
MessageBox(Handle, '현재 작업중인 창을 닫고 다시 시도해주십시오.', PChar(APP_TITLE), MB_OK +
|
||
MB_ICONWARNING);
|
||
exit;
|
||
end;
|
||
|
||
if MessageBox(Handle, '임시 폴더를 완전 삭제 하시겠습니까?',
|
||
PChar(APP_TITLE), MB_YESNO + MB_ICONQUESTION) = IDNO then exit;
|
||
|
||
sWinDir := GetWindowsDir;
|
||
if sWinDir = '' then
|
||
exit;
|
||
|
||
sUsersDir := sWinDir[1] + ':\Users\';
|
||
if not DirectoryExists(sUsersDir) then
|
||
exit;
|
||
|
||
Guard(UserList, TStringList.Create);
|
||
Guard(FileList, TStringList.Create);
|
||
Guard(DirList, TStringList.Create);
|
||
|
||
// 사용자 임시 폴더들
|
||
ExtrDirFromDir(sUsersDir, UserList);
|
||
for i := 0 to UserList.Count - 1 do
|
||
begin
|
||
sDir := Format('%s\AppData\Local\Temp\', [sUsersDir + UserList[i]]);
|
||
if DirectoryExists(sDir) then
|
||
begin
|
||
DirList.Add(sDir);
|
||
ExtrFilesPathFromDir(sDir, FileList, true);
|
||
end;
|
||
|
||
sDir := Format('%s\AppData\Local\Microsoft\Windows\INetCache\', [sUsersDir + UserList[i]]);
|
||
|
||
if DirectoryExists(sDir) then
|
||
begin
|
||
DirList.Add(sDir);
|
||
ExtrFilesPathFromDir(sDir, FileList, true);
|
||
end;
|
||
end;
|
||
|
||
// 윈도우 임시 폴더들
|
||
DirList.Add(sWinDir + 'Temp\');
|
||
ExtrFilesPathFromDir(sWinDir + 'Temp\', FileList, true);
|
||
|
||
Guard(EntList, TRstEntList.Create);
|
||
for i := 0 to FileList.Count - 1 do
|
||
begin
|
||
sPath := FileList[i];
|
||
New(pEnt);
|
||
ZeroMemory(pEnt, SizeOf(TRstEnt));
|
||
pEnt.sDir := ExtractFilePath(sPath);
|
||
pEnt.sFName := ExtractFileName(sPath);
|
||
EntList.Add(pEnt);
|
||
end;
|
||
|
||
if EntList.Count > 0 then
|
||
begin
|
||
Guard(dlg, TDlgProgCttSchTask.Create(Self, cstkPerDelete, EntList));
|
||
dlg.ShowModal;
|
||
|
||
nCnt := 0;
|
||
nFail := 0;
|
||
for i := 0 to EntList.Count - 1 do
|
||
begin
|
||
pEnt := EntList[i];
|
||
if pEnt.State = resDel then
|
||
Inc(nCnt)
|
||
else
|
||
Inc(nFail);
|
||
end;
|
||
end;
|
||
|
||
for i := 0 to DirList.Count - 1 do
|
||
DeleteDirSub(DirList[i], true, false, nil, true);
|
||
|
||
MessageBox(Handle, PChar(Format(RS_CompleteWork1+#13+#10+RS_CompleteWork2,
|
||
[nCnt, nFail])), PChar(Caption), MB_ICONINFORMATION or MB_OK);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miUpdatePolicyClick(Sender: TObject);
|
||
begin
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
|
||
// 서버 연결 상태 무시,
|
||
// 정책 확인 주기가 길 경우 오랫동안 접속 확인이 불가하기 때문에 이렇게 무시하는걸로 변경함 25_0616 16:25:02 kku
|
||
// if not MgSvc_.Connected then
|
||
// begin
|
||
// MessageBox(Handle, PChar(RS_MsgDisconnected), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
// exit;
|
||
// end;
|
||
|
||
if MutexExists(MTX_NAME_RCVPOLICY) then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_MsgRcvPolicy), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
TThdRcvPolicy.Create(Handle);
|
||
|
||
// if ProcessRcvPolicy(rpkAll) then
|
||
// MessageBox(Handle, PChar(RS_UpdatePolicy), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK)
|
||
// else
|
||
// MessageBox(Handle, PChar(RS_FailUpdatePolicy), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miUsbInfoClick(Sender: TObject);
|
||
begin
|
||
if FindWindow('TDlgUsbInfo', nil) <> 0 then
|
||
exit;
|
||
|
||
TDlgUsbInfo.Create(nil).Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_POPUP_MSG(var msg: TMessage);
|
||
var
|
||
sMsg: String;
|
||
O: ISuperObject;
|
||
Label
|
||
LB_Dopopup;
|
||
begin
|
||
// 프로그램 시작 후 트레이 만들어지기 전까지는 무시...
|
||
// 메시지 먼저 뜨면 트레이가 씹힌다. 22_0524 09:08:45 kku
|
||
if TrayIcon_ = nil then
|
||
exit;
|
||
|
||
try
|
||
sMsg := String(msg.LParam);
|
||
O := SO(sMsg);
|
||
if O.B['A'] then // 결재 요청, 승인은 무조건 팝업으로 표시 25_0915 16:35:47 kku
|
||
goto LB_Dopopup;
|
||
|
||
if msg.WParam = 1 then
|
||
begin
|
||
var sNoti: String := qNoti_.Dequeue;
|
||
if sNoti = '' then
|
||
exit;
|
||
|
||
var sTitle: String := APP_TITLE;
|
||
var brFlag: TBalloonFlags := bfInfo;
|
||
var nPos: Integer := Pos(':', sNoti);
|
||
if nPos > 0 then
|
||
begin
|
||
sTitle := Copy(sNoti, 1, nPos - 1);
|
||
if sTitle = RS_Vul then
|
||
brFlag := bfError
|
||
else if sTitle = RS_SecuViol then
|
||
brFlag := bfWarning;
|
||
Delete(sNoti, 1, nPos);
|
||
end;
|
||
|
||
ShowTrayMsg(brFlag, sTitle, sNoti);
|
||
end else begin
|
||
LB_Dopopup :
|
||
if sMsg <> '' then
|
||
begin
|
||
var dlg: TDlgNotice := TDlgNotice.Create(nil);
|
||
dlg.PopupMessage(sMsg);
|
||
if MgSvc_.ModePolicy.NotifyType = nftACenter then
|
||
begin
|
||
qNoti_.Enqueue(dlg.NotiCenterMsg);
|
||
dlg.Free;
|
||
end else
|
||
dlg.Show;
|
||
end;
|
||
end;
|
||
Application.ProcessMessages;
|
||
|
||
if IsCJ_Affiliates and (MgSvc_ <> nil) and
|
||
(MgSvc_.HeModeKind = hmkOffline) then imgChangeEmpNoClick(nil);
|
||
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, Format('Fail .. process_WM_POPUP_MSG(), WP = %d', [msg.WParam]));
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.popTrayPopup(Sender: TObject);
|
||
var
|
||
ShiftState: TShiftState;
|
||
bShowHideFun: Boolean;
|
||
bDrmDec: Boolean;
|
||
begin
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
|
||
miAgentState.Enabled := not MgSvc_.PrefModel.HideMainUI;
|
||
miAgentState.Visible := miAgentState.Enabled;
|
||
miOpenDrmFile.Enabled := IsUseDRM;
|
||
miOpenDrmFile.Visible := miOpenDrmFile.Enabled;
|
||
miOfflineExp.Enabled := MgSvc_.PrefModel.UseExpPo; // MgSvc_.PrefModel.ExpPoMin > 0;
|
||
miOfflineExp.Visible := miOfflineExp.Enabled;
|
||
miEncDrmFile.Enabled := miOpenDrmFile.Enabled;
|
||
miEncDrmFile.Visible := miOpenDrmFile.Enabled;
|
||
// 모드 상관없이 보이도록 24_0430 10:30:16 kku
|
||
miDelAgent.Enabled := MgSvc_.PrefModel.IsUninstallAble;
|
||
miDelAgent.Visible := miDelAgent.Enabled;
|
||
miChangeEmpNo.Enabled := IsChangeAbleEmpNo and MgSvc_.PrefModel.IsEmpVerify;
|
||
miChangeEmpNo.Visible := miChangeEmpNo.Enabled;
|
||
miScreenLock.Enabled := IsUseCustomScreenLock;
|
||
miScreenLock.Visible := miScreenLock.Enabled;
|
||
miUsbInfo.Visible := miUsbInfo.Enabled;
|
||
|
||
bDrmDec := MgSvc_.ModePolicy.IsDrmDecrypt or (IsApproveSupport and MgSvc_.ModePolicy.DrmApproval);
|
||
if CUSTOMER_TYPE = CUSTOMER_SCD then
|
||
miEncryptDrm.Visible := false
|
||
else
|
||
miEncryptDrm.Visible := miEncryptDrm.Enabled and ( (CUSTOMER_TYPE = CUSTOMER_DEV) or (not IsUseEncOnlyAIP and not NotUseDRM) );
|
||
miDecryptDrm.Visible := miDecryptDrm.Enabled and ( ((CUSTOMER_TYPE = CUSTOMER_DEV) and bDrmDec) or
|
||
(not IsUseEncOnlyAIP and bDrmDec and not NotUseDRM) );
|
||
|
||
miPiResult.Enabled := GetPersonalInfoResults > 0;
|
||
miPiResult.Visible := miPiResult.Enabled;
|
||
miFileEncPopup.Enabled := (MgSvc_ <> nil) and (MgSvc_.DlgEncCampn <> nil);
|
||
miFileEncPopup.Visible := miFileEncPopup.Enabled;
|
||
miAipTry.Visible := IsSupportAIP and (MgSvc_.AipFailCnt >= 3);
|
||
|
||
ShiftState := KeyDataToShiftState(0);
|
||
// if GetKeyState(VK_LMENU) < 0 then
|
||
// Include(ShiftState, ssAlt);
|
||
|
||
if ShowTestFun then
|
||
miBrowserSecu.Checked := GetProcessPidByName(EXE_BROWSER_SECU) <> 0;
|
||
|
||
|
||
miPolicyView.Visible := MgSvc_.PrefModel.IsShowPolicy;
|
||
miUpdatePolicy.Enabled := MgSvc_.IsNewApi;
|
||
miUpdatePolicy.Visible := miUpdatePolicy.Enabled; //miUpdatePolicy.Enabled and bShowHideFun;
|
||
|
||
miAprvReqList.Visible := IsApproveSupport;
|
||
miAprvList.Visible := IsApproveSupport and (MgSvc_.UserRole <> 0);
|
||
miAprvFileExport.Visible := miAprvFileExport.Enabled and (MgSvc_.ModePolicy.ExFApproval);
|
||
|
||
miAip2Kess.Visible := miAip2Kess.Enabled and (CUSTOMER_TYPE = CUSTOMER_KDNVN) and MgSvc_.ModePolicy.IsDrmDecrypt;
|
||
miKess2Aip.Visible := miKess2Aip.Enabled and (CUSTOMER_TYPE = CUSTOMER_KDNVN) and MgSvc_.ModePolicy.IsDrmDecrypt;
|
||
|
||
miDebugMode.Visible := miDebugMode.Enabled and (ssShift in ShiftState) and (ssCtrl in ShiftState);
|
||
miDebugMode.Checked := gTrForm <> nil; // bIsDebugMode_;
|
||
bShowHideFun := (ssShift in ShiftState) and
|
||
// (ssAlt in ShiftState) and // Alt 누르면 팝업 안됨 22_0714 16:56:21 kku
|
||
(ssCtrl in ShiftState) and
|
||
( FileExists(GetProgramFilesDir + 'Tocsg\' + INI_FORCEHE) or miDebugMode.Checked); // 파일 있을때, 디버그 모드일때 히든 메뉴 나오도록 보완 25_0819 13:40:41 kku
|
||
|
||
miPolicyDetailView.Visible := bShowHideFun;
|
||
miCttSch.Visible := IsUseCustomCttSch and miCttSch.Enabled; // and bShowHideFun;
|
||
miCttSchResult.Visible := miCttSch.Visible and miCttSchResult.Enabled; // (CUSTOMER_TYPE = CUSTOMER_ALADIN) or (IsUseCustomCttSch and miCttSchResult.Enabled and bShowHideFun);
|
||
miResetPersonalScan.Visible := miResetPersonalScan.Enabled and bShowHideFun;
|
||
miRetryPiScan.Visible := miRetryPiScan.Enabled and bShowHideFun;
|
||
miReqPrint.Visible := IsApproveSupport and bShowHideFun;
|
||
miSendSoftInstInfo.Visible := miSendSoftInstInfo.Enabled and bShowHideFun;
|
||
miExportPo.Visible := miExportPo.Enabled and bShowHideFun;
|
||
miExportCmPo.Visible := miExportCmPo.Enabled and bShowHideFun;
|
||
|
||
miProcessTerminatePrevate.Visible := miProcessTerminatePrevate.Enabled and bShowHideFun;
|
||
|
||
miViewSchPersonalInfo.Visible := false;
|
||
miShowTagInfo.Visible := bShowHideFun and IsUsingFileTag;
|
||
|
||
if bShowHideFun then
|
||
begin
|
||
if (MgSvc_ <> nil) and MgSvc_.IsSearchingPersonalInfo then
|
||
miViewSchPersonalInfo.Visible := true;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miExportCmPoClick(Sender: TObject);
|
||
var
|
||
sPath: String;
|
||
begin
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
|
||
sPath := 'C:\Bs1CmPo.json';
|
||
if MgSvc_.MgCampn.SaveToFile(sPath) then
|
||
MessageBox(Handle, PChar(Format('"%s" 경로에 파일이 생성되었습니다.', [sPath])), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK)
|
||
else
|
||
MessageBox(Handle, PChar('파일을 생성하는 중 오류가 발생했습니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miExportPoClick(Sender: TObject);
|
||
var
|
||
sPath: String;
|
||
begin
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
|
||
sPath := 'C:\Bs1Po.json';
|
||
if SaveJsonObjToFile(MgSvc_.ModePolicy.GetPolicyToJsonObj, sPath, nil, true) then
|
||
MessageBox(Handle, PChar(Format('"%s" 경로에 파일이 생성되었습니다.', [sPath])), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK)
|
||
else
|
||
MessageBox(Handle, PChar('파일을 생성하는 중 오류가 발생했습니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miFileEncPopupClick(Sender: TObject);
|
||
begin
|
||
try
|
||
if (MgSvc_ <> nil) and (MgSvc_.DlgEncCampn <> nil) then
|
||
begin
|
||
MgSvc_.DlgEncCampn.Show;
|
||
|
||
if MgSvc_.DlgEncCampn.WindowState = wsMinimized then
|
||
MgSvc_.DlgEncCampn.WindowState := wsNormal;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
begin
|
||
ETgException.TraceException(Self, E, 'Fail .. miFileEncPopupClick()');
|
||
MgSvc_.DlgEncCampn := nil;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miFilePerDelClick(Sender: TObject);
|
||
begin
|
||
TDlgPerfectDel.Create(Self).Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miInfoClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgSimpleInfo;
|
||
begin
|
||
dlg := TDlgSimpleInfo.Create(Self);
|
||
dlg.FillCurrentModeInfo;
|
||
dlg.Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miKess2AipClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgKess2AipDrm;
|
||
begin
|
||
Guard(dlg, TDlgKess2AipDrm.Create(Self));
|
||
dlg.ShowModal;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miNoWaterApprovalClick(Sender: TObject);
|
||
var
|
||
sUrl: String;
|
||
begin
|
||
if not IsApproveSupport then
|
||
exit;
|
||
|
||
sUrl := MgSvc_.SendApproval(8, nil);
|
||
if sUrl <> '' then
|
||
begin
|
||
// ExecutePath(gMgSvc.DestIPort + sUrl);
|
||
|
||
var sHlpExe: String := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sHlpExe) then
|
||
begin
|
||
var O: ISuperObject := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_EXECUTE_FILE;
|
||
O.S['Path'] := gMgSvc.DestIPort + sUrl;
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sHlpExe);
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
end else
|
||
ExecutePath(gMgSvc.DestIPort + sUrl);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_POPUP_LICENSE(var msg: TMessage);
|
||
var
|
||
sContent: String;
|
||
begin
|
||
sContent := String(msg.LParam);
|
||
|
||
// if CUSTOMER_TYPE = CUSTOMER_KFTC then
|
||
// begin
|
||
// var sExe: String := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
// if FileExists(sExe) then
|
||
// begin
|
||
// var O: ISuperObject := SO;
|
||
// O.I['RcvWnd'] := Handle;
|
||
// O.I['Cmd'] := HPCMD_LICENSE_AGREE;
|
||
// O.I['CT'] := CUSTOMER_TYPE;
|
||
// O.B['Count'] := IsLicenseCount;
|
||
// O.B['NoExit'] := gMgSvc.IsSafeExitImpossible;
|
||
// O.S['Msg'] := sContent;
|
||
// SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
// {$IFDEF DEBUG}
|
||
// ExecutePath(sExe);
|
||
// {$ELSE}
|
||
// ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
// {$ENDIF}
|
||
// end;
|
||
// end else
|
||
begin
|
||
with TDlgLicense.Create(nil) do
|
||
PopupLicense(sContent);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_POPUP_AFTERREPORT(var msg: TMessage);
|
||
begin
|
||
if FindWindow('TDlgAfterReport', nil) <> 0 then
|
||
exit;
|
||
|
||
var sExe: String := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
var O: ISuperObject := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_SEND_AFTER_REPORT;
|
||
O.S['WinCap'] := APP_TITLE;
|
||
O.S['UserName'] := MgSvc_.UserName;
|
||
O.D['AfterRptDT'] := MgSvc_.AgentModel.AfterRptDT;
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sExe);
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
end;
|
||
|
||
// TDlgAfterReport.Create(nil).Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.ShowTrayMsg(brFlag: TBalloonFlags; sTitle, sText: String);
|
||
begin
|
||
if TrayIcon_ = nil then
|
||
exit;
|
||
|
||
TrayIcon_.BalloonFlags := brFlag;
|
||
TrayIcon_.BalloonTitle := sTitle;
|
||
TrayIcon_.BalloonHint := sText;
|
||
TrayIcon_.ShowBalloonHint;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.tCttSchTimerTimer(Sender: TObject);
|
||
var
|
||
sProcFile: String;
|
||
llTotalTgFileCnt,
|
||
llProcTgFileCnt: LONGLONG;
|
||
wPercent: WORD;
|
||
begin
|
||
if (MgSvc_ = nil) or (not MgSvc_.IsSearchingPersonalInfo) then
|
||
begin
|
||
tCttSchTimer.Enabled := false;
|
||
lbCttSchSP.Visible := false;
|
||
lbSchTitle.Visible := false;
|
||
Application.ProcessMessages;
|
||
exit;
|
||
end;
|
||
|
||
try
|
||
case MgSvc_.ThdScanSch.WorkState of
|
||
tsWorking :
|
||
begin
|
||
sProcFile := MgSvc_.ThdScanSch.ProcSchFile;
|
||
if sProcFile <> '' then
|
||
begin
|
||
llProcTgFileCnt := MgSvc_.ThdScanSch.ProcTgFileCount;
|
||
llTotalTgFileCnt := MgSvc_.ThdScanSch.TotalTgFileCount;
|
||
if llTotalTgFileCnt > 0 then
|
||
wPercent := (llProcTgFileCnt * 100) div llTotalTgFileCnt
|
||
else
|
||
wPercent := 0;
|
||
|
||
if lbCttSchSP.Visible then
|
||
lbCttSchSP.Caption := Format('%d%%', [wPercent]);
|
||
end else begin
|
||
if lbCttSchSP.Visible then
|
||
begin
|
||
if lbCttSchSP.Caption = '?...' then
|
||
lbCttSchSP.Caption := '.?..'
|
||
else if lbCttSchSP.Caption = '.?..' then
|
||
lbCttSchSP.Caption := '..?.'
|
||
else if lbCttSchSP.Caption = '..?.' then
|
||
lbCttSchSP.Caption := '...?'
|
||
else
|
||
lbCttSchSP.Caption := '?...';
|
||
end;
|
||
end;
|
||
end;
|
||
tsStop,
|
||
tsCompleted,
|
||
tsFail :
|
||
begin
|
||
tCttSchTimer.Enabled := false;
|
||
lbCttSchSP.Visible := false;
|
||
lbSchTitle.Visible := false;
|
||
end;
|
||
end;
|
||
|
||
Application.ProcessMessages;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. tCttSchTimer()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_POPUP_MSG_SYSTEM(var msg: TMessage);
|
||
begin
|
||
try
|
||
if not gMgSvc.ModePolicy.IsNotiSystem then
|
||
exit;
|
||
|
||
if TrayIcon_ <> nil then
|
||
begin
|
||
case msg.WParam of
|
||
TYPE_MSG_SYSTEM_VPNCLOSED :
|
||
begin
|
||
ShowTrayMsg(bfInfo, TrayIcon_.Hint,
|
||
RS_MsgVpnClosed1 + #13#10 +
|
||
Format(RS_MsgVpnClosed2, [APP_TITLE]) + #13#10 +
|
||
RS_MsgVpnClosed3);
|
||
end;
|
||
TYPE_MSG_SYSTEM_NETWORKCLOSE :
|
||
begin
|
||
ShowTrayMsg(bfWarning, TrayIcon_.Hint,
|
||
RS_MsgNetClose1 + #13#10 +
|
||
RS_MsgNetClose2 + #13#10 +
|
||
RS_MsgNetClose3);
|
||
end;
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_POPUP_MSG_SYSTEM()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_REFRESH_VIEW(var msg: TMessage);
|
||
begin
|
||
if msg.WParam = 1 then
|
||
VisibleMainform(false)
|
||
else
|
||
RefreshView;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_SYSCOMMAND(var msg: TWMSysCommand);
|
||
begin
|
||
if msg.CmdType = SC_CLOSE then
|
||
begin
|
||
imgCloseClick(nil);
|
||
exit;
|
||
end;
|
||
Inherited;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_SCREENLOCK(var msg: TMessage);
|
||
begin
|
||
LockScreen;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_REFRESH_CLIPBOARDCHAIN(var msg: TMessage);
|
||
begin
|
||
{$IFDEF OLD_CB_MON}
|
||
CbMon_.Reset;
|
||
{$ENDIF}
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_CTTSCH_INIT(var msg: TMessage);
|
||
begin
|
||
try
|
||
TThdSchFileScan(msg.LParam).SetKvCttSchHandle(msg.WParam);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_CTTSCH_INIT()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_CTTSCH_REQUEST(var msg: TMessage);
|
||
var
|
||
ThdSch: TThdSchFileScan;
|
||
sData: String;
|
||
CpData: TCopyDataStruct;
|
||
begin
|
||
try
|
||
if msg.LParam = 0 then
|
||
exit;
|
||
|
||
ThdSch := TThdSchFileScan(msg.LParam);
|
||
|
||
ZeroMemory(@CpData, SizeOf(CpData));
|
||
case msg.WParam of
|
||
KV_REQUEST_SEARCH_PATH :
|
||
begin
|
||
sData := ThdSch.NextSchPath;
|
||
if sData = '' then
|
||
exit;
|
||
|
||
TTgTrace.T('process_WM_CTTSCH_REQUEST sData: %s', [sData]);
|
||
CpData.dwData := KV_RESPONSE_SEARCH_PATH;
|
||
end;
|
||
end;
|
||
|
||
CpData.cbData := (Length(sData)+1)*2;
|
||
CpData.lpData := PChar(sData);
|
||
SendMessage(ThdSch.KvCttSchWnd, WM_COPYDATA, 0, NativeInt(@CpData));
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_CTTSCH_REQUEST()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_COPYDATA(var msg: TMessage);
|
||
var
|
||
dwData: DWORD;
|
||
pCpData: PCopyDataStruct;
|
||
O: ISuperObject;
|
||
sTemp, sPath: String;
|
||
i, n: Integer;
|
||
begin
|
||
msg.Result := 0;
|
||
|
||
dwData := 0;
|
||
pCpData := PCopyDataStruct(msg.LParam);
|
||
try
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
|
||
dwData := pCpData.dwData;
|
||
case dwData of
|
||
HPCMD_APPROVAL_FILE : // 파일 반출 체크
|
||
begin
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
|
||
// if CompareText(GetFileToSha1Str(sTemp), '48f8f7b5b3ae11988568a213cd5c7d4bf33194b7') = 0 then
|
||
if MgSvc_.HasFileExp(sTemp) then
|
||
msg.Result := 300;
|
||
end;
|
||
HPCMD_EXISTS_FILE : // 파일 유무 체크, 다운로드인지 확인을 위해 추가
|
||
begin
|
||
var PO: TPrefModel := MgSvc_.ModePolicy;
|
||
if pCpData.lpData = nil then
|
||
begin
|
||
TTgTrace.T('Fail .. HPCMD_EXISTS_FILE() .. Data is null', 10);
|
||
exit;
|
||
end;
|
||
|
||
if pCpData.cbData = 0 then
|
||
begin
|
||
TTgTrace.T('Fail .. HPCMD_EXISTS_FILE() .. Data is 0', 10);
|
||
exit;
|
||
end;
|
||
|
||
try
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
except
|
||
on E: Exception do
|
||
begin
|
||
ETgException.TraceException(Self, E, 'Fail .. HPCMD_EXISTS_FILE() .. GetData()');
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
O := nil;
|
||
if sTemp <> '' then
|
||
begin
|
||
if sTemp[1] = '{' then
|
||
begin
|
||
O := SO(sTemp);
|
||
if O <> nil then
|
||
sPath := O.S['P'];
|
||
end else
|
||
sPath := sTemp;
|
||
end else exit;
|
||
|
||
if FileExists(sPath) then
|
||
begin
|
||
msg.Result := 300;
|
||
if O <> nil then
|
||
begin
|
||
{$IFDEF DEBUG}
|
||
TTgTrace.T('파일 존재함. D=%d, S=%d, F=%d Path=%s, Size=%d', [O.I['D'], O.I['S'], O.I['F'], sPath, GetFileSize_path(sPath)], 10);
|
||
{$ELSE}
|
||
TTgTrace.T('파일 존재함. D=0x%x, S=0x%x, F=0x%x Path=%s', [DWORD(O.I['D']), DWORD(O.I['S']), DWORD(O.I['F']), sPath], 10);
|
||
{$ENDIF}
|
||
end else
|
||
TTgTrace.T('파일 존재함. Path=%s', [sPath], 10);
|
||
|
||
// 파일 이름, 시그니처 조건 25_0429 19:40:54 kku
|
||
var sFName: String := ExtractFileName(sPath).ToUpper;
|
||
case TCurAppType(O.I['T']) of
|
||
catOutlook : exit;
|
||
catWebb :
|
||
begin
|
||
sTemp := MgSvc_.PrefModel.WebAbExts;
|
||
if sTemp <> '' then
|
||
begin
|
||
// 파일 차단 대상 확장자 체크 25_0512 13:21:41 kku
|
||
if sWebAbExts_ <> sTemp then
|
||
begin
|
||
sWebAbExts_ := sTemp;
|
||
SplitString(UpperCase(sWebAbExts_), '|', WebAbExtList_);
|
||
end;
|
||
|
||
if WebAbExtList_.IndexOf(GetFileExt(sFName)) = -1 then
|
||
begin
|
||
msg.Result := 100;
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
sTemp := PO.WebAbFNames;
|
||
if sTemp <> '' then
|
||
begin
|
||
msg.Result := 100;
|
||
if sWebAbFNames_ <> sTemp then
|
||
begin
|
||
sWebAbFNames_ := sTemp;
|
||
SplitString(UpperCase(sWebAbFNames_), '|', WebAbFNameList_);
|
||
end;
|
||
|
||
for i := 0 to WebAbFNameList_.Count - 1 do
|
||
if Pos(WebAbFNameList_[i], sFName) > 0 then
|
||
begin
|
||
msg.Result := 300;
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
sTemp := PO.WebAbSigs;
|
||
if sTemp <> '' then
|
||
begin
|
||
msg.Result := 100;
|
||
if sWebAbSigs_ <> sTemp then
|
||
begin
|
||
sWebAbSigs_ := sTemp;
|
||
SplitString(sWebAbSigs_, '|', WebAbSigList_);
|
||
end;
|
||
|
||
if CheckSignFromList(sPath, WebAbSigList_) then
|
||
begin
|
||
msg.Result := 300;
|
||
exit;
|
||
end;
|
||
end;
|
||
end;
|
||
else begin
|
||
sTemp := MgSvc_.PrefModel.EtcAbExts;
|
||
if sTemp <> '' then
|
||
begin
|
||
// 파일 차단 대상 확장자 체크 25_0512 13:21:41 kku
|
||
if sEtcAbExts_ <> sTemp then
|
||
begin
|
||
sEtcAbExts_ := sTemp;
|
||
SplitString(UpperCase(sEtcAbExts_), '|', EtcAbExtList_);
|
||
end;
|
||
|
||
if EtcAbExtList_.IndexOf(GetFileExt(sFName)) = -1 then
|
||
begin
|
||
msg.Result := 100;
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
sTemp := PO.EtcAbFNames;
|
||
if sTemp <> '' then
|
||
begin
|
||
msg.Result := 100;
|
||
if sEtcAbFNames_ <> sTemp then
|
||
begin
|
||
sEtcAbFNames_ := sTemp;
|
||
SplitString(UpperCase(sEtcAbFNames_), '|', EtcAbFNameList_);
|
||
end;
|
||
|
||
for i := 0 to EtcAbFNameList_.Count - 1 do
|
||
if Pos(EtcAbFNameList_[i], sFName) > 0 then
|
||
begin
|
||
msg.Result := 300;
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
sTemp := PO.EtcAbSigs;
|
||
if sTemp <> '' then
|
||
begin
|
||
msg.Result := 100;
|
||
if sEtcAbSigs_ <> sTemp then
|
||
begin
|
||
sEtcAbSigs_ := sTemp;
|
||
SplitString(sEtcAbSigs_, '|', EtcAbSigList_);
|
||
end;
|
||
|
||
if CheckSignFromList(sPath, EtcAbSigList_) then
|
||
begin
|
||
msg.Result := 300;
|
||
exit;
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
end else
|
||
if DirectoryExists(sPath) then
|
||
begin
|
||
msg.Result := 100;
|
||
TTgTrace.T('디렉토리 감지. Path=%s', [sPath], 10);
|
||
end else begin
|
||
sLastNotExistFile_ := sPath;
|
||
TTgTrace.T('파일 없음. Path=%s', [sPath], 10);
|
||
end;
|
||
end;
|
||
HPCMD_CHECK_URL : // URL 체크
|
||
begin
|
||
// TTgTrace.T('process_WM_COPYDATA > HPCMD_CHECK_URL ..');
|
||
if (MgSvc_ <> nil) and (MgSvc_.ThdWebUrl <> nil) then
|
||
begin
|
||
// 위젯 사용 시 파일 차단 25_0224 15:11:08 kku
|
||
if (MgSvc_.ThdWebUrl <> nil) and MgSvc_.ThdWebUrl.WidgetOn then
|
||
exit;
|
||
|
||
var PO: TPrefModel := MgSvc_.ModePolicy;
|
||
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
O := SO(sTemp);
|
||
|
||
// var h: HWND := GetWndHandleFromPID(O.I['pid']);
|
||
// TTgTrace.T('PID=%d, PName=%s', [O.I['pid'], GetProcessNameByPid(O.I['pid'])], 1);
|
||
// TTgTrace.T('HWND=%d, PName=%s', [h, GetProcessNameFromWndHandle(h)], 1);
|
||
// TTgTrace.T('Title=%s', [GetWindowCaption(h)], 1);
|
||
// TTgTrace.T('URL1=%s', [GetWebUrl2(h)], 1);
|
||
// TTgTrace.T('URL2=%s', [GetWebUrl2(O.I['hwnd'])], 1);
|
||
// TTgTrace.T('URL3=%s', [GetWebUrl2(MgSvc_.ThdWebUrl.LastHwnd)], 1);
|
||
|
||
sTemp := PO.WebABUrlList;
|
||
if (sTemp <> '') and (MgSvc_.ThdWebUrl <> nil) then
|
||
begin
|
||
try
|
||
sRecentBwUrl_ := MgSvc_.ThdWebUrl.LastUrl;
|
||
sRecentBwTitle_ := MgSvc_.ThdWebUrl.LastTitle;
|
||
except
|
||
// ..
|
||
end;
|
||
|
||
// URL이 비었을 때 차단 (sRecentBwUrl_ = '')
|
||
// URL 검색 없을 때 차단 (sRecentBwUrl_ = EMPTY_URL_MSG)
|
||
if PO.BlockNoUrlAB and
|
||
((sRecentBwUrl_ = '') or (sRecentBwUrl_ = EMPTY_URL_MSG)) then
|
||
exit;
|
||
|
||
// TTgTrace.T('process_WM_COPYDATA > HPCMD_CHECK_URL .. URL=%s', [sUrl]);
|
||
|
||
// 브라우저에서 PDF등 파일 열기는 허용해준다 24_0814 10:20:55 kku
|
||
// if Pos(':/', sRecentBwUrl_) = 2 then
|
||
// begin
|
||
// msg.Result := 300;
|
||
// exit;
|
||
// end;
|
||
|
||
if sRecentBwUrl_ <> '' then
|
||
begin
|
||
var StrList: TStringList;
|
||
Guard(StrList, TStringList.Create);
|
||
SplitString(UpperCase(sTemp), '|', StrList);
|
||
|
||
var UrlList: TStringList;
|
||
Guard(UrlList, TStringList.Create);
|
||
try
|
||
if MgSvc_.ThdWebUrl <> nil then
|
||
MgSvc_.ThdWebUrl.GetUrlListFromWbTitle(sRecentBwTitle_, UrlList);
|
||
except
|
||
|
||
end;
|
||
|
||
for i := 0 to StrList.Count - 1 do
|
||
begin
|
||
if MgSvc_.ThdWebUrl.MatchTarget(StrList[i], sRecentBwUrl_, sRecentBwTitle_, tkBlock) then
|
||
begin
|
||
if (PO.WebbAB.Kind = abkUrlAllow) then
|
||
begin
|
||
// TTgTrace.T('process_WM_COPYDATA > HPCMD_CHECK_URL .. Detect Allow');
|
||
msg.Result := 300;
|
||
end;
|
||
|
||
exit;
|
||
end;
|
||
|
||
if UrlList.Count > 1 then
|
||
begin
|
||
for n := 0 to UrlList.Count - 1 do
|
||
begin
|
||
if (Pos(StrList[i], UpperCase(UrlList[n])) > 0) then
|
||
begin
|
||
sRecentBwUrl_ := UrlList[n];
|
||
if (PO.WebbAB.Kind = abkUrlAllow) then
|
||
msg.Result := 300;
|
||
|
||
exit;
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
if PO.WebbAB.Kind = abkUrlBlock then
|
||
begin
|
||
// TTgTrace.T('process_WM_COPYDATA > HPCMD_CHECK_URL .. No Block');
|
||
msg.Result := 300;
|
||
end;
|
||
end else
|
||
if (sTemp = '') and (PO.WebbAB.Kind = abkUrlBlock) then
|
||
msg.Result := 300;
|
||
end;
|
||
end;
|
||
HPCMD_CHECK_CONTENT :
|
||
begin
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
O := SO(sTemp);
|
||
msg.Result := 0;
|
||
if MgSvc_.HasContentInfo(O.S['MName'], O.S['Path'], TCurAppType(O.I['Type'])) then
|
||
msg.Result := 300;
|
||
end;
|
||
HPCMD_CHECK_SIZE :
|
||
begin
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
O := SO(sTemp);
|
||
msg.Result := 0;
|
||
|
||
sPath := O.S['Path'];
|
||
var nBlockMB: Integer := 0;
|
||
case TCurAppType(O.I['Type']) of
|
||
catWebb : nBlockMB := MgSvc_.ModePolicy.WebFileBlockMB;
|
||
catOutlook : nBlockMB := MgSvc_.ModePolicy.OutFileBlockMB;
|
||
else nBlockMB := MgSvc_.ModePolicy.AppFileBlockMB;
|
||
end;
|
||
|
||
if nBlockMB > 0 then
|
||
begin
|
||
var ullLimitSize: ULONGLONG := nBlockMB * 1048576;
|
||
if GetFileSize_path(sPath) >= ullLimitSize then
|
||
msg.Result := 300;
|
||
end;
|
||
end;
|
||
HPCMD_REG_IGNORE_DETECT_PATH :
|
||
begin
|
||
if (MgSvc_ <> nil) and (MgSvc_.FileService <> nil) then
|
||
begin
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
O := SO(sTemp);
|
||
MgSvc_.FileService.AddIgr1Path(O.S['P'], O.I['S']);
|
||
end;
|
||
end;
|
||
HPCMD_PRINT_DOCNAME :
|
||
begin
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
TTgTrace.T('HPCMD_PRINT_DOCNAME ... %s', [sTemp], 1);
|
||
|
||
if (sTemp <> '') and (sTemp[1] = '{') then
|
||
begin
|
||
O := SO(sTemp);
|
||
MgSvc_.AddPrtHookJob(O);
|
||
MgSvc_.SetRecentPrintDocName(O.S['DocName']);
|
||
|
||
if MgSvc_.SharePcPrintBlock then
|
||
begin
|
||
var sPrtName: String := O.S['PrtName'];
|
||
TTgTrace.T('HPCMD_PRINT_DOCNAME ... Check .. SharePcPrintBlock, PrtName=%s', [sPrtName], 2);
|
||
if sPrtName.StartsWith('\\') then
|
||
begin
|
||
msg.Result := 300;
|
||
TTgTrace.T('HPCMD_PRINT_DOCNAME ... Block, PrtName=%s', [sPrtName], 2);
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, LOGCODE_PREVENT_PRINTER,
|
||
Format('Printer : %s, Document : %s, SharePC Print', [sPrtName, O.S['DocName']]));
|
||
|
||
var sLog: String := sPrtName + '|' + O.S['DocName'] + '|PV|SHARE';
|
||
if MgSvc_.ModePolicy.Print.bPopup then
|
||
MgSvc_.PopupMessage(TYPE_MSG_PREVENT_PRINTER, sLog);
|
||
end;
|
||
end;
|
||
end else
|
||
MgSvc_.SetRecentPrintDocName(sTemp);
|
||
end;
|
||
HPCMD_SELECT_FILE :
|
||
begin
|
||
// 일반권한으로 실행해서 안 지워진다.. 그래서 후처리 추가 22_0614 12:40:00 kku
|
||
sTemp := GetRunExePathDir + DIR_CONF + DAT_PARAM;
|
||
if FileExists(sTemp) then
|
||
DeleteFile(sTemp);
|
||
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
sPath := O.S['Path'];
|
||
case O.I['Ctrl'] of
|
||
1 : EncFile(sPath);
|
||
2 : DecFile(sPath);
|
||
3 :
|
||
begin
|
||
var FileList: TStringList;
|
||
Guard(FileList, TStringList.Create);
|
||
if (O.O['List'] <> nil) and (O.O['List'].DataType = stArray) then
|
||
begin
|
||
for i := 0 to O.A['List'].Length - 1 do
|
||
FileList.Add(O.A['List'].S[i]);
|
||
end else
|
||
FileList.Add(sPath);
|
||
ApprovalFileExport(FileList);
|
||
end;
|
||
end;
|
||
end;
|
||
HPCMD_CHECK_PRINTWATER_EXCEPT :
|
||
begin
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
TTgTrace.T('프린트 워터마크 예외 확인 ... Path=%s', [sTemp]);
|
||
if MgSvc_.MgPwe.HasFileHash(sTemp) then
|
||
msg.Result := 300;
|
||
|
||
if MgSvc_.ThdPrintWork <> nil then
|
||
MgSvc_.ThdPrintWork.PrtWaterExp := msg.Result = 300;
|
||
end;
|
||
HPCMD_CHECK_PRINTWATER_EXCEPT_EX :
|
||
begin
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
|
||
var bIgrWT: Boolean := MgSvc_.IsPrtWaterExcept;
|
||
var PO: TPrefModel := MgSvc_.ModePolicy;
|
||
var PP: TPrintPolicy := PO.Print;
|
||
if PP.PrintWater <> pwNone then
|
||
begin
|
||
var StrList: TStringList;
|
||
Guard(StrList, TStringList.Create);
|
||
|
||
var sChk: String;
|
||
var sPName: String := O.S['AppName'];
|
||
if not bIgrWT and (PO.PrtWtExpUrl <> '') then
|
||
begin
|
||
SplitString(UpperCase(PO.PrtWtExpUrl), '|', StrList);
|
||
if (sPName <> '') and (Pos(LowerCase(sPName), BROWSER_LIST) > 0) and (gMgSvc.ThdWebUrl <> nil) then
|
||
begin
|
||
try
|
||
sChk := UpperCase(gMgSvc.ThdWebUrl.LastUrl);
|
||
except
|
||
// ..
|
||
end;
|
||
|
||
for i := 0 to StrList.Count - 1 do
|
||
if Pos(StrList[i], sChk) > 0 then
|
||
begin
|
||
TTgTrace.T('프린트 워터마크 예외 확인EX (URL) ... KW=%s, URL=%s', [StrList[i], sChk]);
|
||
bIgrWT := true;
|
||
break;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
if not bIgrWT and (PO.PrtWtExpDocName <> '') then
|
||
begin
|
||
SplitString(UpperCase(PO.PrtWtExpDocName), '|', StrList);
|
||
sChk := UpperCase(O.S['DocName']);
|
||
for i := 0 to StrList.Count - 1 do
|
||
if Pos(StrList[i], sChk) > 0 then
|
||
begin
|
||
TTgTrace.T('프린트 워터마크 예외 확인EX (Doc) ... KW=%s, Doc=%s', [StrList[i], sChk]);
|
||
bIgrWT := true;
|
||
break;
|
||
end;
|
||
end;
|
||
|
||
if not bIgrWT and (PO.PrtWtExpPrtName <> '') then
|
||
begin
|
||
SplitString(UpperCase(PO.PrtWtExpPrtName), '|', StrList);
|
||
sChk := UpperCase(O.S['PrtName']);
|
||
for i := 0 to StrList.Count - 1 do
|
||
if Pos(StrList[i], sChk) > 0 then
|
||
begin
|
||
TTgTrace.T('프린트 워터마크 예외 확인EX (Prt) ... KW=%s, Doc=%s', [StrList[i], sChk]);
|
||
bIgrWT := true;
|
||
break;
|
||
end;
|
||
end;
|
||
|
||
if not bIgrWT and (PO.PrtWtExpProcName <> '') then
|
||
begin
|
||
SplitString(UpperCase(PO.PrtWtExpProcName), '|', StrList);
|
||
sChk := UpperCase(sPName);
|
||
for i := 0 to StrList.Count - 1 do
|
||
if Pos(StrList[i], sChk) > 0 then
|
||
begin
|
||
TTgTrace.T('프린트 워터마크 예외 확인EX (App) ... KW=%s, Doc=%s', [StrList[i], sChk]);
|
||
bIgrWT := true;
|
||
break;
|
||
end;
|
||
end;
|
||
end else bIgrWT := true;
|
||
|
||
if bIgrWT then
|
||
begin
|
||
msg.Result := 300;
|
||
if MgSvc_.IsPrtWaterExcept then
|
||
MgSvc_.IsPrtWaterExcept := false;
|
||
end;
|
||
|
||
if MgSvc_.ThdPrintWork <> nil then
|
||
MgSvc_.ThdPrintWork.PrtWaterExp := msg.Result = 300;
|
||
end;
|
||
HPCMD_PRINT_ENDDOC_INFO :
|
||
begin
|
||
// 현재는 winword.exe만 결과가 날라옴 25_0813 14:50:25 kku
|
||
// 부수 카운트 계산을 위함
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
{$IFDEF DEBUG}
|
||
TTgTrace.T('PRINT_ENDDOC_INFO .. MdPath=%s, PrtName=%s, DrvName=%s, DevName=%s, DocName=%s, PageCnt=%d',
|
||
[O.S['MdPath'], O.S['PrtName'], O.S['DrvName'], O.S['DevName'], O.S['DocName'], O.I['PageCnt']], 10);
|
||
{$ENDIF}
|
||
if (MgSvc_ <> nil) and (MgSvc_.ThdPrintWork <> nil) then
|
||
MgSvc_.ThdPrintWork.WordPrtPage := O.I['PageCnt'];
|
||
end;
|
||
|
||
KV_SEARCH_RESULT :
|
||
begin
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
var SchResult: TSchResult := TTgJson.GetDataAsType<TSchResult>(O);
|
||
|
||
TTgTrace.T('KV_SEARCH_RESULT .. WParam = %d, nHitCnt=%d, sPath=%s, sResultStr=%s',
|
||
[msg.WParam, SchResult.nHitCnt, SchResult.sPath, SchResult.sResultStr], 10);
|
||
|
||
if (MgSvc_.ThdScanSch <> nil) and (WPARAM(MgSvc_.ThdScanSch) = msg.WParam) then
|
||
begin
|
||
if MgSvc_.ProcCampn <> nil then
|
||
begin
|
||
TTgTrace.T('KV_SEARCH_RESULT .. ProcessCampnFound', 10);
|
||
MgSvc_.ProcessCampnFound(@SchResult);
|
||
end
|
||
else
|
||
begin
|
||
TTgTrace.T('KV_SEARCH_RESULT .. ProcessPiSchFound', 10);
|
||
MgSvc_.ProcessPiSchFound(@SchResult);
|
||
end;
|
||
end else
|
||
if WPARAM(ThdCustomScanSch_) = msg.WParam then
|
||
AddFoundCttSchRst(@SchResult);
|
||
end;
|
||
|
||
KV_HOOK_PRINT :
|
||
begin
|
||
var dwPid: DWORD := StrToIntDef(Copy(PChar(pCpData.lpData), 1, pCpData.cbData), 0);
|
||
if dwPid <> 0 then
|
||
begin
|
||
if InjectModule(dwPid, GetRunExePathDir + DIR_CONF + DLL_HOOK) > 0 then
|
||
msg.Result := 200
|
||
else
|
||
msg.Result := 100
|
||
end else
|
||
msg.Result := 99;
|
||
end;
|
||
|
||
HPCMD_INSTALL_OUTLOOK_ADDIN :
|
||
begin
|
||
TTgTrace.T('Install - Outlook SecureModule');
|
||
if not IsHD and (MgSvc_ <> nil) then
|
||
MgSvc_.PopupMessage(TYPE_MSG_OUTLOOK_ADDIN_OK);
|
||
end;
|
||
|
||
HPCMD_LICENSE_AGREE :
|
||
begin
|
||
if MgSvc_ <> nil then
|
||
MgSvc_.SendAgreeInfo;
|
||
end;
|
||
|
||
HPCMD_LICENSE_DISCONN :
|
||
begin
|
||
if MgSvc_ <> nil then
|
||
MgSvc_.VulService.SetDisconnect(true, true);
|
||
end;
|
||
|
||
HPCMD_SEND_QnA_MESSAGE :
|
||
begin
|
||
if MgSvc_ <> nil then
|
||
begin
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
if sTemp <> '' then
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, REQUEST_QNA, sTemp);
|
||
end;
|
||
end;
|
||
|
||
HPCMD_SEND_AFTER_REPORT :
|
||
begin
|
||
if MgSvc_ <> nil then
|
||
begin
|
||
MgSvc_.AgentModel.AfterRptDT := 0;
|
||
MgSvc_.AgentModel.Save;
|
||
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, SYSEVT_WORKREPORT, sTemp);
|
||
end;
|
||
end;
|
||
|
||
HPCMD_REQ_CLIPBOARD_DATA :
|
||
begin
|
||
bForceCollectCB_ := false;
|
||
// bScrCapKey_ := false;
|
||
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
var PO: TPrefModel := MgSvc_.ModePolicy;
|
||
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
O := SO(sTemp);
|
||
|
||
// if (O.S['Body'] = '') and (O.S['OcrBody'] = '') then
|
||
// exit;
|
||
|
||
if tUpdateLogo.Enabled then
|
||
begin
|
||
// 상시로고 업데이트 대기 상태면 바로 업데이트 되도록 조치 24_0411 14:46:28 kku
|
||
tUpdateLogo.Enabled := false;
|
||
UpdateScreenLogo;
|
||
end;
|
||
|
||
var LogInfo: TLogInfo;
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
LogInfo.sDevName := O.S['WinCap'];
|
||
LogInfo.sAppName := O.S['AName'];
|
||
LogInfo.sAppPath := O.S['APath'];
|
||
LogInfo.sBody := O.S['Body'];
|
||
LogInfo.sOcrBody := O.S['OcrBody'];
|
||
var hActive: HWND := O.I['AWnd'];
|
||
|
||
var sImgPath: String := O.S['ImgPath'];
|
||
var sCttResults: String := '';
|
||
var bBlock: Boolean := PO.ClipBlockKind = cbkBlock;
|
||
if FileExists(sImgPath) then
|
||
begin
|
||
if GetFileSize_path(sImgPath) <= (LONGLONG(20) * 1048576) then
|
||
begin
|
||
var sCompId: String := MgSvc_.MakeComponentId(ExtractFileName(sImgPath));
|
||
MgSvc_.SendFileNor(false, sCompId, 'printLogCollect.do', sImgPath, 0, 20, crtDelete);
|
||
LogInfo.sThumbIds := sCompId;
|
||
end;
|
||
end;
|
||
|
||
if PO.CbCF.bActive then
|
||
begin
|
||
if LogInfo.sBody <> '' then
|
||
LogInfo.OVio := MgSvc_.GetCbFoundContentToJsonObj(LogInfo.sBody, sCttResults)
|
||
else if LogInfo.sOcrBody <> '' then
|
||
LogInfo.OVio := MgSvc_.GetCbFoundContentToJsonObj(LogInfo.sOcrBody, sCttResults);
|
||
|
||
if (PO.ClipBlockKind = cbkBlock) and (LogInfo.OVio = nil) then
|
||
bBlock := false; // 검출된거 없으면 차단 안함
|
||
end;
|
||
|
||
var sMsg: String := '';
|
||
if bScrCapKey_ and PO.IsIgrScrCapKeyCB then
|
||
begin
|
||
bBlock := false;
|
||
bScrCapKey_ := false;
|
||
end;
|
||
|
||
if bBlock then
|
||
begin
|
||
if (hActive <> 0) and (CompareText('excel.exe', GetProcessNameFromWndHandle(hActive)) = 0) then
|
||
begin
|
||
// 엑셀이면 셀 선택 해제 24_0716 16:12:46 kku
|
||
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
|
||
// PressKey(VK_ESCAPE);
|
||
PostMessage(hActive, WM_KEYDOWN, VK_ESCAPE, 0);
|
||
PostMessage(hActive, WM_KEYUP, VK_ESCAPE, 0);
|
||
end;
|
||
|
||
// 클립보드가 열리지 않는 경우가 있다.
|
||
// 4초간 시도 해보는걸로 보완 22_0715 09:03:33 kku
|
||
var nTryCnt: Integer := 0;
|
||
bIsClearCB_ := true;
|
||
try
|
||
while not ClearClipboard(MgSvc_.ModePolicy.CbImgBlock) do
|
||
begin
|
||
Inc(nTryCnt);
|
||
if nTryCnt > 20 then
|
||
begin
|
||
// TTgTrace.T('Fail .. ClearClipboard()');
|
||
exit;
|
||
end;
|
||
Sleep(200);
|
||
end;
|
||
finally
|
||
bIsClearCB_ := false;
|
||
end;
|
||
end;
|
||
|
||
var dtNow: TDateTime := Now;
|
||
if (MilliSecondsBetween(dtRecentCbPopup_, dtNow) <= 1000) then
|
||
exit;
|
||
dtRecentCbPopup_ := dtNow;
|
||
|
||
if bBlock then
|
||
begin
|
||
if MgSvc_.ModePolicy.CbPopup then
|
||
MgSvc_.PopupMessage(TYPE_MSG_PREVENT_CLIPBOARD, LogInfo.sAppName + '|' + sCttResults);
|
||
|
||
if LogInfo.sAppName <> '' then
|
||
sMsg := Format('Clipboard Blocked : %s', [LogInfo.sAppName])
|
||
else
|
||
sMsg := 'Clipboard Blocked';
|
||
|
||
LogInfo.sCode := LOGCODE_PREVENT_CLIPBOARD;
|
||
end else begin
|
||
if MgSvc_.ModePolicy.CbPopup and (PO.ClipBlockKind <> cbkBlock) then
|
||
MgSvc_.PopupMessage(TYPE_MSG_PREVENT_CLIPBOARD, LogInfo.sAppName + '|M' + '|' + sCttResults);
|
||
|
||
if LogInfo.sAppName <> '' then
|
||
sMsg := Format('Clipboard : %s', [LogInfo.sAppName])
|
||
else
|
||
sMsg := 'Clipboard';
|
||
|
||
LogInfo.sCode := MONITOR_CLIPBOARD;
|
||
end;
|
||
|
||
if MgSvc_.IsNewApi then
|
||
begin
|
||
LogInfo.sSummary := sMsg;
|
||
MgSvc_.SendEventLogEx(@LogInfo);
|
||
end else
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, LogInfo.sCode, sMsg);
|
||
|
||
dwBlockInputCTick_ := 0;
|
||
if KeyMonDll_ <> nil then
|
||
begin
|
||
KeyMonDll_.SetDisableKey_Ctrl(false);
|
||
KeyMonDll_.SetDisableKey_Etc(0, 0);
|
||
end;
|
||
end;
|
||
|
||
HPCMD_INPUT_EXCEPT_REASON :
|
||
begin
|
||
// 프린트 워터마크 예외 신청
|
||
|
||
sPath := GetRunExePath;
|
||
if sPath = '' then
|
||
exit;
|
||
|
||
sPath := sPath[1] + ':\ProgramData\HE\Task\bs1.$shl';
|
||
sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
if sTemp <> '' then
|
||
begin
|
||
if LoadJsonObjFromFile(O, sPath) then
|
||
begin
|
||
O.S['Reason'] := sTemp;
|
||
SaveJsonObjToFile(O, sPath);
|
||
PostMessage(Handle, WM_REQUEST_DRM, 0, 0);
|
||
end;
|
||
end else
|
||
if FileExists(sPath) then
|
||
DeleteFile(sPath);
|
||
end;
|
||
|
||
HPCMD_REQ_DEVICE_EXCEPT :
|
||
begin
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
if O.O['ReqInfo'] <> nil then
|
||
begin
|
||
var RegInfo: TReqDevExceptInfo := TTgJson.GetDataAsType<TReqDevExceptInfo>(O.O['ReqInfo']);
|
||
if MgSvc_.IsNewApi then
|
||
MgSvc_.SendRequest(LOGCODE_EVENT_USB_REQUEST, RegInfo, O.S['R'],
|
||
FormatDateTime('yyyy-mm-dd', O.D['BDT']),
|
||
FormatDateTime('yyyy-mm-dd', O.D['DT']), O.I['T'], O.S['D'])
|
||
else
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, LOGCODE_EVENT_USB_REQUEST, O.S['D']);
|
||
end;
|
||
end;
|
||
|
||
HPCMD_REP_NETDIR_PROGRESS :
|
||
begin
|
||
// 네트워크 위치 파일 스캔 - 진행사항
|
||
try
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
if O.I['TKR'] = 0 then
|
||
exit;
|
||
|
||
var ThdScan: TThdSchFileScan := TThdSchFileScan(O.I['TKR']);
|
||
ThdScan.IncTotalDir(O.I['InD']);
|
||
ThdScan.IncTotalFile(O.I['InF']);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_COPYDATA(), HPCMD_REP_NETDIR_PROGRESS');
|
||
end;
|
||
end;
|
||
|
||
HPCMD_REP_NETDIR_SCANPATH :
|
||
begin
|
||
// 네트워크 위치 파일 스캔 - 대상 파일 전달
|
||
try
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
if O.I['TKR'] = 0 then
|
||
exit;
|
||
|
||
var ThdScan: TThdSchFileScan := TThdSchFileScan(O.I['TKR']);
|
||
ThdScan.AddNetFileEnt(O.S['Path']);
|
||
|
||
// TTgTrace.T('HPCMD_REP_NETDIR_SCANPATH = Path=%s', [O.S['Path']], 1);
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_COPYDATA(), HPCMD_REP_NETDIR_SCANPATH');
|
||
end;
|
||
end;
|
||
|
||
HPCMD_OPEN_ENCRYPT,
|
||
HPCMD_OPEN_DECRYPT :
|
||
begin
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
|
||
var LogInfo: TLogInfo;
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
if O.B['IsEnc'] then
|
||
LogInfo.sCode := PREVENT_DRM_ENCRYPT
|
||
else
|
||
LogInfo.sCode := PREVENT_DRM_DECRYPT;
|
||
|
||
if (O.O['List'] <> nil) and (O.O['List'].DataType = stArray) then
|
||
begin
|
||
for i := 0 to O.A['List'].Length - 1 do
|
||
begin
|
||
sTemp := O.A['List'].S[i];
|
||
LogInfo.sPath := sTemp;
|
||
LogInfo.sSummary := ExtractFileName(sTemp);
|
||
gMgSvc.SendEventLogEx(@LogInfo, false);
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
HPCMD_REQ_DECRYPT :
|
||
begin
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
if (O = nil) or (O.DataType <> stArray) then
|
||
begin
|
||
TTgTrace.T('Fail .. HPCMD_REQ_DECRYPT .. Invalid fileList');
|
||
exit;
|
||
end;
|
||
ApprovalFileDecrypt(O);
|
||
end;
|
||
|
||
HPCMD_HOOK_NOTI :
|
||
begin
|
||
// pipe 통신 너무 느려서 이렇게 변경, 나중에 정리 필요 25_0324 17:48:36 kku
|
||
var Rcv: IRcvPacket := TTgPacket.Create(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
case Rcv.Command of
|
||
ACC_NOTI_MSG :
|
||
begin
|
||
var m: TMessage;
|
||
ZeroMemory(@m, SizeOf(m));
|
||
m.LParam := NativeInt(Rcv);
|
||
process_WM_NOTIFY_HOOKDATA(m);
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
HPCMD_FILE_OPERATION_NOTI :
|
||
begin
|
||
var LogInfo: TLogInfo;
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
// TTgTrace.T('[HPCMD_FILE_OPERATION_NOTI] Src=%s, Dst=%s, Evt=%d, Block=%s',
|
||
// [O.S['S'], O.S['D'], O.I['E'], BooleanToStr(O.B['B'], 'Y', 'N')], 1);
|
||
// TTgTrace.T('[HPCMD_FILE_OPERATION_NOTI] Dst=%s, Evt=%d, Block=%s',
|
||
// [O.S['D'], O.I['E'], BooleanToStr(O.B['B'], 'Y', 'N')], 1);
|
||
|
||
if O.B['N'] then
|
||
begin
|
||
if O.B['B'] then
|
||
begin
|
||
LogInfo.sCode := PREVENT_NETFOLDER_FILE;
|
||
LogInfo.sSummary := '[NetFolder] Block : ';
|
||
|
||
if MgSvc_.ModePolicy.ShFileCrMon.bBlkNoti then
|
||
MgSvc_.PopupMessage(TYPE_MSG_PREVENT_FILEOPER, O.AsJSon);
|
||
end else begin
|
||
LogInfo.sCode := MONITOR_NETFOLDER_FILE;
|
||
LogInfo.sSummary := '[NetFolder] Monitor : ';
|
||
|
||
if MgSvc_.ModePolicy.ShFileCrMon.bMonNoti then
|
||
MgSvc_.PopupMessage(TYPE_MSG_MONITOR_FILEOPER, O.AsJSon);
|
||
end;
|
||
end
|
||
else
|
||
begin
|
||
var deviceType: DWORD;
|
||
deviceType:= O.I['T'];
|
||
case deviceType of
|
||
DRIVE_CDROM:
|
||
begin
|
||
if O.B['B'] then
|
||
begin
|
||
LogInfo.sCode := PREVENT_NETFOLDER_FILE;
|
||
LogInfo.sSummary := '[CDROM] Block : ';
|
||
|
||
if MgSvc_.ModePolicy.ShFileCrMon.bBlkNoti then
|
||
MgSvc_.PopupMessage(TYPE_MSG_PREVENT_FILEOPER, O.AsJSon);
|
||
end else begin
|
||
LogInfo.sCode := MONITOR_NETFOLDER_FILE;
|
||
LogInfo.sSummary := '[CDROM] Monitor : ';
|
||
|
||
if MgSvc_.ModePolicy.ShFileCrMon.bMonNoti then
|
||
MgSvc_.PopupMessage(TYPE_MSG_MONITOR_FILEOPER, O.AsJSon);
|
||
end;
|
||
end;
|
||
DRIVE_REMOVABLE:
|
||
begin
|
||
if O.B['B'] then
|
||
begin
|
||
LogInfo.sCode := PREVENT_NETFOLDER_FILE;
|
||
LogInfo.sSummary := '[REMOVABLE] Block : ';
|
||
|
||
if MgSvc_.ModePolicy.ShFileCrMon.bBlkNoti then
|
||
MgSvc_.PopupMessage(TYPE_MSG_PREVENT_FILEOPER, O.AsJSon);
|
||
end else begin
|
||
LogInfo.sCode := MONITOR_NETFOLDER_FILE;
|
||
LogInfo.sSummary := '[REMOVABLE] Monitor : ';
|
||
|
||
if MgSvc_.ModePolicy.ShFileCrMon.bMonNoti then
|
||
MgSvc_.PopupMessage(TYPE_MSG_MONITOR_FILEOPER, O.AsJSon);
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
LogInfo.sSummary := LogInfo.sSummary + ExtractFileName(O.S['D']);
|
||
LogInfo.sAppName := 'explorer.exe';
|
||
LogInfo.sPath := O.S['D'];
|
||
MgSvc_.SendEventLogEx(@LogInfo, O.B['B']);
|
||
|
||
end;
|
||
|
||
HPCMD_REQ_ENCRYPT :
|
||
begin
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
MgSvc_.ThdReact.AddEnt(crtDRM, O.S['S'], O.I['D'], false, true);
|
||
end;
|
||
|
||
HPCMD_START_SCREEN_RECORD :
|
||
begin
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
TTgTrace.T('화면 녹화 시작 : %s 사용 감지됨', [O.S['RS']], 2);
|
||
|
||
if MgSvc_.ModePolicy.AppRcdNoti then
|
||
MgSvc_.PopupMessage(TYPE_MSG_APP_SCREEN_RECORD, O.S['RS']);
|
||
end;
|
||
|
||
HPCMD_STOP_SCREEN_RECORD :
|
||
begin
|
||
O := SO(Copy(PChar(pCpData.lpData), 1, pCpData.cbData));
|
||
TTgTrace.T('화면 녹화 끝 : MSec=%d', [O.I['MS']], 2);
|
||
|
||
MgSvc_.SendScreenRecord(O.S['RS'], O.S['OD'], O.I['MS']);
|
||
end;
|
||
|
||
|
||
// KV_PRTWM_PROGRESS :
|
||
// begin
|
||
// sTemp := Copy(PChar(pCpData.lpData), 1, pCpData.cbData);
|
||
// var m: TMessage;
|
||
// ZeroMemory(@m, SizeOf(m));
|
||
// if sTemp = 'next' then
|
||
// begin
|
||
// m.WParam := 2;
|
||
// process_WM_POPUP_PRTW_PROGRESS(m);
|
||
// end else begin
|
||
// m.LParam := StrToIntDef(sTemp, -1);
|
||
// if m.LParam <> -1 then
|
||
// process_WM_POPUP_PRTW_PROGRESS(m);
|
||
// end;
|
||
// end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, Format('Fail .. process_WM_COPYDATA(), dwData=%d', [dwData]));
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miPcCleanup_AllClick(Sender: TObject);
|
||
var
|
||
sDir,
|
||
sExe,
|
||
sParam: String;
|
||
begin
|
||
if Sender is TMenuItem then
|
||
begin
|
||
if MessageBox(Handle, PChar(Format('[%s] 기능을 수행하시겠습니까?',
|
||
[TMenuItem(Sender).Caption])), PChar(APP_TITLE), MB_YESNO + MB_ICONQUESTION) = IDNO then exit;
|
||
|
||
sDir := GetRunExePathDir + DIR_CONF;
|
||
case TMenuItem(Sender).Tag of
|
||
0 :
|
||
begin
|
||
|
||
end;
|
||
1 :
|
||
begin
|
||
sExe := 'BrowserDeletePermanentlyProj.exe';
|
||
sParam := '-silent -allbrowsers -history';
|
||
end;
|
||
2 :
|
||
begin
|
||
sExe := 'BrowserDeletePermanentlyProj.exe';
|
||
sParam := '-silent -allbrowsers -cache';
|
||
end;
|
||
3 :
|
||
begin
|
||
sExe := 'BrowserDeletePermanentlyProj.exe';
|
||
sParam := '-silent -allbrowsers -cookies';
|
||
end;
|
||
4 :
|
||
begin
|
||
sExe := 'BrowserAutoFormDataCleanProj.exe';
|
||
sParam := '/silent';
|
||
end;
|
||
5 :
|
||
begin
|
||
sExe := 'RecentOpenFileDeleteProj.exe';
|
||
sParam := '/silent /registerreboot';
|
||
end;
|
||
6 :
|
||
begin
|
||
sExe := 'MsOfficeAutoSavedFileDelProj.exe';
|
||
sParam := '/silent /runnow';
|
||
end;
|
||
7 :
|
||
begin
|
||
sExe := 'SafeBootBlockerProj.exe';
|
||
sParam := '/silent';
|
||
end;
|
||
end;
|
||
|
||
if FileExists(sDir + sExe) then
|
||
begin
|
||
ExecutePath_hide(sDir + sExe, sParam);
|
||
MessageBox(Handle, PChar(Format('[%s] 기능을 수행했습니다.', [TMenuItem(Sender).Caption])), PChar(APP_TITLE), MB_OK + MB_ICONINFORMATION);
|
||
end else
|
||
MessageBox(Handle, '모듈이 존재하지 않습니다.', PChar(APP_TITLE), MB_OK + MB_ICONWARNING);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miPiResultClick(Sender: TObject);
|
||
begin
|
||
lbCttSchRstClick(nil);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miPolicyDetailViewClick(Sender: TObject);
|
||
begin
|
||
TDlgPolicyView.Create(nil).Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miPolicyViewClick(Sender: TObject);
|
||
begin
|
||
TDlgCurPolicyView.Create(nil).Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miPrintCtrlClick(Sender: TObject);
|
||
begin
|
||
miSharePcPrintBlock.Checked := MgSvc_.SharePcPrintBlock;
|
||
miWSDPortPrintBlock.Checked := MgSvc_.WSDPortPrintBlock;
|
||
miTcpIpPrintBlock.Checked := MgSvc_.TcpIpPrintBlock;
|
||
miPrintSavingBlock.Checked := MgSvc_.PrintSavingBlock;
|
||
end;
|
||
|
||
var miProcessTerminatePrevateState: Boolean = False;
|
||
procedure TDlgeCrmHeMain.miProcessTerminatePrevateClick(Sender: TObject);
|
||
begin
|
||
TTgTrace.T('miProcessTerminatePrevateClick!!');
|
||
if gBs1FltControl <> nil then
|
||
begin
|
||
if not miProcessTerminatePrevateState then
|
||
begin
|
||
gBs1FltControl.ProcessProtect(0);
|
||
gBs1FltControl.FolderProtectControl(0);
|
||
gBs1FltControl.SetRegProtect(0);
|
||
miProcessTerminatePrevate.Caption:= '프로세스 종료 방지 시작';
|
||
miProcessTerminatePrevateState:= True;
|
||
end
|
||
else
|
||
begin
|
||
gBs1FltControl.ProcessProtect(1);
|
||
gBs1FltControl.FolderProtectControl(1);
|
||
gBs1FltControl.SetRegProtect(1);
|
||
miProcessTerminatePrevate.Caption:= '프로세스 종료 방지 해제';
|
||
miProcessTerminatePrevateState:= False;
|
||
end;
|
||
end;
|
||
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miAprvFileExportClick(Sender: TObject);
|
||
var
|
||
sExe: String;
|
||
O: ISuperObject;
|
||
ProcInfo: TProcessInformation;
|
||
Label
|
||
LB_Direct;
|
||
begin
|
||
if not IsApproveSupport then
|
||
exit;
|
||
|
||
if not MgSvc_.ModePolicy.ExFApproval then
|
||
exit;
|
||
|
||
if not MgSvc_.Connected then
|
||
begin
|
||
MessageBox(Handle, PChar(RS_NoConnectServer+#13+#10+RS_WaitRetry),
|
||
PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
try
|
||
sExe := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
O := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_SELECT_FILE;
|
||
O.I['Ctrl'] := 3;
|
||
O.S['Filter'] := 'All files|*.*';
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
ProcInfo := ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
if ProcInfo.dwProcessId = 0 then
|
||
goto LB_Direct;
|
||
end else begin
|
||
LB_Direct :
|
||
OpenDialogDRM.FileName := '';
|
||
if MgSvc_.Domain <> '' then
|
||
begin
|
||
var sPath: String := 'C:\Users\' + ExtractFileName(MgSvc_.Domain) + '\Desktop';
|
||
if DirectoryExists(sPath) then
|
||
OpenDialogDRM.InitialDir := sPath;
|
||
end;
|
||
|
||
OpenDialogDRM.Filter := 'All files|*.*';
|
||
if OpenDialogDRM.Execute(Handle) then
|
||
begin
|
||
ApprovalFileExport(OpenDialogDRM.Files);
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. miEncDrmFileClick()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miRecycleDelClick(Sender: TObject);
|
||
var
|
||
sWinDir, sUsersDir,
|
||
sDir, sPath, sFName: String;
|
||
DrvList, FileList, DirList, SubDirList: TStringList;
|
||
i, c, nCnt, nFail: Integer;
|
||
EntList: TRstEntList;
|
||
pEnt: PRstEnt;
|
||
dlg: TDlgProgCttSchTask;
|
||
begin
|
||
if FindWindow('TDlgProgCttSchTask', nil) <> 0 then
|
||
begin
|
||
MessageBox(Handle, '현재 작업중인 창을 닫고 다시 시도해주십시오.', PChar(APP_TITLE), MB_OK +
|
||
MB_ICONWARNING);
|
||
exit;
|
||
end;
|
||
|
||
if MessageBox(Handle, '휴지통을 완전 삭제 하시겠습니까?',
|
||
PChar(APP_TITLE), MB_YESNO + MB_ICONQUESTION) = IDNO then exit;
|
||
|
||
|
||
sWinDir := GetWindowsDir;
|
||
if sWinDir = '' then
|
||
begin
|
||
ASSERT(false);
|
||
exit;
|
||
end;
|
||
|
||
Guard(DirList, TStringList.Create);
|
||
Guard(DrvList, TStringList.Create);
|
||
Guard(SubDirList, TStringList.Create);
|
||
Guard(FileList, TStringList.Create);
|
||
|
||
sDir := GetDrivesFromMask(GetLogicalDrives);
|
||
SplitString(sDir, ',', DrvList);
|
||
for i := 0 to DrvList.Count - 1 do
|
||
begin
|
||
sDir := DrvList[i] + '$Recycle.Bin\';
|
||
if DirectoryExists(sDir) then
|
||
begin
|
||
SubDirList.Clear;
|
||
ExtrDirFromDir(sDir, SubDirList);
|
||
for c := 0 to SubDirList.Count - 1 do
|
||
begin
|
||
if DirectoryExists(sDir + SubDirList[c]) then
|
||
begin
|
||
DirList.Add(sDir + SubDirList[c]);
|
||
ExtrFilesPathFromDir(sDir + SubDirList[c], FileList, true);
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
if DirList.Count = 0 then
|
||
begin
|
||
MessageBox(Handle, '삭제할 휴지통 경로를 찾을 수 없습니다.', PChar(APP_TITLE), MB_OK + MB_ICONWARNING);
|
||
exit;
|
||
end;
|
||
|
||
Guard(EntList, TRstEntList.Create);
|
||
for i := 0 to FileList.Count - 1 do
|
||
begin
|
||
sPath := FileList[i];
|
||
sFName := ExtractFileName(sPath);
|
||
if CompareText(sFName, 'desktop.ini') = 0 then
|
||
continue;
|
||
|
||
New(pEnt);
|
||
ZeroMemory(pEnt, SizeOf(TRstEnt));
|
||
pEnt.sDir := ExtractFilePath(sPath);
|
||
pEnt.sFName := sFName;
|
||
EntList.Add(pEnt);
|
||
end;
|
||
|
||
if EntList.Count > 0 then
|
||
begin
|
||
Guard(dlg, TDlgProgCttSchTask.Create(Self, cstkPerDelete, EntList));
|
||
dlg.ShowModal;
|
||
|
||
nCnt := 0;
|
||
nFail := 0;
|
||
for i := 0 to EntList.Count - 1 do
|
||
begin
|
||
pEnt := EntList[i];
|
||
if pEnt.State = resDel then
|
||
Inc(nCnt)
|
||
else
|
||
Inc(nFail);
|
||
end;
|
||
end;
|
||
|
||
for i := 0 to DirList.Count - 1 do
|
||
DeleteDirSub(DirList[i], true, false, nil, true);
|
||
|
||
MessageBox(Handle, PChar(Format(RS_CompleteWork1+#13+#10+RS_CompleteWork2,
|
||
[nCnt, nFail])), PChar(Caption), MB_ICONINFORMATION or MB_OK);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miReqPrintClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgReqPrintList;
|
||
begin
|
||
if FindWindow('TDlgReqPrintList', nil) <> 0 then
|
||
exit;
|
||
|
||
dlg := TDlgReqPrintList.Create(nil);
|
||
dlg.Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miResetPersonalScanClick(Sender: TObject);
|
||
begin
|
||
if MgSvc_.IsSearchingPersonalInfo then
|
||
begin
|
||
MessageBox(Handle, PChar('개인정보 검사가 진행중입니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
if MessageBox(Handle, PChar('개인정보 검사 결과를 초기화 하시겠습니까?'),
|
||
PChar(APP_TITLE), MB_ICONQUESTION or MB_YESNO) = IDNO then exit;
|
||
|
||
MgSvc_.ResetPersonalScan;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miRetryPiScanClick(Sender: TObject);
|
||
begin
|
||
if not MgSvc_.IsSearchingPersonalInfo then
|
||
MgSvc_.RetryPersonalScan;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_NOTIFY_HOOKDATA(var msg: TMessage);
|
||
var
|
||
sPath: String;
|
||
|
||
function GetVioInfo: ISuperObject;
|
||
var
|
||
EntList, InfoList: TStringList;
|
||
i: Integer;
|
||
REnt: TRecentFnd;
|
||
begin
|
||
Result := nil;
|
||
try
|
||
if MgSvc_.GetRecentFnd(sPath, REnt) then
|
||
begin
|
||
Guard(EntList, TStringList.Create);
|
||
SplitString(REnt.sFoundsC, RESULT_SEPARATOR, EntList);
|
||
|
||
Result := TSuperObject.Create(stArray);
|
||
var O: ISuperObject;
|
||
Guard(InfoList, TStringList.Create);
|
||
for i := 0 to EntList.Count - 1 do
|
||
begin
|
||
SplitString(EntList[i], '|', InfoList);
|
||
|
||
if InfoList.Count = 0 then
|
||
Continue;
|
||
|
||
if InfoList.Count > 2 then
|
||
begin
|
||
TTgTrace.T('[MGKIM] RULE_ID(%s), TEXT(%s), CNT(%s)', [InfoList[0], RemoveOverlapWords(InfoList[1]), InfoList[2]]);
|
||
// OutputDebugString(PChar(Format('[MGKIM] RULE_ID(%s), TEXT(%s), CNT(%s)', [InfoList[0], RemoveOverlapWords(InfoList[1]), InfoList[2]])));
|
||
O := SO;
|
||
O.S['RULE_ID'] := InfoList[0];
|
||
O.S['TEXT'] := RemoveOverlapWords(InfoList[1]);
|
||
O.S['CNT'] := InfoList[2];
|
||
Result.AsArray.Add(O);
|
||
// end
|
||
// else
|
||
// begin
|
||
// // [2] '|' 가 없거나 부족한 경우 (예: "단일텍스트" 만 들어온 경우)
|
||
// // InfoList[0]만 안전하게 사용합니다.
|
||
// TTgTrace.T('[MGKIM] NO_DELIMITER TEXT(%s)', [InfoList[0]]);
|
||
// O.S['RULE_ID'] := '휴대폰번호'; // 기본값
|
||
// O.S['TEXT'] := InfoList[0]; // 원본 텍스트 전체를 TEXT로 취급
|
||
// O.S['CNT'] := '1'; // 카운트는 빈 값
|
||
// Result.AsArray.Add(O);
|
||
end;
|
||
end;
|
||
end;
|
||
except
|
||
// ..
|
||
end;
|
||
end;
|
||
|
||
function GetFileExtractResultInfo: string;
|
||
var
|
||
REnt: TRecentFnd;
|
||
begin
|
||
Result := '';
|
||
try
|
||
if MgSvc_.GetRecentFnd(sPath, REnt) then
|
||
begin
|
||
if Pos(RESULT_SEPARATOR, REnt.sFoundsC) = 0 then
|
||
begin
|
||
TTgTrace.T('[MGKIM] GetFileExtractResultInfo.. sFoundsC(%s)', [REnt.sFoundsC]);
|
||
Result:= REnt.sFoundsC;
|
||
end;
|
||
end;
|
||
except
|
||
// ..
|
||
end;
|
||
end;
|
||
|
||
var
|
||
dwType, dwPid: DWORD;
|
||
O: ISuperObject;
|
||
sPName,
|
||
sWebTitle, sTemp,
|
||
sMsg, sCode: String;
|
||
bPrevent, bLog,
|
||
bPopup, bCollectTxt, bCollectFile: Boolean;
|
||
Rcv: IRcvPacket;
|
||
PO: TPrefModel;
|
||
nMinMB, nLimitMB, nFType: Integer;
|
||
llSize: LONGLONG;
|
||
i: Integer;
|
||
FDeviceName: string;
|
||
begin
|
||
try
|
||
// TTgTrace.T('process_WM_NOTIFY_HOOKDATA .. 1');
|
||
Rcv := IRcvPacket(msg.LParam);
|
||
|
||
sPName := Rcv.S['MdName'];
|
||
sPath := Rcv.S['FPath'];
|
||
nFType := Rcv.I['FType']; // 0 : 없는 파일, 1: 존재 파일, 2 : 네트워크 파일, 3 : 특수 경로 파일
|
||
dwPid := Rcv.I['PID'];
|
||
FDeviceName := Rcv.S['FDeviceName'];
|
||
// WebEx에서는 첨부 파일 접근이 지속적으로 반복되서 로그가 중복되는 현상이 있다.
|
||
// 아래처럼 방지 처리
|
||
|
||
if FileAbLogs_.Count > 0 then
|
||
begin
|
||
for i := FileAbLogs_.Count - 1 downto 0 do
|
||
begin
|
||
if (GetTickCount - DWORD(FileAbLogs_.Objects[i])) > 5000 then
|
||
FileAbLogs_.Delete(i);
|
||
end;
|
||
end;
|
||
|
||
if CompareText(sPName, 'CiscoCollabHost.exe') = 0 then
|
||
begin
|
||
for i := 0 to FileAbLogs_.Count - 1 do
|
||
begin
|
||
if (CompareText(FileAbLogs_[i], sPath) = 0) and
|
||
((GetTickCount - DWORD(FileAbLogs_.Objects[i])) <= 5000) then exit;
|
||
end;
|
||
|
||
FileAbLogs_.AddObject(sPath, TObject(GetTickCount));
|
||
end;
|
||
// -----------------------------------------------------------------------------
|
||
|
||
if CompareText(sPName, 'msedgewebview2.exe') = 0 then
|
||
begin
|
||
// 부모 프로세스 이름도 포함
|
||
var dwPPid: DWORD := GetProcessPPidByPid(dwPid);
|
||
if dwPPid <> 0 then
|
||
begin
|
||
var sPPName: String := GetProcessNameByPid(dwPPid);
|
||
if sPPName <> '' then
|
||
sPName := Format('%s > %s', [sPPName, sPName]);
|
||
end;
|
||
end;
|
||
|
||
// TTgTrace.T('process_WM_NOTIFY_HOOKDATA .. 2');
|
||
|
||
// 연속으로 처리되는 현상 개선 23_1205 13:39:04 kku
|
||
if sPath = sRecentABFile_ then
|
||
begin
|
||
if (GetTickCount - dwRecentAB_) < 15000 then
|
||
exit;
|
||
dwRecentAB_ := GetTickCount;
|
||
end else begin
|
||
sRecentABFile_ := sPath;
|
||
dwRecentAB_ := GetTickCount;
|
||
end;
|
||
|
||
O := SO;
|
||
O.S['PName'] := sPName;
|
||
O.S['Path'] := sPath;
|
||
if MutexExists('Global\' + StringReplace(sPName + '|' + sPath, '\', '', [rfReplaceAll])) then
|
||
exit;
|
||
|
||
// TTgTrace.T('process_WM_NOTIFY_HOOKDATA .. 3');
|
||
|
||
sMsg := '';
|
||
sCode := '';
|
||
sWebTitle := '';
|
||
bPrevent := false;
|
||
bLog := true;
|
||
bPopup := false;
|
||
bCollectTxt := false;
|
||
bCollectFile := false;
|
||
|
||
try
|
||
PO := MgSvc_.ModePolicy;
|
||
|
||
if (sLastNotExistFile_ <> '') and (CompareText(sLastNotExistFile_, sPath) = 0) then
|
||
begin
|
||
// 최근 체크한 파일이 없는 파일이고, 지금 처리하려는 파일명과 동일하고, 다운로드 차단이 OFF 면무시
|
||
// WebEx (CiscoCollabHost.exe)에서 다운로드 동작 시 이렇게 동작해서 무시하기 위해 추가 25_0508 15:30:16 kku
|
||
case TCurAppType(Rcv.I['Info']) of
|
||
catOutlook : if not PO.OutlookAB.bWriteBlock then exit;
|
||
catWebb : if not PO.WebbAB.bWriteBlock then exit;
|
||
else if not PO.EtcAB.bWriteBlock then exit;
|
||
end;
|
||
end;
|
||
|
||
if TCurAppType(Rcv.I['Info']) = catWebb then
|
||
begin
|
||
if CUSTOMER_TYPE = CUSTOMER_WINSTN then
|
||
begin
|
||
// 특정 PC에서 c:\.png 이런 형식의 오탐 무시 (5512) 25_1209 16:22:05 kku
|
||
sTemp := ExtractFileName(sPath);
|
||
if (sTemp <> '') and (sTemp[1] = '.') and (ExtractFileName(sPath).Length < 5) then
|
||
exit;
|
||
end;
|
||
|
||
if Rcv.I['Noti'] = NOTI_HOOK_BLOCK_ATTACH then
|
||
begin
|
||
var sTmName: String := ExtractFileName(sPath.ToLower);
|
||
if (sTmName = 'zone.identifier') or sTmName.EndsWith(':zone.identifier') then // ADS 파일로 인식되는건 무시
|
||
exit;
|
||
|
||
// 브라우저 파일 차단에서 exe 실행 시 첨부 차단으로 팝업되는 현상 확인, 무시 (5546) 25_1215 15:19:33 kku
|
||
// if sTmName.StartsWith('mxxod') and sTmName.EndsWith('.exe') then
|
||
if sTmName.EndsWith('.exe') then
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
nMinMB := 0;
|
||
nLimitMB := 20;
|
||
case Rcv.I['Noti'] of
|
||
// NOTI_HOOK_MONITOR_PRINT_WATER : dwType := TYPE_MSG_EVENT_PRINTWATER; // 사용하지 않음 22_1025 18:01:15 kku
|
||
NOTI_HOOK_MONITOR_ATTACH :
|
||
begin
|
||
case TCurAppType(Rcv.I['Info']) of
|
||
catOutlook :
|
||
begin
|
||
nMinMB := PO.OutABMinMB;
|
||
nLimitMB := PO.OutABLimitMB;
|
||
if PO.OutlookAB.bPopup then
|
||
begin
|
||
O.B['M'] := true;
|
||
// bPopup := true;
|
||
bPopup := PO.OutlookAB.Kind = abkLog; // true; // 차단만 알림 팝업되도록 기능 수정 24_0820 14:32:50 kku
|
||
end;
|
||
|
||
bCollectTxt := PO.OutlookAB.bCollectTxt;
|
||
bCollectFile := PO.OutlookAB.bCollectFile;
|
||
sCode := MONITOR_OUTLOOK_ATTACH;
|
||
|
||
sMsg := Format('Process : %s, Path : %s', [sPName, sPath]);
|
||
end;
|
||
catWebb :
|
||
begin
|
||
nMinMB := PO.WebABMinMB;
|
||
nLimitMB := PO.WebABLimitMB;
|
||
|
||
var sUrl: String := '';
|
||
if (MgSvc_ <> nil) and (MgSvc_.ThdWebUrl <> nil) then
|
||
begin
|
||
sUrl := MgSvc_.ThdWebUrl.LastUrl;
|
||
sWebTitle := MgSvc_.ThdWebUrl.LastTitle;
|
||
end;
|
||
|
||
if (Length(sUrl) < 2) or (sUrl[2] = ':') then
|
||
exit;
|
||
|
||
// todo : "PO.WebbAB.bLogOnly" 알림 세부 정책 추가 시 삭제해야함 23_0403 13:59:37 kku
|
||
if IsDivPopup then
|
||
begin
|
||
// 공통 적용 전까지 이렇게 사용 25_0701 15:38:26 kku
|
||
if PO.WebAAllowNoti then
|
||
begin
|
||
O.B['M'] := true;
|
||
bPopup := true;
|
||
end;
|
||
end else begin
|
||
if PO.WebbAB.bPopup then
|
||
begin
|
||
O.B['M'] := true;
|
||
// bPopup := true;
|
||
bPopup := PO.WebbAB.Kind = abkLog; // true; // 차단만 알림 팝업되도록 기능 수정 24_0820 14:32:50 kku
|
||
end;
|
||
end;
|
||
|
||
case nFType of
|
||
0 :
|
||
if PO.WebbAB.bWriteBlock then
|
||
begin
|
||
bLog := PO.WebbAB.bDlAllowLog;
|
||
bCollectTxt := PO.WebbAB.bDlColAllowTxt;
|
||
bCollectFile := PO.WebbAB.bDlColAllowFile;
|
||
sCode := MONITOR_WEB_DOWNLOAD;
|
||
end;
|
||
1 :
|
||
if PO.WebbAB.bReadBlock then
|
||
begin
|
||
bLog := PO.WebbAB.bUpAllowLog;
|
||
bCollectTxt := PO.WebbAB.bUpColAllowTxt;
|
||
bCollectFile := PO.WebbAB.bUpColAllowFile;
|
||
sCode := MONITOR_WEB_ATTACH;
|
||
end;
|
||
2 :
|
||
begin
|
||
bLog := PO.WebbAB.bUpBlockLog;
|
||
if FileExists(sPath) then
|
||
sCode := MONITOR_WEB_ATTACH
|
||
else
|
||
sCode := MONITOR_WEB_DOWNLOAD;
|
||
end;
|
||
else
|
||
begin
|
||
TTgTrace.T('process_WM_NOTIFY_HOOKDATA() .. FType=%d, Path=%s', [nFType, sPath]);
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
if not bLog then
|
||
begin
|
||
sTemp := PO.WebABLogUrlList;
|
||
if sTemp <> '' then
|
||
begin
|
||
// 허용 로그 남겨야 하는 URL인지 체크 25_0529 15:54:16 kku
|
||
var sChk: String := UpperCase(sUrl);
|
||
var ExpList: TStringList;
|
||
Guard(ExpList, TStringList.Create);
|
||
SplitString(UpperCase(sTemp), '|', ExpList);
|
||
for i := 0 to ExpList.Count - 1 do
|
||
begin
|
||
if Pos(ExpList[i], sChk) > 0 then
|
||
begin
|
||
bLog := true;
|
||
break;
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
// sCode := MONITOR_WEB_ATTACH_UPDOWN;
|
||
|
||
if sRecentBwUrl_ = '' then
|
||
sRecentBwUrl_ := MgSvc_.ThdWebUrl.LastUrl;
|
||
|
||
if sRecentBwUrl_ <> '' then
|
||
sMsg := Format('Process : %s, Path : %s, URL : %s', [sPName, sPath, sRecentBwUrl_])
|
||
else
|
||
sMsg := Format('Process : %s, Path : %s', [sPName, sPath]);
|
||
end;
|
||
else begin
|
||
// if (PO.EtcAB.Kind <> abkLog) and not PO.IsAllowLogAppAB then
|
||
// exit;
|
||
|
||
nMinMB := PO.AppABMinMB;
|
||
nLimitMB := PO.AppABLimitMB;
|
||
|
||
if IsDivPopup then
|
||
begin
|
||
// 공통 적용 전까지 이렇게 사용 25_0701 15:38:26 kku
|
||
if PO.AppAAllowNoti then
|
||
begin
|
||
O.B['M'] := true;
|
||
bPopup := true;
|
||
end;
|
||
end else begin
|
||
if PO.EtcAB.bPopup then
|
||
begin
|
||
O.B['M'] := true;
|
||
// bPopup := true;
|
||
bPopup := PO.EtcAB.Kind = abkLog; // true; // 차단만 알림 팝업되도록 기능 수정 24_0820 14:32:50 kku
|
||
end;
|
||
end;
|
||
|
||
if (Pos('>', sPName) > 0) or (GetFileExt(sPath).ToUpper = 'CRSWAP') then
|
||
begin
|
||
// new 아웃룩 다운로드 시도 감지 25_0923 14:19:40 kku
|
||
if FileExists(CutFileExt(sPath)) then
|
||
nFType := 0;
|
||
end;
|
||
|
||
case nFType of
|
||
0 :
|
||
if PO.EtcAB.bWriteBlock then
|
||
begin
|
||
bLog := PO.EtcAB.bDlAllowLog;
|
||
bCollectTxt := PO.EtcAB.bDlColAllowTxt;
|
||
bCollectFile := PO.EtcAB.bDlColAllowFile;
|
||
sCode := MONITOR_PROCESS_DOWNLOAD;
|
||
end;
|
||
1 :
|
||
if PO.EtcAB.bReadBlock then
|
||
begin
|
||
bLog := PO.EtcAB.bUpAllowLog;
|
||
bCollectTxt := PO.EtcAB.bUpColAllowTxt;
|
||
bCollectFile := PO.EtcAB.bUpColAllowFile;
|
||
sCode := MONITOR_PROCESS_ATTACH;
|
||
end;
|
||
2 :
|
||
begin
|
||
bLog := PO.EtcAB.bUpBlockLog;
|
||
if FileExists(sPath) then
|
||
sCode := MONITOR_PROCESS_ATTACH
|
||
else
|
||
sCode := MONITOR_PROCESS_DOWNLOAD;
|
||
end;
|
||
else
|
||
begin
|
||
TTgTrace.T('process_WM_NOTIFY_HOOKDATA() .. FType=%d, Path=%s', [nFType, sPath]);
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
if not bLog then
|
||
begin
|
||
sTemp := PO.EtcAbLogList;
|
||
if sTemp <> '' then
|
||
begin
|
||
// 허용 로그 남겨야 하는 URL인지 체크 25_0529 15:54:16 kku
|
||
var sChk: String := UpperCase(sPName);
|
||
var ExpList: TStringList;
|
||
Guard(ExpList, TStringList.Create);
|
||
SplitString(UpperCase(sTemp), '|', ExpList);
|
||
for i := 0 to ExpList.Count - 1 do
|
||
begin
|
||
if Pos(ExpList[i], sChk) > 0 then
|
||
begin
|
||
bLog := true;
|
||
break;
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
// sCode := MONITOR_PROCESS_ATTACH_UPDOWN;
|
||
if FDeviceName <> '' then
|
||
sMsg := Format('[%s] Process : %s, Path : %s', [FDeviceName, sPName, sPath])
|
||
else
|
||
sMsg := Format('Process : %s, Path : %s', [sPName, sPath]);
|
||
|
||
end;
|
||
end;
|
||
|
||
if MgSvc_.IsNewApi then
|
||
begin
|
||
var LogInfo: TLogInfo;
|
||
var FileExtractResultInfo: string;
|
||
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
FileExtractResultInfo := GetFileExtractResultInfo;
|
||
|
||
LogInfo.sCode := sCode;
|
||
|
||
if FileExtractResultInfo <> '' then
|
||
LogInfo.sSummary := LogInfo.sSummary + sMsg + ' ErrorCode : ' + FileExtractResultInfo
|
||
else
|
||
LogInfo.sSummary := sMsg;
|
||
|
||
LogInfo.sAppName := sPName;
|
||
LogInfo.sPath := sPath;
|
||
LogInfo.OVio := GetVioInfo;
|
||
if sWebTitle <> '' then
|
||
LogInfo.sDevName := sWebTitle;
|
||
|
||
if bCollectTxt then
|
||
LogInfo.sBody := ExtrTextFromFile(sPath);
|
||
|
||
if (TCurAppType(Rcv.I['Info']) = catWebb) and (sRecentBwUrl_ <> '') then
|
||
begin
|
||
LogInfo.sDestIpUrl := sRecentBwUrl_;
|
||
O.S['URL'] := LogInfo.sDestIpUrl;
|
||
sRecentBwUrl_ := '';
|
||
end;
|
||
|
||
// 열기 감지 조건이 추가되면 지연 팝업 사용할 필요 없음 25_0228 10:13:00 kku
|
||
if not MgSvc_.PrefModel.OpenDetect then
|
||
begin
|
||
if (TCurAppType(Rcv.I['Info']) = catWebb) and
|
||
ThdWebOC_.AddEnt(@LogInfo, bPrevent, bLog, bPopup, bCollectTxt, bCollectFile, nMinMB, nLimitMB, O.AsJSon) then exit;
|
||
end;
|
||
|
||
if bCollectFile then
|
||
begin
|
||
llSize := GetFileSize_path(sPath);
|
||
if (llSize >= (LONGLONG(nMinMB) * 1048576)) and (llSize <= (LONGLONG(nLimitMB) * 1048576)) then
|
||
begin
|
||
LogInfo.sFileCompId := MgSvc_.MakeComponentId(sPath);
|
||
MgSvc_.SendFile(LogInfo, 'quarantineLogCollect.do', sPath, nMinMB, nLimitMB);
|
||
end;
|
||
end;
|
||
|
||
if bLog then
|
||
MgSvc_.SendEventLogEx(@LogInfo, bPrevent);
|
||
|
||
// 첨부 후 대상 파일 암호화... 막음 24_0710 10:39:05 kku
|
||
// if CUSTOMER_TYPE = CUSTOMER_TMAP then
|
||
// MgSvc_.ThdResp.AddEnt(crtDRM, sPath);
|
||
end else
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, sCode, sMsg, bPrevent);
|
||
|
||
dwType := TYPE_MSG_PREVENT_ATTACHFILE;
|
||
end;
|
||
NOTI_HOOK_BLOCK_ATTACH :
|
||
begin
|
||
// 파일 모니터링의 경우 연속적으로 사용이 발생할 수 있어서
|
||
// 1.5초 동안 같은 파일은 거른다 22_1031 13:24:37 kku
|
||
if (sChkAbMon_ = Rcv.S['FPath']) and
|
||
((GetTickCount - dwChkAbMon_) < 1500) then exit;
|
||
|
||
dwChkAbMon_ := GetTickCount;
|
||
sChkAbMon_ := Rcv.S['FPath'];
|
||
bPrevent := true;
|
||
|
||
nLimitMB := 20;
|
||
case TCurAppType(Rcv.I['Info']) of
|
||
catOutlook :
|
||
begin
|
||
nMinMB := PO.OutABMinMB;
|
||
nLimitMB := PO.OutABLimitMB;
|
||
sCode := PREVENT_OUTLOOK_ATTACH;
|
||
sMsg := Format('Process : %s, Path : %s', [sPName, sPath]);
|
||
|
||
bCollectTxt := PO.OutlookAB.bCollectTxt;
|
||
bCollectFile := PO.OutlookAB.bCollectFile;
|
||
bPopup := true;
|
||
end;
|
||
catWebb :
|
||
begin
|
||
nMinMB := PO.WebABMinMB;
|
||
nLimitMB := PO.WebABLimitMB;
|
||
// sCode := PREVENT_WEB_ATTACH_UPDOWN;
|
||
|
||
if PO.WebbAB.bReadBlock and not PO.WebbAB.bWriteBlock then
|
||
begin
|
||
var sChk: String := sPath.ToUpper;
|
||
var sExt: String := GetFileExt(sChk);
|
||
var sFName: String := ExtractFileName(sChk);
|
||
|
||
// 브라우저에서 다운로드 할때 .crdownload 파일 읽기차단 되는거 로그/팝업 거르기 24_0123 08:59:30 kku
|
||
if GetFileExt(sChk) = 'CRDOWNLOAD' then
|
||
exit;
|
||
|
||
if (sExt = 'TMP') and (CountStr(sFName, '-') = 4) then
|
||
exit;
|
||
end;
|
||
|
||
var sUrl: String := '';
|
||
if (MgSvc_ <> nil) and (MgSvc_.ThdWebUrl <> nil) then
|
||
begin
|
||
sUrl := MgSvc_.ThdWebUrl.LastUrl;
|
||
sWebTitle := MgSvc_.ThdWebUrl.LastTitle;
|
||
end;
|
||
|
||
if (sRecentBwUrl_ = '') and (sUrl <> '') then
|
||
sRecentBwUrl_ := MgSvc_.ThdWebUrl.LastUrl;
|
||
|
||
if sRecentBwUrl_ <> '' then
|
||
sMsg := Format('Process : %s, Path : %s, URL : %s', [sPName, sPath, sRecentBwUrl_])
|
||
else
|
||
sMsg := Format('Process : %s, Path : %s', [sPName, sPath]);
|
||
|
||
case nFType of
|
||
0 :
|
||
if PO.WebbAB.bWriteBlock then
|
||
begin
|
||
bLog := PO.WebbAB.bDlBlockLog;
|
||
bCollectTxt := false;
|
||
bCollectFile := false;
|
||
sCode := PREVENT_WEB_DOWNLOAD;
|
||
end;
|
||
1 :
|
||
if PO.WebbAB.bReadBlock then
|
||
begin
|
||
bLog := PO.WebbAB.bUpBlockLog;
|
||
bCollectTxt := PO.WebbAB.bUpColBlockTxt;
|
||
bCollectFile := PO.WebbAB.bUpColBlockFile;
|
||
sCode := PREVENT_WEB_ATTACH;
|
||
end;
|
||
2 :
|
||
begin
|
||
bLog := PO.WebbAB.bUpBlockLog;
|
||
if FileExists(sPath) then
|
||
sCode := PREVENT_WEB_ATTACH
|
||
else
|
||
sCode := PREVENT_WEB_DOWNLOAD;
|
||
end;
|
||
else
|
||
begin
|
||
TTgTrace.T('process_WM_NOTIFY_HOOKDATA() .. FType=%d, Path=%s', [nFType, sPath]);
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
// bCollectTxt := PO.WebbAB.bCollectTxt;
|
||
// bCollectFile := PO.WebbAB.bCollectFile and not PO.IsIgrCollectCutWebAB;
|
||
bPopup := PO.WebbAB.bPopup;
|
||
end;
|
||
else begin
|
||
if CompareText('wechat.exe', sPName) = 0 then
|
||
begin
|
||
// 위챗은 첨부 시 전송 다열로그가 뜨는데 훅으로 차단을 해도 이 다열로그를 통해서 전송이 된다.
|
||
// 다열로그 찾아서 닫도록 보완 25_0409 15:07:35 kku
|
||
var h: HWND := FindWindow('DragAttachWnd', nil);
|
||
if h <> 0 then
|
||
PostMessage(h, WM_CLOSE, 0, 0);
|
||
end;
|
||
|
||
nMinMB := PO.AppABMinMB;
|
||
nLimitMB := PO.AppABLimitMB;
|
||
// sCode := PREVENT_PROCESS_ATTACH_UPDOWN;
|
||
|
||
if FDeviceName <> '' then
|
||
sMsg := Format('[%s] Process : %s, Path : %s', [FDeviceName, sPName, sPath])
|
||
else
|
||
sMsg := Format('Process : %s, Path : %s', [sPName, sPath]);
|
||
|
||
if (Pos('>', sPName) > 0) or (GetFileExt(sPath).ToUpper = 'CRSWAP') then
|
||
begin
|
||
// new 아웃룩 다운로드 시도 감지 25_0923 14:19:40 kku
|
||
if FileExists(CutFileExt(sPath)) then
|
||
nFType := 0;
|
||
end;
|
||
|
||
case nFType of
|
||
0 :
|
||
if PO.EtcAB.bWriteBlock then
|
||
begin
|
||
bLog := PO.EtcAB.bDlBlockLog;
|
||
bCollectTxt := false;
|
||
bCollectFile := false;
|
||
sCode := PREVENT_PROCESS_DOWNLOAD;
|
||
end;
|
||
1 :
|
||
if PO.EtcAB.bReadBlock then
|
||
begin
|
||
bLog := PO.EtcAB.bUpBlockLog;
|
||
bCollectTxt := PO.EtcAB.bUpColBlockTxt;
|
||
bCollectFile := PO.EtcAB.bUpColBlockFile;
|
||
sCode := PREVENT_PROCESS_ATTACH;
|
||
end;
|
||
2 :
|
||
begin
|
||
bLog := PO.EtcAB.bUpBlockLog;
|
||
if FileExists(sPath) then
|
||
sCode := PREVENT_PROCESS_ATTACH
|
||
else
|
||
sCode := PREVENT_PROCESS_DOWNLOAD;
|
||
end;
|
||
else
|
||
begin
|
||
TTgTrace.T('process_WM_NOTIFY_HOOKDATA() .. FType=%d, Path=%s', [nFType, sPath]);
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
// bCollectTxt := PO.EtcAB.bCollectTxt;
|
||
// bCollectFile := PO.EtcAB.bCollectFile and not PO.IsIgrCollectCutAppAB;
|
||
bPopup := PO.EtcAB.bPopup;
|
||
end;
|
||
end;
|
||
|
||
if MgSvc_.IsNewApi then
|
||
begin
|
||
var LogInfo: TLogInfo;
|
||
var FileExtractResultInfo: string;
|
||
FileExtractResultInfo := GetFileExtractResultInfo;
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
LogInfo.sCode := sCode;
|
||
if FileExtractResultInfo <> '' then
|
||
LogInfo.sSummary := LogInfo.sSummary + sMsg + ' Error:' + FileExtractResultInfo
|
||
else
|
||
LogInfo.sSummary := sMsg;
|
||
|
||
LogInfo.sAppName := sPName;
|
||
LogInfo.sPath := sPath;
|
||
LogInfo.OVio := GetVioInfo;
|
||
if sWebTitle <> '' then
|
||
LogInfo.sDevName := sWebTitle;
|
||
|
||
if (TCurAppType(Rcv.I['Info']) = catWebb) and (sRecentBwUrl_ <> '') then
|
||
begin
|
||
LogInfo.sDestIpUrl := sRecentBwUrl_;
|
||
O.S['URL'] := LogInfo.sDestIpUrl;
|
||
sRecentBwUrl_ := '';
|
||
end;
|
||
|
||
// 열기 감지 조건이 추가되면 지연 팝업 사용할 필요 없음 25_0228 10:13:00 kku
|
||
if not MgSvc_.PrefModel.OpenDetect then
|
||
begin
|
||
if (TCurAppType(Rcv.I['Info']) = catWebb) and
|
||
ThdWebOC_.AddEnt(@LogInfo, bPrevent, bLog, bPopup, bCollectTxt, bCollectFile, nMinMB, nLimitMB, O.AsJSon) then exit;
|
||
end;
|
||
|
||
if bCollectTxt then
|
||
begin
|
||
if Pos(GetFileExt(sPath).ToUpper, OCR_IMG_EXTS) > 0 then
|
||
LogInfo.sOcrBody := ExtrTextFromFile(sPath)
|
||
else
|
||
LogInfo.sBody := ExtrTextFromFile(sPath);
|
||
end;
|
||
|
||
if bCollectFile then
|
||
begin
|
||
llSize := GetFileSize_path(sPath);
|
||
if (llSize >= (LONGLONG(nMinMB) * 1048576)) and (llSize <= (LONGLONG(nLimitMB) * 1048576)) then
|
||
begin
|
||
LogInfo.sFileCompId := MgSvc_.MakeComponentId(sPath);
|
||
MgSvc_.SendFile(LogInfo, 'quarantineLogCollect.do', sPath, nMinMB, nLimitMB);
|
||
end;
|
||
end;
|
||
|
||
if bLog then
|
||
MgSvc_.SendEventLogEx(@LogInfo, bPrevent);
|
||
end else
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, sCode, sMsg, bPrevent);
|
||
|
||
dwType := TYPE_MSG_PREVENT_ATTACHFILE;
|
||
end;
|
||
NOTI_HOOK_OPEN_DRM :
|
||
begin
|
||
dwType := TYPE_MSG_EVENT_DRM_OPEN;
|
||
bPopup := IsDrmOpenPopup and not gMgSvc.PrefModel.DrmPopupNo;
|
||
var sChk: String := sPath.ToUpper;
|
||
if (Pos('\CONTENT.MSO\', sChk) > 0) or
|
||
(Pos('\TEMP\HNC\LOCALFILE\', sChk) > 0) then // MS, hwp 파일을 공유 폴더에서 열기 하면 여기에 임시 파일을 생성함 25_0226 09:22:53 kku
|
||
bPopup := false
|
||
else begin
|
||
var LogInfo: TLogInfo;
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
LogInfo.sCode := MONITOR_DRM_OPEN;
|
||
LogInfo.sSummary := Format('Process : %s, DocName : %s', [sPName, sPath]);
|
||
LogInfo.sAppName := sPName;
|
||
LogInfo.sPath := sPath;
|
||
if gMgSvc.IsNewApi then
|
||
gMgSvc.SendEventLogEx(@LogInfo, false)
|
||
else
|
||
gMgSvc.SendEventLog(URI_USER_ACTION, MONITOR_DRM_OPEN, Format('Process : %s, DocName : %s', [sPName, sPath]), false)
|
||
end;
|
||
end;
|
||
NOTI_HOOK_OPEN_DOC :
|
||
begin
|
||
// 열람 감지 변경으로 일단 사용하지 않음 25_1216 09:57:31 kku
|
||
TTgTrace.T('문서 열람 감지 : Process=%s, Doc=%s', [sPName, sPath], 1);
|
||
PO := MgSvc_.ModePolicy;
|
||
if (PO.FileMon.Kind <> fmkNone) and PO.FileOpenMon then
|
||
begin
|
||
if (Pos(GetFileExt(sPath).ToUpper, UpperCase(PO.FileMon.sExts)) > 0) and
|
||
MgSvc_.AddOpenDoc(dwPid, sPath) then
|
||
begin
|
||
var LogInfo: TLogInfo;
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
LogInfo.sCode := LOGCODE_PREVENT_FILEMONITOR;
|
||
LogInfo.sSummary := Format('[Open] %s', [sPath]);
|
||
LogInfo.sAppName := sPName;
|
||
LogInfo.sPath := sPath;
|
||
if gMgSvc.IsNewApi then
|
||
gMgSvc.SendEventLogEx(@LogInfo, false);
|
||
|
||
if MgSvc_.ModePolicy.FileMon.IsNoti then
|
||
gMgSvc.PopupMessage(TYPE_MSG_PREVENT_FILECHANGE, LogInfo.sSummary);
|
||
end;
|
||
end;
|
||
end;
|
||
// NOTI_HOOK_PRINT_API_START_INIT :
|
||
// begin
|
||
// TTgTrace.T('PrintAPI-Init .. PID=%d', [dwPid], 1);
|
||
// end;
|
||
NOTI_HOOK_OPEN_DRM_NO_MODIFY :
|
||
begin
|
||
dwType := TYPE_MSG_EVENT_DRM_OPEN_NO_MODIFY;
|
||
bPopup := IsDrmOpenPopup and not gMgSvc.PrefModel.DrmPopupNo;
|
||
var sChk: String := sPath.ToUpper;
|
||
if (Pos('\CONTENT.MSO\', sChk) > 0) or
|
||
(Pos('\TEMP\HNC\LOCALFILE\', sChk) > 0) then // MS, hwp 파일을 공유 폴더에서 열기 하면 여기에 임시 파일을 생성함 25_0226 09:22:53 kku
|
||
bPopup := false
|
||
else begin
|
||
var LogInfo: TLogInfo;
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
LogInfo.sCode := MONITOR_DRM_OPEN;
|
||
LogInfo.sSummary := Format('Process : %s, DocName : %s', [sPName, sPath]);
|
||
LogInfo.sAppName := sPName;
|
||
LogInfo.sPath := sPath;
|
||
if gMgSvc.IsNewApi then
|
||
gMgSvc.SendEventLogEx(@LogInfo, false)
|
||
else
|
||
gMgSvc.SendEventLog(URI_USER_ACTION, MONITOR_DRM_OPEN, Format('Process : %s, DocName : %s', [sPName, sPath]), false)
|
||
end;
|
||
end;
|
||
NOTI_HOOK_BLOCK_DRM :
|
||
begin
|
||
dwType := TYPE_MSG_EVENT_DRM_BLOCK;
|
||
bPopup := true;
|
||
end;
|
||
NOTI_HOOK_BLOCK_DRM_CT :
|
||
begin
|
||
dwType := TYPE_MSG_EVENT_DRM_BLOCK_CT;
|
||
bPopup := true;
|
||
end;
|
||
NOTI_HOOK_BLOCK_MTP_WRITE :
|
||
begin
|
||
var LogInfo: TLogInfo;
|
||
ZeroMemory(@LogInfo, SizeOf(LogInfo));
|
||
LogInfo.sCode := LOGCODE_PREVENT_MTP;
|
||
LogInfo.sSummary := 'MTP - Block file writes';
|
||
LogInfo.sAppName := sPName;
|
||
// LogInfo.sPath := sPath;
|
||
LogInfo.sDevSerial := sPath;
|
||
MgSvc_.SendEventLogEx(@LogInfo, bPrevent);
|
||
|
||
dwType := TYPE_MSG_MTP_WRITE_BLOCK;
|
||
bPopup := false; // MgSvc_.ModePolicy.MTPPopup;
|
||
end;
|
||
else
|
||
begin
|
||
TTgTrace.T('process_WM_NOTIFY_HOOKDATA() .. Unknown=%d', [msg.WParam]);
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
if bPopup then
|
||
MgSvc_.PopupMessage(dwType, O.AsJSon);
|
||
finally
|
||
sLastNotExistFile_ := '';
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_NOTIFY_HOOKDATA()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_REQ_AGENT_UNINSTALL(var msg: TMessage);
|
||
begin
|
||
DoAgentUninstall;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_INIT_HLEPER(var msg: TMessage);
|
||
begin
|
||
try
|
||
case msg.WParam of
|
||
HLP_ROLE_WINDOWS_UPDATE_SCAN :
|
||
begin
|
||
if MgSvc_.ThdOsUpdateScan <> nil then
|
||
MgSvc_.ThdOsUpdateScan.RcvWnd := msg.LParam
|
||
end;
|
||
|
||
HPCMD_REQ_NETDIR_SCAN :
|
||
begin
|
||
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_INIT_HLEPER()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_RESPONSE_HLEPER(var msg: TMessage);
|
||
begin
|
||
try
|
||
case msg.WParam of
|
||
HLP_ROLE_WINDOWS_UPDATE_SCAN : MgSvc_.SetPatchUpdate(msg.LParam = 0);
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_RESPONSE_HLEPER()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_REQUEST_DRM(var msg: TMessage);
|
||
var
|
||
sPath, sExe, sParam: String;
|
||
O: ISuperObject;
|
||
i: Integer;
|
||
PO: TPrefModel;
|
||
begin
|
||
try
|
||
TTgTrace.T('process_WM_REQUEST_DRM() ..');
|
||
sPath := GetRunExePath;
|
||
if sPath = '' then
|
||
exit;
|
||
|
||
sPath := sPath[1] + ':\ProgramData\HE\Task\bs1.$shl';
|
||
if LoadJsonObjFromFile(O, sPath) then
|
||
begin
|
||
DeleteFile(sPath);
|
||
|
||
if (O.O['Files'] = nil) or (O.O['Files'].DataType <> stArray) then
|
||
begin
|
||
TTgTrace.T('process_WM_REQUEST_DRM() .. Invalid Files ..');
|
||
exit;
|
||
end;
|
||
|
||
if O.A['Files'].Length = 0 then
|
||
begin
|
||
TTgTrace.T('process_WM_REQUEST_DRM() .. Empty ..');
|
||
exit;
|
||
end;
|
||
|
||
case O.I['Cmd'] of
|
||
1 :
|
||
begin
|
||
TTgTrace.T('process_WM_REQUEST_DRM() .. Encrypt ..');
|
||
|
||
if NotUseDRM then
|
||
exit;
|
||
|
||
if CUSTOMER_TYPE = CUSTOMER_BLUECORNER then
|
||
begin
|
||
sExe := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
PO := MgSvc_.ModePolicy;
|
||
|
||
var OA: ISuperObject := O.O['Files'];
|
||
|
||
O := SO;
|
||
O.I['Cmd'] := HPCMD_OPEN_ENCRYPT;
|
||
O.S['WinCap'] := APP_TITLE;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['CT'] := CUSTOMER_TYPE;
|
||
O.S['UName'] := MgSvc_.UName;
|
||
O.S['Dept'] := MgSvc_.DeptName;
|
||
if O.S['Dept'] = '' then
|
||
O.S['Dept'] := PO.DeptName;
|
||
O.S['EN'] := MgSvc_.EmpNo;
|
||
O.S['PON'] := PO.PolicyName;
|
||
O.O['Files'] := OA;
|
||
|
||
sParam := GetRunExePathDir + DIR_CONF + DAT_PARAM;
|
||
SaveJsonObjToFile(O, sParam);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sExe, Format('/p "%s"', [sParam]));
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
// DeleteFile(sParam);
|
||
end;
|
||
end else begin
|
||
if MessageBox(0, PChar(RS_Q_DRMENC),
|
||
PChar(APP_TITLE), MB_ICONQUESTION or MB_YESNO) = IDNO then exit;
|
||
|
||
var pEnt: PRstEnt;
|
||
var TgFList: TRstEntList;
|
||
Guard(TgFList, TRstEntList.Create);
|
||
for i := 0 to O.A['Files'].Length - 1 do
|
||
begin
|
||
New(pEnt);
|
||
pEnt.sFName := ExtractFileName(O.A['Files'].S[i]);
|
||
pEnt.sDir := ExtractFilePath(O.A['Files'].S[i]);
|
||
TgFList.Add(pEnt);
|
||
end;
|
||
|
||
var dlg: TDlgProgCttSchTask;
|
||
Guard(dlg, TDlgProgCttSchTask.Create(nil, cstkEnc, TgFList));
|
||
dlg.ShowModal;
|
||
end;
|
||
end;
|
||
2 :
|
||
begin
|
||
if NotUseDRM then
|
||
exit;
|
||
|
||
if not MgSvc_.ModePolicy.IsDrmDecrypt then
|
||
begin
|
||
MessageBox(0, PChar(RS_NoAuth), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
|
||
TTgTrace.T('process_WM_REQUEST_DRM() .. Decrypt ..');
|
||
// if CUSTOMER_TYPE = CUSTOMER_BLUECORNER then
|
||
begin
|
||
sExe := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
PO := MgSvc_.ModePolicy;
|
||
|
||
var OA: ISuperObject := O.O['Files'];
|
||
|
||
O := SO;
|
||
O.I['Cmd'] := HPCMD_OPEN_DECRYPT;
|
||
O.S['WinCap'] := APP_TITLE;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['CT'] := CUSTOMER_TYPE;
|
||
O.S['UName'] := MgSvc_.UName;
|
||
O.S['Dept'] := MgSvc_.DeptName;
|
||
if O.S['Dept'] = '' then
|
||
O.S['Dept'] := PO.DeptName;
|
||
O.S['EN'] := MgSvc_.EmpNo;
|
||
O.S['PON'] := PO.PolicyName;
|
||
O.B['AVAL'] := IsApproveSupport and gMgSvc.ModePolicy.DrmApproval;
|
||
O.O['Files'] := OA;
|
||
|
||
sParam := GetRunExePathDir + DIR_CONF + DAT_PARAM;
|
||
SaveJsonObjToFile(O, sParam);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sExe, Format('/p "%s"', [sParam]));
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
// DeleteFile(sParam);
|
||
end;
|
||
end;
|
||
// else begin
|
||
// var DrmList: TStringList;
|
||
// Guard(DrmList, TStringList.Create);
|
||
// for i := 0 to O.A['Files'].Length - 1 do
|
||
// DrmList.Add(O.A['Files'].S[i]);
|
||
//
|
||
// var dlg: TDlgDecryptDrm := TDlgDecryptDrm.Create(nil);
|
||
// dlg.AddFiles(DrmList);
|
||
// dlg.Show;
|
||
// end;
|
||
end;
|
||
3 :
|
||
begin
|
||
if O.S['Reason'] = '' then
|
||
begin
|
||
TTgTrace.T('process_WM_REQUEST_DRM() .. ReqExcept PrintWater .. 1');
|
||
SaveJsonObjToFile(O, sPath);
|
||
|
||
sExe := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
O := SO;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['Cmd'] := HPCMD_INPUT_EXCEPT_REASON;
|
||
O.S['WinCap'] := APP_TITLE;
|
||
O.S['Title'] := RS_ExpPrtWater;
|
||
O.S['Desc'] := RS_MsgExpPrtWater;
|
||
O.S['BtnOk'] := RS_OK;
|
||
SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sExe);
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
end;
|
||
|
||
exit;
|
||
end else begin
|
||
TTgTrace.T('process_WM_REQUEST_DRM() .. ReqExcept PrintWater .. 2');
|
||
var dtCreate, dtModify, dtAccess: TDateTime;
|
||
var OA: ISuperObject := TSuperObject.Create(stArray);
|
||
var OFile: ISuperObject;
|
||
|
||
for i := 0 to O.A['Files'].Length - 1 do
|
||
begin
|
||
sPath := O.A['Files'].S[i];
|
||
|
||
TTgTrace.T('프린트 워터마크 예외 등록중 .. Path=%s', [sPath], 3);
|
||
if MgSvc_.MgPwe.AddFileHash(sPath) then
|
||
begin
|
||
TTgTrace.T('프린트 워터마크 예외 등록 성공 .. Path=%s', [sPath], 3);
|
||
OFile := SO;
|
||
OFile.S['DOCNAME'] := ExtractFileName(sPath);
|
||
OFile.S['DOCPATH'] := ExtractFilePath(sPath);
|
||
OFile.S['DOCSIZE'] := IntToStr(GetFileSize_path(sPath));
|
||
if GetFileDateTime_Local(sPath, dtCreate, dtModify, dtAccess) then
|
||
OFile.S['DOCDATE'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', dtModify)
|
||
else
|
||
OFile.S['DOCDATE'] := '2000-12-31 12:00:00';
|
||
OA.AsArray.Add(OFile)
|
||
end else
|
||
TTgTrace.T('프린트 워터마크 예외 등록 실패 .. Path=%s, Count=%d', [sPath, MgSvc_.MgPwe.CountHash], 3);
|
||
end;
|
||
MgSvc_.MgPwe.Save;
|
||
|
||
if OA.AsArray.Length > 0 then
|
||
begin
|
||
var ExptInfo: TReqDevExceptInfo;
|
||
ZeroMemory(@ExptInfo, SizeOf(ExptInfo));
|
||
ExptInfo.ReqDevType := rdtPrintWater;
|
||
ExptInfo.sDevName := OA.AsString;
|
||
gMgSvc.SendRequest('', ExptInfo, O.S['Reason'], '', '', 0, 'Request PrintWater Except.');
|
||
|
||
MessageBox(Handle, PChar(Format('%d개의 파일이 예외 등록되었습니다.',
|
||
[OA.AsArray.Length])), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK);
|
||
end;
|
||
end;
|
||
end;
|
||
4 : // SC DRM -> AIP
|
||
begin
|
||
if O.A['Files'].Length = 0 then
|
||
exit;
|
||
|
||
sPath := O.A['Files'].S[0];
|
||
if not FileExists(sPath) then
|
||
exit;
|
||
|
||
case DSCheckDSAgent of
|
||
0 :
|
||
begin
|
||
MessageBox(Handle, PChar('소프트캠프 클라이언트가 실행되어 있지 않습니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
// exit;
|
||
end;
|
||
1 :
|
||
begin
|
||
MessageBox(Handle, PChar('소프트캠프 클라이언트가 로그인 되어 있지 않습니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
// exit;
|
||
end;
|
||
end;
|
||
|
||
var sScDecPath: String := 'C:\ProgramData\HE\Task\';
|
||
var sEncPath: String := 'C:\ProgramData\HE\Task\';
|
||
|
||
if not ForceDirectories(sScDecPath) then
|
||
begin
|
||
MessageBox(Handle, PChar('암호화를 준비하는 중 오류가 발생했습니다..1'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
sScDecPath := sScDecPath + Format('%d-sc_%s', [GetTickCount, ExtractFileName(sPath)]);
|
||
|
||
if DSCSIsEncryptedFile(sPath) = 1 then
|
||
begin
|
||
if DSCSDecryptFile(sPath, sScDecPath) = 1 then
|
||
begin
|
||
|
||
end else begin
|
||
MessageBox(Handle, PChar('소프트캠프 DRM 복호화를 실패했습니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
end else begin
|
||
// for TEST
|
||
if not FileExists(sScDecPath) then
|
||
begin
|
||
CopyFile(PChar(sPath), PChar(sScDecPath), false);
|
||
end;
|
||
MessageBox(Handle, PChar('소프트캠프 DRM 파일이 아닙니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
// exit;
|
||
end;
|
||
|
||
var h: HWND := MgSvc_.FindAipMdWnd;
|
||
if h <> 0 then
|
||
begin
|
||
if not ForceDirectories(sEncPath) then
|
||
begin
|
||
MessageBox(Handle, PChar('암호화를 준비하는 중 오류가 발생했습니다..2'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
sEncPath := ConvAipEncExt(sEncPath + Format('%d-dc_%s', [GetTickCount, ExtractFileName(sPath)]));
|
||
|
||
// var sAipPath := MgSvc_.GetAipPath;
|
||
// if not FileExists(sAipPath) then
|
||
// begin
|
||
// MessageBox(Handle, PChar('AIP 모듈을 찾을 수 없습니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
// exit;
|
||
// end;
|
||
//
|
||
// ExecuteAppWaitUntilTerminate(sAipPath, Format('-l "%s" "%s" "a5b98469-3cf3-4f5e-ad43-b098cf00ed03"', [sScDecPath, sEncPath]), SW_HIDE);
|
||
// if FileExists(sEncPath) then
|
||
// begin
|
||
// if DeleteFileForce(sPath) then
|
||
// begin
|
||
// if CopyFile(PChar(sEncPath), PChar(sPath), false) then // 이거 실패 대비를 해야 할까... 23_1024 09:04:08 kku
|
||
// begin
|
||
// DeleteFile_wait(sEncPath);
|
||
// MessageBox(Handle, PChar('AIP 암호화가 완료되었습니다.'), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK);
|
||
// end;
|
||
// end;
|
||
// end else begin
|
||
// DeleteFile_wait(sEncPath);
|
||
// end;
|
||
|
||
O := SO;
|
||
O.S['src'] := sScDecPath;
|
||
O.S['dst'] := sEncPath;
|
||
O.S['lid'] := 'a5b98469-3cf3-4f5e-ad43-b098cf00ed03';
|
||
if (MgSvc_ <> nil) and (MgSvc_.Email <> '') then
|
||
O.S['mail'] := gMgSvc.Email;
|
||
var nResult: Integer := SendData(h, 5, O.AsString);
|
||
// _Trace('SetAipLabel() .. Result=%d, Path=%s, EncPath=%s', [nResult, sPath, sEncPath]);
|
||
// 0 : 레이블 추출, 1 : 암호화, 2 : 복호화, 3 : 암호화 확인, 4 : 레이블 확인, 5 : 레이블 설정
|
||
if (nResult = 10) and FileExists(sEncPath) then
|
||
begin
|
||
if DeleteFileForce(sPath) then
|
||
begin
|
||
var sCpPath: String := sPath;
|
||
if CheckMsPfileExt(sPath) then
|
||
begin
|
||
if CheckAipEncSign(sEncPath) then
|
||
sCpPath := sCpPath + '.pfile';
|
||
end else
|
||
sCpPath := CutFileExt(sCpPath) + '.' + GetFileExt(sEncPath);
|
||
|
||
if CopyFile(PChar(sEncPath), PChar(sCpPath), false) then // 이거 실패 대비를 해야 할까... 23_1024 09:04:08 kku
|
||
begin
|
||
DeleteFile_wait(sEncPath);
|
||
MessageBox(Handle, PChar('AIP 암호화가 완료되었습니다.'), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK);
|
||
end;
|
||
end;
|
||
end else begin
|
||
ShowMessage(IntToStr(nResult));
|
||
DeleteFile_wait(sEncPath);
|
||
end;
|
||
end;
|
||
DeleteFile_wait(sScDecPath);
|
||
end;
|
||
5 : // AIP -> SC DRM
|
||
begin
|
||
if O.A['Files'].Length = 0 then
|
||
exit;
|
||
|
||
sPath := O.A['Files'].S[0];
|
||
if not FileExists(sPath) then
|
||
exit;
|
||
|
||
case DSCheckDSAgent of
|
||
0 :
|
||
begin
|
||
MessageBox(Handle, PChar('소프트캠프 클라이언트가 실행되어 있지 않습니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
// exit;
|
||
end;
|
||
1 :
|
||
begin
|
||
MessageBox(Handle, PChar('소프트캠프 클라이언트가 로그인 되어 있지 않습니다.'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
// exit;
|
||
end;
|
||
end;
|
||
|
||
var sDecPath: String := 'C:\ProgramData\HE\Task\';
|
||
if not ForceDirectories(sDecPath) then
|
||
begin
|
||
MessageBox(Handle, PChar('암호화를 준비하는 중 오류가 발생했습니다.3'), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
exit;
|
||
end;
|
||
sDecPath := sDecPath + Format('%d-dc_%s', [GetTickCount, ExtractFileName(sPath)]);
|
||
|
||
var h: HWND := MgSvc_.FindAipMdWnd;
|
||
if h <> 0 then
|
||
begin
|
||
O := SO;
|
||
O.S['src'] := sPath;
|
||
O.S['dst'] := sDecPath;
|
||
O.S['lid'] := 'f0060d82-8c13-4667-8f41-3eac58da9617';
|
||
if (MgSvc_ <> nil) and (MgSvc_.Email <> '') then
|
||
O.S['mail'] := gMgSvc.Email;
|
||
|
||
var nResult: Integer := SendData(h, 5, O.AsString);
|
||
// 0 : 레이블 추출, 1 : 암호화, 2 : 복호화, 3 : 암호화 확인, 4 : 레이블 확인, 5 : 레이블 설정
|
||
if (nResult = 10) and FileExists(sDecPath) then
|
||
begin
|
||
|
||
end;
|
||
|
||
if not FileExists(sDecPath) then
|
||
CopyFile(PChar(sPath), PChar(sDecPath), false);
|
||
|
||
if DSCSGradeEncryptFile(sDecPath, 'sm03230') = 1 then
|
||
begin
|
||
if DeleteFileForce(sPath) then
|
||
begin
|
||
if CopyFile(PChar(sDecPath), PChar(sPath), false) then
|
||
begin
|
||
MessageBox(Handle, PChar('SC-DRM 암호화가 완료되었습니다.'), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK);
|
||
end;
|
||
end;
|
||
end else
|
||
begin
|
||
MessageBox(Handle, PChar('SC-DRM 암호화에 실패했습니다.'), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK);
|
||
// for TEST
|
||
if DeleteFileForce(sPath) then
|
||
begin
|
||
if CopyFile(PChar(sDecPath), PChar(sPath), false) then
|
||
begin
|
||
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
DeleteFile(sDecPath);
|
||
end;
|
||
end;
|
||
6 : // AIP 적용
|
||
begin
|
||
TTgTrace.T('process_WM_REQUEST_DRM() .. AIP Encrypt ..');
|
||
|
||
var TgFileList: TStringList;
|
||
Guard(TgFileList, TStringList.Create);
|
||
for i := 0 to O.A['Files'].Length - 1 do
|
||
TgFileList.Add(O.A['Files'].S[i]);
|
||
|
||
var dlg: TDlgEncryptAip := TDlgEncryptAip.Create(nil);
|
||
dlg.AddFiles(TgFileList);
|
||
dlg.Show;
|
||
end;
|
||
7 : // AIP 해제
|
||
begin
|
||
TTgTrace.T('process_WM_REQUEST_DRM() .. AIP Decrypt ..');
|
||
|
||
var TgFileList: TStringList;
|
||
Guard(TgFileList, TStringList.Create);
|
||
for i := 0 to O.A['Files'].Length - 1 do
|
||
TgFileList.Add(O.A['Files'].S[i]);
|
||
|
||
var dlg: TDlgDecryptAip := TDlgDecryptAip.Create(nil);
|
||
dlg.AddFiles(TgFileList);
|
||
dlg.Show;
|
||
end;
|
||
else TTgTrace.T('process_WM_REQUEST_DRM() .. Unknown Cmd ..');
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_REQUEST_DRM()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_REQ_FILETAG_CONTROL(var msg: TMessage);
|
||
|
||
procedure ClearData;
|
||
var
|
||
FList: TStringList;
|
||
i: Integer;
|
||
sName,
|
||
sDataDir: String;
|
||
begin
|
||
try
|
||
sDataDir := GetRunExePathDir + 'Data\';
|
||
Guard(FList, TStringList.Create);
|
||
ExtrFilesFromDir(sDataDir, FList);
|
||
for i := 0 to FList.Count - 1 do
|
||
begin
|
||
sName := UpperCase(FList[i]);
|
||
if (Pos('SLT@', sName) = 1) and (ExtractFileExt(sName) = '.DAT') then
|
||
DeleteFile_wait(sDataDir + sName);
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_REQ_FILETAG_CONTROL() > ClearData()');
|
||
end;
|
||
end;
|
||
|
||
var
|
||
sPath: String;
|
||
begin
|
||
(*
|
||
try
|
||
if msg.WParam = 0 then
|
||
begin
|
||
tStatus.Enabled := false;
|
||
lbTagInfo.Visible := false;
|
||
|
||
if DTagList_ <> nil then
|
||
FreeAndNil(DTagList_);
|
||
|
||
if Client_ <> nil then
|
||
begin
|
||
FreeAndNil(Client_);
|
||
TerminateProcessByName(EXE_SLCore);
|
||
ClearData;
|
||
end;
|
||
end else begin
|
||
sPath := GetRunExePathDir + EXE_SLCore;
|
||
if IsUsingFileTag {$IFNDEF DEBUG} and FileExists(sPath) {$ENDIF} then
|
||
begin
|
||
if DTagList_ = nil then
|
||
DTagList_ := TDlgTagList.Create(Self);
|
||
|
||
if Client_ = nil then
|
||
begin
|
||
Client_ := TSearchLightClient.Create;
|
||
if Client_.ActiveW2W then
|
||
tStatus.Enabled := true;
|
||
end;
|
||
|
||
lbTagInfo.Visible := true;
|
||
end;
|
||
end;
|
||
Application.ProcessMessages;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_REQ_FILETAG_CONTROL()');
|
||
end;
|
||
*)
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_REQ_KWDSCH_CONTROL(var msg: TMessage);
|
||
begin
|
||
try
|
||
if msg.WParam = 0 then
|
||
begin
|
||
if KwdSchKvCLient_ <> nil then
|
||
FreeAndNil(KwdSchKvCLient_);
|
||
end else begin
|
||
if KwdSchKvCLient_ = nil then
|
||
begin
|
||
var FileScanOpt: TFileScanOpt;
|
||
ZeroMemory(@FileScanOpt, SizeOf(FileScanOpt));
|
||
FileScanOpt.CttSchOpt.nWorkPriority := -1;
|
||
FileScanOpt.CttSchOpt.sKvMdPath := GetRunExePathDir + 'bin\';
|
||
FileScanOpt.CttSchOpt.bIncZip := true;
|
||
FileScanOpt.CttSchOpt.bIncDrm := (CUSTOMER_TYPE = CUSTOMER_WELFNI) or (CUSTOMER_TYPE = CUSTOMER_WELFND);
|
||
if FileScanOpt.CttSchOpt.bIncDrm then
|
||
FileScanOpt.CttSchOpt.sMK := GetMK(false);
|
||
FileScanOpt.nLimitSizeMB := MgSvc_.ModePolicy.CfLimitMB;
|
||
FileScanOpt.nSchTimeoutSec := MgSvc_.ModePolicy.CfTimeoutSec;
|
||
FileScanOpt.CttSchOpt.nUnzipDepth := MgSvc_.ModePolicy.CfZipDepth;
|
||
KwdSchKvCLient_ := TBsKwdSchKvCttSchClient.Create(FileScanOpt);
|
||
KwdSchKvCLient_.ActiveW2W;
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_REQ_KWDSCH_CONTROL()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_REQ_OUTLOOK_CONTROL(var msg: TMessage);
|
||
begin
|
||
try
|
||
if msg.WParam = 0 then
|
||
begin
|
||
if OutClient_ <> nil then
|
||
FreeAndNil(OutClient_);
|
||
end else begin
|
||
if OutClient_ = nil then
|
||
begin
|
||
OutClient_ := TOutlookMonClient.Create;
|
||
if OutClient_.ActiveW2W then
|
||
begin
|
||
var sSid: String := GetRegRecentUserSid;
|
||
if sSid <> '' then
|
||
SetRegValueString(HKEY_USERS, sSid + '\Software\BS1Addin', 'OutMon', IntToStr(OutClient_.GetSelfWnd), true);
|
||
end;
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_REQ_OUTLOOK_CONTROL()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_UPDATE_SCREENLOGO(var msg: TMessage);
|
||
begin
|
||
UpdateScreenLogo(msg.WParam = 1);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_NOTIEXECUTE_END(var msg: TMessage);
|
||
var
|
||
Thd: TThdExecuteEndNoti;
|
||
pWEnt: PPrtWaterEnt;
|
||
pEnt: PPrtEnt;
|
||
sEmfDir: String;
|
||
begin
|
||
if dlgWaterProg_ <> nil then
|
||
FreeAndNil(dlgWaterProg_);
|
||
|
||
try
|
||
Thd := TThdExecuteEndNoti(msg.LParam);
|
||
|
||
if Thd.PrtEnt <> nil then
|
||
sEmfDir := MgSvc_.MgPrt.DataDir + Thd.PrtEnt.sId + '\';
|
||
|
||
if FileExists(Thd.DestPath) or
|
||
FileExists(Format('%s_%.4d.png', [CutFileExt(Thd.DestPath), 1])) or
|
||
DirectoryExists(sEmfDir) then
|
||
begin
|
||
New(pWEnt);
|
||
ZeroMemory(pWEnt, SizeOf(TPrtWaterEnt));
|
||
if Thd.PrtEnt = nil then
|
||
begin
|
||
pWEnt.sPtrName := Thd.PrtInfo.sPtrName;
|
||
pWEnt.sDocName := Thd.PrtInfo.sDocName;
|
||
pWEnt.sImgPath := Thd.DestPath;
|
||
// pWEnt.dwPageSizeT := Thd.PrtInfo.dwPaperSizeT;
|
||
pWEnt.DevMode := TTgRtti.SetTypeToStr<TDeviceMode>(Thd.PrtInfo.DevMode);
|
||
pWEnt.dwCopy := Thd.PrtInfo.dwCopyCount;
|
||
pWEnt.dwTotalPage := Thd.PrtInfo.dwTotalPage;
|
||
pWEnt.bPaperV := Thd.PrtInfo.bPaperV;
|
||
pWEnt.bColor := Thd.PrtInfo.bColor;
|
||
pWEnt.sPaperInfo := Thd.PrtInfo.sPaperInfo;
|
||
pWEnt.sPrtIp := PrinterDriverToIP(Thd.PrtInfo.sDrvName);
|
||
pWEnt.LogJson := Thd.OLog.AsJSon;
|
||
pWEnt.bUseWM := Thd.UseWM;
|
||
pWEnt.sPrtDocId := Thd.PrtDocId;
|
||
if (Thd.PortInfo <> '') and
|
||
FileExists(Thd.PortInfo) and
|
||
(GetFileExt(Thd.PortInfo).ToUpper = 'PDF') then
|
||
pWEnt.sPdfPath := Thd.PortInfo;
|
||
end else begin
|
||
pWEnt^ := Thd.PrtEnt.WInfo;
|
||
pWEnt.sImgPath := Thd.DestPath;
|
||
if Thd.PrtEnt.bPostApv then
|
||
pWEnt.sPostApvId := Thd.PrtEnt.sId;
|
||
if pWEnt.sImgPath = '' then
|
||
begin
|
||
var EmfList: TStringList;
|
||
Guard(EmfList, TStringList.Create);
|
||
if DirectoryExists(sEmfDir) then
|
||
begin
|
||
ExtrFilesFromDir(sEmfDir, EmfList, false, 'em1');
|
||
if EmfList.Count > 0 then
|
||
pWEnt.sImgPath := sEmfDir + EmfList[0];
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
if Thd.OLog <> nil then
|
||
begin
|
||
// 결재 후 출력 시 로그 남기기 위해 추가
|
||
// 기존 ProcessPrintWaterEnt() 로그남기는거 중복되지 않도록 아래 내용은 비워 준다... 25_0319 15:38:40 kku
|
||
// todo : 스냅태그 OutCode 처리 필요
|
||
pWEnt.LogJson := '';
|
||
|
||
TTgTrace.T('SendPrintLog2 > Code=%s, Msg=%s', [LOGCODE_EVENT_PRINTER, Thd.OLog.S['KEY_SUMMARY']], 3);
|
||
gMgSvc.EventLog.Push(Thd.OLog.AsJSon);
|
||
end;
|
||
|
||
MgSvc_.AddPrintWaterEnt(pWEnt);
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_NOTIEXECUTE_END()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_POPUP_PRINTWATER_PROGRESS(var msg: TMessage);
|
||
begin
|
||
try
|
||
if IsAdvancePrtProg then
|
||
exit;
|
||
|
||
if IsHidePrtProgPopup or MgSvc_.PrefModel.PrtPopupNo then
|
||
exit;
|
||
|
||
case msg.WParam of
|
||
3, 6 : ;
|
||
else begin
|
||
if dlgWaterProg_ <> nil then
|
||
FreeAndNil(dlgWaterProg_);
|
||
end;
|
||
end;
|
||
|
||
case msg.WParam of
|
||
1 : // 스풀 추출
|
||
begin
|
||
var StrList: TStringList;
|
||
Guard(StrList, TStringList.Create);
|
||
SplitString(PChar(msg.LParam), '|', StrList);
|
||
if StrList.Count < 3 then
|
||
begin
|
||
TTgTrace.T('Fail .. process_WM_POPUP_PRINTWATER_PROGRESS() .. Invalid Param... Cmd=1');
|
||
exit;
|
||
end;
|
||
|
||
dlgWaterProg_ := TDlgWaitExtrProcPrt.Create(Self, StrToIntDef(StrList[0], 0), StrList[1], StrList[2]);
|
||
dlgWaterProg_.Show;
|
||
end;
|
||
2 : // 보안 출력
|
||
begin
|
||
dlgWaterProg_ := TDlgWaitExtrProcPrt.Create(Self, msg.LParam);
|
||
dlgWaterProg_.Show;
|
||
TTgTrace.T('프린터 출력 감지 .. 워터마크 적용 후 보안출력 시작', 2);
|
||
end;
|
||
3 : // 진행사항 업데이트
|
||
begin
|
||
if dlgWaterProg_ <> nil then
|
||
begin
|
||
dlgWaterProg_.SetPagePos(msg.LParam);
|
||
TTgTrace.T('프린터 출력 감지 .. 워터마크 적용 후 보안출력 시작 .. %d', [msg.LParam], 2);
|
||
end;
|
||
end;
|
||
4 : // 스풀에서 이미지 추출
|
||
begin
|
||
dlgWaterProg_ := TDlgWaitExtrProcPrt.Create(Self, msg.LParam);
|
||
dlgWaterProg_.lbMsg.Caption := RS_ExtrSpoolImage + #13#10 + RS_ExtrWait;
|
||
dlgWaterProg_.Show;
|
||
TTgTrace.T('프린터 출력 감지 .. 스풀에서 출력물 추출', 2);
|
||
end;
|
||
5 : // 스풀 이미지에서 텍스트 추출
|
||
begin
|
||
dlgWaterProg_ := TDlgWaitExtrProcPrt.Create(Self, msg.LParam);
|
||
dlgWaterProg_.lbMsg.Caption := RS_ExtrImageText + #13#10 + RS_ExtrWait;
|
||
dlgWaterProg_.Show;
|
||
TTgTrace.T('프린터 출력 감지 .. 출력 이미지에서 텍스트 추출', 2);
|
||
end;
|
||
6 : // 스풀 이미지에서 텍스트 추출 Progress
|
||
begin
|
||
if dlgWaterProg_ <> nil then
|
||
begin
|
||
dlgWaterProg_.SetPagePos(msg.LParam);
|
||
TTgTrace.T('프린터 출력 감지 .. 출력 이미지에서 텍스트 추출 .. %d', [msg.LParam], 2);
|
||
end;
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_POPUP_PRINTWATER_PROGRESS()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_POPUP_PRTW_PROGRESS(var msg: TMessage);
|
||
begin
|
||
try
|
||
if not IsAdvancePrtProg then
|
||
exit;
|
||
|
||
if IsHidePrtProgPopup or MgSvc_.PrefModel.PrtPopupNo then
|
||
exit;
|
||
|
||
case msg.WParam of
|
||
0 :
|
||
begin
|
||
// 처리
|
||
dlgPrtWProg_.SetMsg(Format(RS_FMT_ProcPrt, [msg.LParam]));
|
||
end;
|
||
1 :
|
||
begin
|
||
// 생성
|
||
if dlgPrtWProg_ <> nil then
|
||
FreeAndNil(dlgPrtWProg_);
|
||
|
||
dlgPrtWProg_ := TDlgPrintProg.Create(nil);
|
||
if MgSvc_.ModePolicy.IsPrtCollectThum then
|
||
begin
|
||
if MgSvc_.ModePolicy.Print.bCollectOutput then
|
||
dlgPrtWProg_.SetProg([RS_PrtInit, RS_PrtImgCol, RS_PrtExtrTxt, RS_PrtReInit, RS_PrtSecu])
|
||
else
|
||
dlgPrtWProg_.SetProg([RS_PrtInit, RS_PrtImgCol, RS_PrtReInit, RS_PrtSecu]);
|
||
end else
|
||
dlgPrtWProg_.SetProg([RS_PrtInit, RS_PrtReInit, RS_PrtSecu]);
|
||
|
||
dlgPrtWProg_.Show;
|
||
end;
|
||
2 :
|
||
begin
|
||
// 다음
|
||
if dlgPrtWProg_ <> nil then
|
||
dlgPrtWProg_.NextStep;
|
||
end;
|
||
3 :
|
||
begin
|
||
// 종료
|
||
if dlgPrtWProg_ <> nil then
|
||
FreeAndNil(dlgPrtWProg_);
|
||
end;
|
||
4 :
|
||
begin
|
||
// 승인 후 출력, 재출력
|
||
if dlgPrtWProg_ <> nil then
|
||
FreeAndNil(dlgPrtWProg_);
|
||
|
||
dlgPrtWProg_.SetProg([RS_PrtInit, RS_PrtReInit, RS_PrtSecu]);
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_POPUP_PRTW_PROGRESS()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_CATCHKEY_NOTIFY(var msg: TMessage);
|
||
var
|
||
ShiftState: TShiftState;
|
||
sTemp: String;
|
||
PO: TPrefModel;
|
||
begin
|
||
// if not IsHD then
|
||
// exit;
|
||
|
||
try
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
|
||
ShiftState := KeyDataToShiftState(0);
|
||
if GetKeyState(VK_LMENU) < 0 then
|
||
Include(ShiftState, ssAlt);
|
||
|
||
if (ssShift in ShiftState) and
|
||
(ssAlt in ShiftState) and
|
||
(ssCtrl in ShiftState) then
|
||
begin
|
||
if msg.WParam = 79 then // O
|
||
begin
|
||
bPreWinKey_ := true;
|
||
bScrCapKey_ := false;
|
||
VisibleMainform(true, true);
|
||
exit;
|
||
end;
|
||
end;
|
||
|
||
// if (ssCtrl in ShiftState) and (msg.WParam = 67) then
|
||
// begin
|
||
// sTemp := GetProcessPathFromWndHandle(GetForegroundWindow);
|
||
// if sTemp <> '' then
|
||
// sLastCbAppName_ := ExtractFileName(sTemp);
|
||
// end;
|
||
|
||
if not bScrCapKey_ and (msg.WParam = 44) then // 프린트스크린
|
||
begin
|
||
bScrCapKey_ := true;
|
||
|
||
PO := MgSvc_.ModePolicy;
|
||
if PO = nil then
|
||
exit;
|
||
bForceCollectCB_ := (PO.ClipBlockKind <> cbkNone) and
|
||
PO.IsCBCollect and
|
||
(CbCollectAppList_.IndexOf('PrntScrKey') <> -1);
|
||
if PO.IsIgrScrCapKeyCB then
|
||
begin
|
||
if PO.WinCapScrLogoOff and (DispLogos_.Count > 0) then
|
||
begin
|
||
DispLogos_.Clear;
|
||
tUpdateLogo.Enabled := true;
|
||
PressKeys(#44);
|
||
end;
|
||
end;
|
||
exit;
|
||
end;
|
||
// else
|
||
// if bScrCapKey_ then
|
||
// bScrCapKey_ := false;
|
||
|
||
// if not PO.WinCapScrLogoOff then
|
||
// exit;
|
||
//
|
||
// if DispLogos_.Count = 0 then
|
||
// exit;
|
||
|
||
case msg.WParam of
|
||
65 : // A 키
|
||
begin
|
||
bPreWinKey_ := false;
|
||
bCtrlA_ := (CUSTOMER_TYPE = CUSTOMER_HDENG) and (ssCtrl in ShiftState);
|
||
end;
|
||
67 : // C 키
|
||
begin
|
||
bPreWinKey_ := false;
|
||
bCtrlA_ := bCtrlA_ and (ssCtrl in ShiftState);
|
||
|
||
{$IFDEF OLD_CB_MON}
|
||
if ssCtrl in ShiftState then
|
||
begin
|
||
// TTgTrace.T('Ctrl + C 감지 .. 1');
|
||
var bInitCB: Boolean := true;
|
||
try
|
||
if (MgSvc_ <> nil) and (MgSvc_.ModePolicy.ClipBlockKind = cbkNone) then
|
||
bInitCB := false;
|
||
|
||
// TTgTrace.T('Ctrl + C 감지 .. 2');
|
||
except
|
||
// ...
|
||
// TTgTrace.T('Ctrl + C 감지 .. ?');
|
||
end;
|
||
|
||
if bInitCB then
|
||
begin
|
||
// dtRecentCbPopup_ := Now;
|
||
// Sleep(200);
|
||
CBMon_.Reset;
|
||
|
||
// TTgTrace.T('Ctrl + C 감지 .. 3');
|
||
end;
|
||
end;
|
||
{$ENDIF}
|
||
end;
|
||
83 : // S 키
|
||
begin
|
||
bCtrlA_ := false;
|
||
if bPreWinKey_ then
|
||
begin
|
||
// ShiftState := KeyDataToShiftState(0);
|
||
if ssShift in ShiftState then
|
||
begin
|
||
bPreWinKey_ := false;
|
||
PO := MgSvc_.ModePolicy;
|
||
if PO = nil then
|
||
exit;
|
||
bForceCollectCB_ := (PO.ClipBlockKind <> cbkNone) and
|
||
PO.IsCBCollect and
|
||
(CbCollectAppList_.IndexOf('PrntScrKey') <> -1);
|
||
// if DispLogos_.Count > 0 then
|
||
if MgSvc_.ModePolicy.WinCapScrLogoOff and (DispLogos_.Count > 0) then
|
||
begin
|
||
DispLogos_.Clear;
|
||
tUpdateLogo.Enabled := true;
|
||
MgSvc_.SendEventLog(URI_USER_ACTION, PREVENT_SCREENLOGO_WINCAP_EXCEPT, 'WinCap : ScreenLogo Exception');
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
86 : // V 키
|
||
begin
|
||
if ssCtrl in ShiftState then
|
||
begin
|
||
// TTgTrace.T('Ctrl + V 감지 .. 1', 10);
|
||
|
||
var bInitCB: Boolean := true;
|
||
try
|
||
if (MgSvc_ <> nil) and (MgSvc_.ModePolicy.ClipBlockKind = cbkNone) then
|
||
bInitCB := false;
|
||
except
|
||
// ...
|
||
end;
|
||
|
||
if bInitCB then
|
||
begin
|
||
if (KeyMonDll_ <> nil) and (CUSTOMER_TYPE = CUSTOMER_TMAP) then
|
||
begin
|
||
// KeyMonDll_.SetDisableKey_Ctrl(true); // 추가 24_0712 14:47:52 kku
|
||
KeyMonDll_.SetDisableKey_Etc(0, 67); // c 키 연속으로 못누르게 막음 23_0518 14:21:05 kku
|
||
dwBlockInputCTick_ := GetTickCount;
|
||
end;
|
||
|
||
dtRecentCbPopup_ := Now;
|
||
{$IFDEF OLD_CB_MON}
|
||
CBMon_.Reset;
|
||
{$ENDIF}
|
||
end;
|
||
end else
|
||
if IsWinKeyDown then
|
||
begin
|
||
if MgSvc_.ModePolicy.ClipBlockKind = cbkBlock then
|
||
begin
|
||
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
|
||
keybd_event(VK_RWIN, 0, KEYEVENTF_KEYUP, 0);
|
||
Sleep(100);
|
||
keybd_event(VK_ESCAPE, 0, 0, 0);
|
||
keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0);
|
||
Sleep(100);
|
||
keybd_event(VK_ESCAPE, 0, 0, 0);
|
||
keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0);
|
||
end;
|
||
end;
|
||
end;
|
||
91 : // 윈도우 키
|
||
begin
|
||
bPreWinKey_ := true;
|
||
|
||
bCtrlA_ := false;
|
||
exit;
|
||
end;
|
||
else begin
|
||
bPreWinKey_ := false;
|
||
bCtrlA_ := false;
|
||
end;
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_CATCHKEY_NOTIFY()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_DISPLAYCHANGE(var msg: TMessage);
|
||
begin
|
||
UpdateScreenLogo(true);
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_SCREEN_CAPTURE_BLOCK(var msg: TMessage);
|
||
begin
|
||
if DispBlock_ <> nil then
|
||
begin
|
||
if msg.WParam = 1 then
|
||
begin
|
||
if DispBlock_.Count = 0 then
|
||
begin
|
||
DispBlock_.CreateLogos;
|
||
DispBlock_.SetText('', nil, 2, 2, 0, 0, clSilver, clSilver, '', 0);
|
||
DispBlock_.SetAlpha(-1);
|
||
// DispBlock_.SetTaskbarDetect(true);
|
||
DispBlock_.SetCaptureBlock(true);
|
||
end;
|
||
end else
|
||
if DispBlock_.Count > 0 then
|
||
DispBlock_.Clear;
|
||
end;
|
||
end;
|
||
|
||
//procedure TDlgeCrmHeMain.process_WM_SETTINGCHANGE(var msg: TMessage);
|
||
//begin
|
||
// if (Screen.Width <> nScrW_) or (Screen.Height <> nScrH_) then
|
||
// begin
|
||
// nScrW_ := Screen.Width;
|
||
// nScrH_ := Screen.Height;
|
||
// UpdateScreenLogo(true);
|
||
// end;
|
||
//end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_POPUP_MSG2(var msg: TMessage);
|
||
begin
|
||
TDlgNoticeImg.Create(nil, String(msg.LParam)).Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_POPUP_MSG_PI(var msg: TMessage);
|
||
begin
|
||
TDlgSchPiNoti.Create(nil, String(msg.LParam)).Show;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_CLOSE_CTTSCH(var msg: TMessage);
|
||
begin
|
||
if ThdCustomScanSch_ <> nil then
|
||
begin
|
||
if ThdCustomScanSch_.WorkState = tsCompleted then
|
||
miCttSchResult.Click;
|
||
FreeAndNil(ThdCustomScanSch_);
|
||
sSchRstPath_ := '';
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.miEncryptDrmClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgEncryptDrm;
|
||
sExe, sParam: String;
|
||
O: ISuperObject;
|
||
PO: TPrefModel;
|
||
begin
|
||
// if CUSTOMER_TYPE = CUSTOMER_BLUECORNER then
|
||
begin
|
||
sExe := GetRunExePathDir + DIR_CONF + EXE_HLP;
|
||
if FileExists(sExe) then
|
||
begin
|
||
PO := MgSvc_.ModePolicy;
|
||
|
||
O := SO;
|
||
O.I['Cmd'] := HPCMD_OPEN_ENCRYPT;
|
||
O.S['WinCap'] := APP_TITLE;
|
||
O.I['RcvWnd'] := Handle;
|
||
O.I['CT'] := CUSTOMER_TYPE;
|
||
O.S['UName'] := MgSvc_.UName;
|
||
O.S['Dept'] := MgSvc_.DeptName;
|
||
if O.S['Dept'] = '' then
|
||
O.S['Dept'] := PO.DeptName;
|
||
O.S['EN'] := MgSvc_.EmpNo;
|
||
O.S['PON'] := PO.PolicyName;
|
||
|
||
sParam := GetRunExePathDir + DIR_CONF + DAT_PARAM;
|
||
SaveJsonObjToFile(O, sParam);
|
||
{$IFDEF DEBUG}
|
||
ExecutePath(sExe, Format('/p "%s"', [sParam]));
|
||
{$ELSE}
|
||
ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL);
|
||
{$ENDIF}
|
||
// DeleteFile(sParam);
|
||
end;
|
||
end;
|
||
// else begin
|
||
// dlg := TDlgEncryptDrm.Create(Self);
|
||
// dlg.Show;
|
||
// end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.OnProcNotify(aSender: TThdProcessWatch; pEnt: PPwEnt; aKind: TProcessWatchKind);
|
||
begin
|
||
case aKind of
|
||
pwkInit,
|
||
pwkExecute :
|
||
begin
|
||
{$IFNDEF DEBUG}
|
||
if (gTrForm = nil) and IsLogSendToWindbg and
|
||
( (CompareText('DbgX.Shell.exe', pEnt.sPName) = 0) or
|
||
(CompareText('windbg.exe', pEnt.sPName) = 0) ) then
|
||
begin
|
||
if gTrace.Level = 0 then
|
||
gTrace.Level := 1;
|
||
end;
|
||
{$ENDIF}
|
||
end;
|
||
pwkTerminated :
|
||
begin
|
||
{$IFNDEF DEBUG}
|
||
if (gTrForm = nil) and IsLogSendToWindbg and
|
||
( (CompareText('DbgX.Shell.exe', pEnt.sPName) = 0) or
|
||
(CompareText('windbg.exe', pEnt.sPName) = 0) ) then
|
||
begin
|
||
if (GetProcessPidsByName('DbgX.Shell.exe') = 0) and
|
||
(GetProcessPidsByName('windbg.exe') = 0) and
|
||
(gTrace.Level = 1) then
|
||
gTrace.Level := 0;
|
||
end;
|
||
{$ENDIF}
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_REQUEST_APPROVAL(var msg: TMessage);
|
||
var
|
||
pEnt: PPrtEnt;
|
||
dlg: TDlgPrintApproveReq;
|
||
dlgA: TDlgPrintApproveReqA;
|
||
dlgR: TDlgPrintApproveRst;
|
||
begin
|
||
try
|
||
case msg.WParam of
|
||
0 : // 사용자 출력 요청
|
||
begin
|
||
pEnt := PPrtEnt(msg.LParam);
|
||
if (pEnt = nil) or (pEnt.dtReg = 0) then
|
||
exit;
|
||
|
||
dlg := TDlgPrintApproveReq.Create(nil, pEnt);
|
||
dlg.Show;
|
||
end;
|
||
else
|
||
begin
|
||
if MgSvc_ <> nil then
|
||
MgSvc_.PopupMessage(TYPE_REQ_APPROVAL, IntToStr(msg.WParam) + '|' + String(msg.LParam));
|
||
|
||
// dlgA := TDlgPrintApproveReqA.Create(nil, msg.WParam, String(msg.LParam));
|
||
// dlgA.Show;
|
||
end;
|
||
end;
|
||
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_REQUEST_APPROVAL()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_DONE_APPROVAL(var msg: TMessage);
|
||
var
|
||
dlgR: TDlgPrintApproveRst;
|
||
O: ISuperObject;
|
||
begin
|
||
try
|
||
// 잘못된 응담 사전에 걸름 25_0218 10:56:00 kku
|
||
O := nil;
|
||
try
|
||
O := SO(String(msg.LParam));
|
||
except
|
||
exit;
|
||
end;
|
||
|
||
if O = nil then
|
||
exit;
|
||
|
||
if msg.WParam = 1 then
|
||
begin
|
||
// 프린트 응답은 한번더 점검
|
||
if gMgSvc.MgPrt.GetPrintInfo(O.S['taskId']) = nil then
|
||
exit;
|
||
end;
|
||
|
||
if MgSvc_ <> nil then
|
||
MgSvc_.PopupMessage(TYPE_RES_APPROVAL, IntToStr(msg.WParam) + '|' + String(msg.LParam));
|
||
|
||
// dlgR := TDlgPrintApproveRst.Create(nil, msg.WParam, String(msg.LParam));
|
||
// dlgR.Show;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_DONE_APPROVAL()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_NOTI_RCVPOLICY(var msg: TMessage);
|
||
begin
|
||
try
|
||
case msg.WParam of
|
||
0 : MessageBox(Handle, PChar(RS_FailUpdatePolicy), PChar(APP_TITLE), MB_ICONWARNING or MB_OK);
|
||
1 : MessageBox(Handle, PChar(RS_UpdatePolicy), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK);
|
||
else MessageBox(Handle, PChar(Format(RS_ErrorUpdatePolicy, [msg.WParam])), PChar(APP_TITLE), MB_ICONINFORMATION or MB_OK);
|
||
end;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_NOTI_RCVPOLICY()');
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgeCrmHeMain.process_WM_ENDSESSION(var msg: TMessage);
|
||
begin
|
||
try
|
||
if MgSvc_ <> nil then
|
||
MgSvc_.ProcessEndSession;
|
||
except
|
||
on E: Exception do
|
||
ETgException.TraceException(Self, E, 'Fail .. process_WM_ENDSESSION()');
|
||
end;
|
||
WriteLnFileEndUTF8(GetRunExePathDir + BYE_ENDSESSION, 'bye');
|
||
// TerminateProcess(GetCurrentProcess, 100);
|
||
end;
|
||
|
||
{$IFNDEF OLD_CB_MON}
|
||
procedure TDlgeCrmHeMain.process_WM_CLIPBOARDUPDATE(var msg: TMessage);
|
||
var
|
||
sCbHds: String;
|
||
begin
|
||
if MgSvc_ = nil then
|
||
exit;
|
||
// sCbHds := GetClipboardHandles;
|
||
// if (sCbHds = '') or (sCbHds = sOldCbHds_) then
|
||
// exit;
|
||
// sOldCbHds_ := sCbHds;
|
||
if IsClipboardFormatAvailable(CF_BS1Empty) then
|
||
exit;
|
||
|
||
if (MgSvc_.ModePolicy <> nil) and MgSvc_.ModePolicy.CbImgBlock then
|
||
begin
|
||
if not IsClipboardFormatAvailable(CF_BITMAP) and
|
||
not IsClipboardFormatAvailable(CF_DIB) and
|
||
not IsClipboardFormatAvailable(CF_DIBV5) then exit;
|
||
end;
|
||
|
||
OnClipboardNotify(nil);
|
||
end;
|
||
{$ENDIF}
|
||
|
||
end.
|