unit DNoticeBT; 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, Vcl.StdCtrls, System.ImageList, Vcl.ImgList, PngImageList, Tocsg.Win32, Define, Vcl.WinXPanels, superobject; const PARAM_GO_SETPASS = '/c explorer ms-settings:signinoptions'; // '/c control userpasswords'; PARAM_GO_ANTIVIRUS = '/c explorer windowsdefender:'; PARAM_GO_FIREWALL = '/c control firewall.cpl'; PARAM_GO_FIREWALL2 = '/c explorer windowsdefender://network/'; PARAM_GO_WINUPDATE = '/c explorer ms-settings:windowsupdate'; PARAM_GO_SETSAVER = '/c rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1'; PARAM_GO_SYSTEMINFO = '/c control /name Microsoft.System'; PARAM_GO_UNINSTALL = '/c appwiz.cpl'; type TDlgNoticeBT = class(TForm) imgTop: TImage; lbTitle: TLabel; imgBtnList: TPngImageList; tInit: TTimer; btnClose: TButton; imgTitles: TPngImageCollection; cpMain: TCardPanel; cdDef: TCard; imgOk: TImage; imgSet: TImage; lbOk: TLabel; mmMsg: TMemo; lbSet: TLabel; cdPI: TCard; Label2: TLabel; lbGrade: TLabel; Label5: TLabel; lbPiCnt: TLabel; lbMsgEx: TLabel; tClose: TTimer; pnTop: TPanel; lbMode: TLabel; procedure imgOkMouseEnter(Sender: TObject); procedure imgOkMouseLeave(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure imgOkClick(Sender: TObject); procedure imgSetClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure imgTopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure tInitTimer(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure lbPiCntMouseEnter(Sender: TObject); procedure lbPiCntMouseLeave(Sender: TObject); procedure lbPiCntClick(Sender: TObject); procedure tCloseTimer(Sender: TObject); private { Private declarations } sCmdParam_, sNotiCenterMsg_: String; Mutex_: TTgMutex; procedure SetNotiForm; procedure SetImgBtn(imgBtn: TImage; nImgIdx: Integer); procedure SetOneButtion; procedure SetPiResult4HEC(nRstCnt: Integer); public { Public declarations } Constructor Create(aOwner: TComponent); override; procedure CreateParams(var Params: TCreateParams); override; // 작업표시줄에 표시 Destructor Destroy; override; procedure PopupMessage(sJsonData: String); property NotiCenterMsg: String read sNotiCenterMsg_; end; var DlgNoticeBT: TDlgNoticeBT; resourcestring RS_SecuViol = '보안 정책 위반'; RS_Vul = '취약점 발생'; RS_Noti = '공지 사항'; RS_Info = '정보 알림'; RS_SetVul = '조치'; RS_DevExcept = '예외'; implementation uses Tocsg.Exception, Tocsg.Safe, Tocsg.Shell, GlobalDefine, Tocsg.Strings, Vcl.Clipbrd, Condition, Tocsg.Path, Tocsg.Trace, Tocsg.WTS, Tocsg.Process, Tocsg.Json, Tocsg.Hash, Tocsg.Convert; resourcestring RS_TitleVul = '보안 취약점이 발견되었습니다.'; RS_TitlePrevent = '보안정책 관련 활동이 탐지되었습니다'; // '보안정책 위반 행위가 탐지되었습니다.'; RS_TitlePreventSimple = '보안정책 위반 행위 탐지'; RS_SafeCompleted = '취약점 점검 대상 항목 조치가 완료되었습니다.'; RS_SafeCompletedSimple = '보안 취약점 조치 완료'; RS_InitRemoteConn = '보안 취약점이 모두 조치 되어서' + #13#10 + '보안모드를 사용할 수 있습니다.'; // '이제 원격접속을 시작할 수 있습니다.'; RS_SafeCompletedLX = '보안 취약점 조치가 완료되었습니다.'; RS_InitRemoteConnLX = '원격 접속을 사용할 수 있습니다.'; RS_UnsafeOS = '사용하시는 OS는 안전하지 않습니다.'; RS_EOSVersion = '(End-of-Service 버전)'; RS_NoAllVulCheck = '특정 취약점검은 동작하지 않을 수 있습니다.'; RS_NoAllVulCheckLX = '최신 OS 버전으로 업데이트 후 사용하시기 바랍니다.'; RS_NoUpToDateOS = '윈도우 보안 패치가 최신이 아닙니다.'; RS_OSPatchAction1 = ' 조치 버튼 클릭 후 "업데이트 확인"을 통해 패치를'; RS_OSPatchAction2 = ' 진행하세요.'; RS_OSPatchAction3 = ' 보안 패치에 따라 PC재부팅이 필요합니다.'; RS_OSPatchActionLX = '조치 버튼 클릭 후 최신 보안 패치를 설치를 권고합니다.'; RS_VulPW1 = '사용자 계정 암호가 설정되어 있지 않습니다.'; RS_VulPW2 = ' 조치 버튼 클릭 후 "PC설정에서 내 계정 변경"'; RS_VulPW3 = ' -> "로그인옵션"'; RS_VulPW4 = ' -> "비밀번호"에서 암호를 설정하세요.'; RS_VulPW2LX = '조치 버튼 클릭 후 [사용자 계정 변경]'; RS_VulPW3LX = '– [다른 계정 관리] – [암호 만들기]에서 암호를 생성 후'; RS_VulPW4LX = '사용하시기 바랍니다. '; RS_LastChangePw = '마지막으로 암호 설정한 날짜 :'; RS_VulPwDate1 = '사용자 계정 암호가 오래되었습니다.'; RS_VulPwDate2 = ' 조치 버튼 클릭 후 "다른 계정 관리"'; RS_VulPwDate3 = ' -> "계정 클릭"'; RS_VulPwDate4 = ' -> "암호 변경"에서 새암호를 설정하세요.'; RS_VulAV1 = '백신 프로그램이 설정되어 있지 않습니다.'; RS_VulAV2 = ' 조치 버튼 클릭 후 "Windows 보안센터"'; RS_VulAV3 = ' -> "바이러스 및 위협 방지"에서'; RS_VulAV4 = ' 백신을 활성화 하세요.'; RS_VulAV2LX = '조치 버튼 클릭 후 [바이러스 및 위협 방지]'; RS_VulAV3LX = '– [앱 열기] – [환경설정] – [백신 실시간 검사 사용]을'; RS_VulAV4LX = '활성화하시기 바랍니다.'; RS_VulFW1 = '방화벽 설정이 되어있지 않습니다.'; RS_VulFW2 = ' 조치 버튼 클릭 후 "권장 설정 사용"을'; RS_VulFW3 = ' 눌러 방화벽을 활성화하세요.'; RS_VulFW2LX = '조치 버튼 클릭 후 [권장 설정 사용]을 눌러 방화벽을'; RS_VulFW3LX = '활성화하시기 바랍니다.'; RS_VulScreen1 = '화면 보호기가 설정되어 있지 않습니다.'; RS_VulScreen2 = ' 조치 버튼 클릭 후 "다시 시작할 때 로그온 화면 표시'; RS_VulScreen3 = ' 체크박스"를 활성화 하세요.'; RS_VulScreen2LX = '조치 버튼 클릭 후 [다시 시작할 때 로그온 화면 표시'; RS_VulScreen3LX = '체크박스]를 활성화하시기 바랍니다. '; RS_VulEmpNo1 = '서버에서 검증되지 않은 사번입니다.'; RS_VulEmpNo2 = '조치 버튼 클릭 후 검증된 사번을 입력하거나'; RS_VulEmpNo3 = '관리자에게 검증을 요청 해주십시오.'; RS_InvalidEmpNo = ' 미검증 사번 : '; RS_VulAllow1 = '접속 승인이 되지 않았습니다.'; RS_VulAllow2 = '접속 승인 여부를 확인 후 재시도하세요.'; RS_NoAccessMAC = '현재 PC의 MAC이 접속허용되지 않았습니다.'; RS_RequestManager = '관리자에게 문의하세요.'; RS_ExpireConnDate = '접속 승인 기간이 만료되었습니다.'; RS_PersonalInfoOver = '개인정보 임계치가 초과 되었습니다.'; RS_PersonalInfoOver1 = '검출출된 개인정보 결과를 확인 / 조치 후'; RS_PersonalInfoOver2 = '개인정보 검사를 수행해 주십시오.'; RS_UpdateCompleted = '업데이트 완료'; RS_MsgUpdateCompleted = '프로그램이 업데이트 되었습니다.'; RS_FMT_Version = ' - 버전 : %s'; RS_WriteReport = '사용 보고서 작성'; RS_MsgWriteReport1 = '다시 보안 모드에 진입하기 전에'; RS_MsgWriteReport2 = '사용 보고서를 작성 해주십시오.'; RS_MsgLxPrevent = '** 원격지 근무 보안 정책이 위반되었습니다 **'; RS_ClipCutLX = '- 복사, 캡쳐를 금지합니다.'; RS_ClipCut = '클립보드 (복사, 캡쳐) 사용이 차단 되었습니다.'; RS_FMT_ClipCutApp = '사용 프로그램 : %s'; RS_USBCutLX = '** USB 사용을 금지합니다. **'; RS_USB_RO_LX = '** USB가 쓰기 금지됩니다. **'; RS_USBCut = '외부 저장소 연결이 해제 되었습니다.'; RS_USB_RO = '외부 저장소의 쓰기가 금지됩니다.'; RS_CDROMCut = 'CD/DVD 저장소 연결이 해제 되었습니다.'; RS_CDROMCutLX = '** CD/DCD 사용을 금지합니다. **'; RS_RouteCutLX = '라우팅 테이블 변경이 차단 되었습니다.'; RS_RouteCut = '라우팅 테이블 변경이 차단 되었습니다.'; RS_FWaterLX = '워터마크가 적용되었습니다.'; RS_FWater = '워터마크가 적용되었습니다.'; RS_FWatchLX = '파일 변경이 탐지되었습니다.'; RS_FWatch = '로컬 파일 변경이 탐지되었습니다.'; RS_FCutLX = '파일 저장이 차단됩니다.'; RS_FDelAfter = '만약 사용 중이면, 사용 후 삭제됩니다.'; RS_FCut = '파일 생성이 차단 되었습니다.'; RS_TempConnect = '임시 접속이 허용되었습니다. (Unsafe Mode)'; RS_TempConnectExit = '본 연결은 %d분 뒤 강제 종료됩니다.'; RS_TerminateApp = '앱이 종료되었습니다.'; RS_MonitorApp = '앱 실행이 감지되었습니다.'; RS_ExeWhiteAppLX = '- 필수 앱을 실행해 주세요.'; RS_ExeWhiteApp1 = '다음 필수 앱이 실행되고 있지 않습니다.'; RS_ExeWhiteApp2 = '연결이 초기화됩니다.'; RS_FMaskLX = '민감정보를 마스킹합니다.'; RS_FMask = '파일이 마스킹 되었습니다.'; RS_URLCut = 'URL 연결이 차단 되었습니다.'; RS_URLMon = 'URL 연결이 감지 되었습니다.'; RS_FMT_URLCut = ' - URL : %s'; RS_FMT_URLInfo = ' - URL 평판 : %s'; RS_DetectAppInstSankyo = '비인가 소프트웨어 설치 행위가 탐지되었습니다.'; RS_DetectAppInstSankyo2 = '비인가 프로그램 설치가 감지되었습니다.'; RS_DetectAppInst = '프로그램 설치가 감지되었습니다.'; RS_DetectAppInst1 = '아래 ''조치'' 버튼을 눌러 제어판에서 해당 프로그램을'; RS_DetectAppInst2 = '삭제 해주시기 바랍니다.'; RS_DetectWIFI = '무선 네트워크 접속(WIFI)이 감지되었습니다.'; RS_AfterCut = '잠시 후 차단됩니다.'; RS_DetectBlue = '블루투스 연결이 감지되었습니다.'; RS_BlueCut = '블루투스 연결을 차단합니다.'; RS_DetectMTP = 'MTP 연결이 감지되었습니다.'; RS_MTPCut = 'MTP 연결을 차단합니다.'; RS_DetectPrinter = '프린터 사용이 감지되었습니다.'; RS_NotSupportWT = '워터마크를 지원하지 않는 프로그램입니다.'; RS_NotSupportPTR = '승인되지 않은 프린터 입니다.'; RS_NotSupportPTR_IP = '승인되지 않은 프린터 IP 입니다.'; RS_NotSupportAPP = '승인되지 않은 APP : '; RS_NotSupportURL = '승인되지 않은 URL : '; RS_FoundCtt = '개인정보 검출됨 : '; RS_PrinterCut = '프린터 사용을 차단합니다.'; RS_MsgCopyClipboard = '메시지가 클립보드에 복사 되었습니다.'; RS_CTTSCH = '개인정보 검사'; RS_CTTSCH_START = '개인정보 검사가 시작되었습니다.'; RS_CTTSCH_COMPLETE = '개인정보 검사를 완료했습니다.'; RS_CTTSCH_TILE = '검사 시간'; RS_CTTSCH_RESULT_COUNT = '검출된 파일 수'; RS_CttSchVulModeMsg1 = '많은 수의 개인정보가 추출 되었습니다.'; RS_CttSchVulModeMsg2 = '개인정보 검사 결과를 확인하고 조치 후'; RS_CttSchVulModeMsg3 = '개인정보 검사를 다시 수행해 주십시오.'; RS_DetectCopyCapture = '- 복사, 캡쳐가 감지 되었습니다.'; RS_DetectCB = '클립보드 (복사, 캡쳐) 사용이 감지 되었습니다.'; RS_DetectRemoveableDev = '외부 저장소 연결이 감지 되었습니다.'; RS_DetectCdrom = 'CD/DVD 연결이 감지 되었습니다.'; RS_DeleteInstApp = '설치된 프로그램을 삭제합니다.'; RS_DeleteInstAppMsg1 = '아래 ''조치'' 버튼을 눌러 삭제를 확인하고,'; RS_DeleteInstAppMsg2 = '삭제가 되지 않았다면 삭제해주십시오.'; RS_PrintWater1 = '프린트 워터마크 적용'; RS_PrintWater2 = '프린트 워터마크가 적용 되었습니다.'; RS_DetectFileUse = '파일 첨부, 사용이 감지 되었습니다.'; RS_DetectFileBlock = '파일 첨부, 사용이 차단 되었습니다.'; RS_Program = '프로그램 : '; RS_FileName = '파일 이름 : '; RS_FilePath = '파일 경로 : '; RS_FileTag = '파일 태그 : '; RS_OpenDrm1 = 'DRM 문서 열람'; RS_OpenDrm2 = 'DRM 문서를 확인합니다.'; RS_OpenDrm3 = 'DRM 문서를 수정할 수 없습니다..'; RS_BlockDrm1 = 'DRM 문서를 열람할 수 없습니다.'; RS_BlockDrm2 = '관리자에게 열람 권한을 문의해 주십시오.'; RS_BlockDrm3 = '다른 환경에서 만들어진 DRM 문서입니다.'; RS_EncDrm1 = 'DRM 문서 암호화'; RS_EncDrm2 = 'DRM 문서 암호화가 적용됩니다.'; RS_DocName = '문서이름 : '; RS_DetectFRename = '파일 이름변경이 감지 되었습니다.'; RS_BlockFRename = '파일 이름변경이 차단 되었습니다.'; RS_OrgName = '원본 이름 : '; RS_ChgName = '변경 이름 : '; RS_BlockShareFolder = '공유 폴더 설정이 차단 되었습니다.'; RS_DetectShareFolder = '공유 폴더 설정이 감지 되었습니다.'; RS_BlockCappApp = '캡쳐 APP이 차단 되었습니다.'; RS_DetectCappApp = '캡쳐 APP이 감지 되었습니다.'; RS_MsgVul1_ABL = '%s 설정이 되어 있지 않습니다.'; RS_MsgVul2_ABL = '[취약상태]로 되어 있는 버튼을 클릭하여 설정을 변경하세요.'; RS_ScrSv_ABL = '[화면 보호기]'; RS_AV_ABL = '[Anti-Virus]'; RS_UserPw_ABL = '[계정 비밀번호]'; RS_FW_ABL = '[방화벽]'; RS_OsVer_ABL = '[OS 버전]'; RS_OsPatch_ABL = '[OS 패치]'; RS_TITLE = '제목 : '; RS_CC = '참조 : '; RS_TO = '수신자 : '; RS_OutlookMonMsg = '아웃룩 메일 전송이 감지 되었습니다.'; RS_OutlookMaskMsg = '아웃룩 전송 메일이 마스킹 되었습니다.'; RS_OutlookBlockMsg = '아웃룩 메일 전송이 차단 되었습니다.'; RS_OutlookBlockApp = '아웃룩이 보안 정책으로 차단 되었습니다.'; RS_OutlookBlockAppMsg1 = '아래 "조치" 버튼을 눌러서'; RS_OutlookBlockAppMsg2 = '아웃룩 보안 모듈을 적용 후 다시 실행 해주십시오.'; RS_OutlookSecu = '아웃룩 보안 적용'; RS_OutlookSecuMsg = '아웃룩 보안이 적용되었습니다.'; RS_BLOCK_MTP_WRITE = 'MTP 장치에서 파일쓰기가 차단 되었습니다.'; RS_RELEASE_QUARANTINE = '검역소에 격리된 파일이 해제 되었습니다.'; RS_RELEASE_FILE_QUARANTINE = '파일 격리 해제'; RS_ChangeMode = '모드 변경'; RS_BlockTethering = '네트워크가 차단 되었습니다.'; RS_MsgModeSleep = '[수면 모드 입니다]'; RS_MsgModeSecu = '[보안 모드 입니다]'; RS_MsgModeVul = '[취약 모드 입니다. 취약점을 조치해주세요]'; RS_RS_MsgModeNoId = '[미인증 모드 입니다. ID 인증이 필요합니다]'; RS_MsgModeOff = '[오프라인 모드 입니다]'; RS_MsgModeExpt = '[예외 모드 입니다]'; RS_ReqApproval = '결재 승인 요청'; RS_Confirm = '승인'; RS_MsgConfirm = '확인하시고 승인 바랍니다'; RS_PrtApproval = '출력 요청'; RS_MsgPrtApproval = '출력이 요청 되었습니다.'; RS_UsbExcept = 'USB 매체 예외'; RS_MsgUsbExcept = 'USB 매체 예외가 요청 되었습니다.'; RS_UrlExcept = '브라우저 접근 예외'; RS_MsgUrlExcept = '브라우저 접근 예외가 요청 되었습니다.'; RS_DecExcept = 'DRM 해제 요청'; RS_MsgDecExcept = 'DRM 해제가 요청 되었습니다.'; RS_FileExpExcept = '파일 반출 요청'; RS_MsgFileExpExcept = '파일 반출이 요청 되었습니다.'; RS_MtpExcept = 'MTP 매체 예외'; RS_MtpUrlExcept = 'MTP 매체 예외 요청 되었습니다.'; RS_BtExcept = 'Bluetooth 매체 예외'; RS_BtUrlExcept = 'Bluetooth 매체 예외 요청 되었습니다.'; RS_CdExcept = 'CD/DVD 매체 예외'; RS_CdUrlExcept = 'CD/DVD 매체 예외 요청 되었습니다.'; RS_PrtWaterExcept = '프린트 워터마크 예외'; RS_MsgPrtWaterExcept = '프린트 워터마크가 예외 요청 되었습니다.'; RS_ApprovalResult = '결재 확인'; RS_NotFoundPrintInfo = '출력 정보를 찾을 수 없습니다. (%s)'; RS_PrintPass = '출력 요청이 승인 되었습니다.'; RS_PrintReqReject = '출력 요청이 반려 되었습니다.'; RS_MsgError = '오류가 발생했습니다'; RS_UsbReqPass = 'USB 매체 예외가 승인 되었습니다.'; RS_UsbReqReject = 'USB 매체 예외 요청이 반려 되었습니다.'; RS_UrlReqPass = '브라우저 접근 예외가 승인 되었습니다.'; RS_DrmReqPass = 'DRM 해제 요청이 승인 되었습니다.'; RS_DrmReqReject = 'DRM 해제 요청이 반려 되었습니다.'; RS_FileExpReqPass = '파일 반출 요청이 승인 되었습니다.'; RS_FileExpReqReject = '파일 반출 요청이 반려 되었습니다.'; RS_UrlReqReject = '브라우저 접근 예외 요청이 반려 되었습니다.'; RS_MtpReqPass = 'MTP 매체 예외가 승인 되었습니다.'; RS_MtpReqReject = 'MTP 매체 예외 요청이 반려 되었습니다.'; RS_BtReqPass = 'Bluetooth 매체 예외가 승인 되었습니다.'; RS_BtReqReject = 'Bluetooth 매체 예외 요청이 반려 되었습니다.'; RS_CdReqPass = 'CD/DVD 매체 예외가 승인 되었습니다.'; RS_PrtWaterReqPass = '프린트 워터마크 예외가 승인 되었습니다.'; RS_CdReqReject = 'CD/DVD 매체 예외 요청이 반려 되었습니다.'; RS_PrtWaterReject = '프린트 워터마크 예외 요청이 반려 되었습니다.'; RS_ApprovalReason = '결재 처리 사유'; RS_NoApprovalInfo = '결재자 정보를 가져올 수 없습니다.'; RS_UpdateReboot = '업데이트 기능 적용을 위해 PC를 재부팅해야 합니다.'; {$R *.dfm} var _nNotiCnt: Integer = 0; Constructor TDlgNoticeBT.Create(aOwner: TComponent); var hTarkBar: HWND; r: TRect; nVCnt, nHPos: Integer; begin Inherited Create(aOwner); Caption := APP_TITLE; if CUSTOMER_TYPE = CUSTOMER_TMAP then // 티맵은 위치 고정 _nNotiCnt := 1 else Inc(_nNotiCnt); sCmdParam_ := ''; sNotiCenterMsg_ := ''; Mutex_ := nil; hTarkBar := FindWindow('Shell_TrayWnd', ''); if hTarkBar <> 0 then begin SetNotiForm; GetWindowRect(hTarkBar, r); // Top가 0이면 위, 왼쪽 아님 오른쪽 if (r.Left <= 0) and (r.Right < Screen.PrimaryMonitor.Width) then begin // 왼쪽 Top := Screen.PrimaryMonitor.Height; Left := Screen.PrimaryMonitor.Width; end else if (r.Left <= 0) and (r.Top = 0) and (r.Bottom < Screen.PrimaryMonitor.Height) then begin // 위쪽 Top := Screen.PrimaryMonitor.Height; Left := Screen.PrimaryMonitor.Width; end else if (r.Left <= 0) and (r.Top > 0) then begin // 아래쪽 Top := Screen.PrimaryMonitor.Height - (r.Bottom - r.Top); Left := Screen.PrimaryMonitor.Width;// - Width; end else begin // 오른쪽 Top := Screen.PrimaryMonitor.Height; Left := Screen.PrimaryMonitor.Width - (r.Right - r.Left);// - Width - (r.Right - r.Left); end; // if CUSTOMER_TYPE = CUSTOMER_TMAP then // begin // nVCnt := 1; // 티맵은 위치 고정 // nHPos := 0; // end else begin // // end; nVCnt := Screen.PrimaryMonitor.Height div Height; nHPos := _nNotiCnt mod nVCnt; if nHPos = 0 then begin Left := Left - (_nNotiCnt div nVCnt) * Width; nHPos := nVCnt; end else Left := Left - ((_nNotiCnt div nVCnt) + 1) * Width; Top := Top - (nHPos * Height); end; tInit.Enabled := true; {$IFDEF _HE_} nHPos := gMgSvc.ModePolicy.NotiCloseSec; if nHPos > 0 then begin tClose.Interval := nHPos * 1000;; tClose.Enabled := true; end else if IsHD then begin tClose.Interval := 5000; tClose.Enabled := true; end; {$ENDIF} end; procedure TDlgNoticeBT.CreateParams(var Params: TCreateParams); begin Inherited CreateParams(Params); Params.ExStyle := WS_EX_APPWINDOW; end; Destructor TDlgNoticeBT.Destroy; begin if Mutex_ <> nil then FreeAndNil(Mutex_); Inherited; end; procedure TDlgNoticeBT.SetNotiForm; begin cpMain.ActiveCard := cdDef; // if aNotiType = nftNormal then // begin // lbTitle.Caption := RS_TitleVul; // imgTop.Picture.Assign(imgTitles.Items[0].PngImage); // Width := 454; // Height := 461; // lbTitle.Top := 193; // lbTitle.Left := 31; // mmMsg.Top := 44; // mmMsg.Left := 31; // lbMode.Left := 31; // lbOk.Top := 187; // lbOk.Left := 31; // imgOk.Top := 187; // imgOk.Left := 31; // lbSet.Top := 187; // lbSet.Left := 243; // imgSet.Top := 187; // imgSet.Left := 243; // lbMsgEx.Top := 163; // // if pnTop.Visible then // begin // Height := Height + pnTop.Height; // lbTitle.Top := lbTitle.Top + pnTop.Height; // mmMsg.Top := mmMsg.Top + pnTop.Height; //// lbOk.Top := lbOk.Top + pnTop.Height; //// imgOk.Top := imgOk.Top + pnTop.Height; //// lbSet.Top := lbSet.Top + pnTop.Height; //// imgSet.Top := imgSet.Top + pnTop.Height; // lbMsgEx.Top := lbMsgEx.Top + pnTop.Height; // end; // end else begin if not pnTop.Visible then Height := Height - pnTop.Height; end; end; procedure TDlgNoticeBT.PopupMessage(sJsonData: String); var O: ISuperObject; MsgList: TStringList; sTemp: String; StrList: TStringList; procedure SetOneNomal(bShowTitle: Boolean = false); begin SetOneButtion; lbTitle.Visible := bShowTitle; mmMsg.Font.Color := $635653; mmMsg.Font.Style := mmMsg.Font.Style + [fsBold]; // if not bShowTitle and (NotiType <> nftMin) then // mmMsg.Top := lbTitle.Top; end; procedure SetPrevent(bOneButton: Boolean = true; bReqDevExcept: Boolean = false); begin if bOneButton then begin SetOneButtion; end else if bReqDevExcept then begin imgSet.Tag := 4; SetImgBtn(imgSet, imgSet.Tag); sCmdParam_ := 'RegDevExcept'; end; // if NotiType = nftMin then lbTitle.Caption := RS_TitlePreventSimple; // else // lbTitle.Caption := RS_TitlePrevent; mmMsg.Font.Color := $635653; mmMsg.Font.Style := mmMsg.Font.Style + [fsBold]; // MsgList.Add(APP_TITLE); // MsgList.Add('보안정책 위반행위가 탐지되었습니다.'); // MsgList.Add(''); end; var nType: Integer; begin try Guard(StrList, TStringList.Create); O := SO(sJsonData); nType := O.I['T']; Guard(MsgList, TStringList.Create); // TTgTrace.T('PopupMessage() .. Type=%d', [O.I['T']]); case nType of TYPE_MSG_PREVENT_BLUETOOTH : begin if CUSTOMER_TYPE = CUSTOMER_LX then SetOneButtion else begin {$IFDEF _HE_} if IsApproveSupport and gMgSvc.UseApproval then SetPrevent((gMgSvc.IsNewApi and not PO.AbleBtExceptReq and not PO.BtApproval) or (CUSTOMER_TYPE = CUSTOMER_HDENG) or (CUSTOMER_TYPE = CUSTOMER_GEC), true) else SetPrevent((gMgSvc.IsNewApi and not PO.AbleBtExceptReq) or (CUSTOMER_TYPE = CUSTOMER_HDENG) or (CUSTOMER_TYPE = CUSTOMER_GEC), true) {$ELSE} SetPrevent(true, true); {$ENDIF} end; MsgList.Add(RS_DetectBlue); SplitString2(O.S['D'], '|', StrList, true); {$IFDEF _HE_} ReqDevExceptInfo_.ReqDevType := rdtBluetooth; // ReqDevExceptInfo_.sDevName := Format('Ts (%s)', [StrList[0], StrList[1]]); // 이거 왜 이렇게 했는지 기억이 안남... 25_0218 08:50:41 kku ReqDevExceptInfo_.sDevName := Format('%s, %s', [StrList[0], StrList[1]]); try ReqDevExceptInfo_.sSerial := StrList[2]; except ReqDevExceptInfo_.sSerial := 'Unknown'; end; {$ENDIF} MsgList.Add(Format(' - Name : %s', [StrList[0]])); MsgList.Add(Format(' - Type : %s', [StrList[1]])); // if StrList.Count > 2 then // MsgList.Add(Format(' - Adress : %s', [StrList[2]])); if StrList.Count > 3 then MsgList.Add(RS_BlueCut); end; end; {$IFDEF _HE_} if PO.NotifyType = nftACenter then begin _nNotiCnt := 0; // 알림센터에서 일반 팝업 으로 넘어갈때를 위함, 일단 여기에 넣음..22_0825 09:02:09 kku var sTitle: String := RS_SecuViol; case O.I['T'] of TYPE_MSG_SAFEAPPLIED : sTitle := RS_Info; TYPE_MSG_OLD_WINDOWS, TYPE_MSG_VUL_OS, TYPE_MSG_VUL_PW, TYPE_MSG_VUL_AV, TYPE_MSG_VUL_FW, TYPE_MSG_VUL_SCREEN, TYPE_MSG_VUL_ALLOWACCESS, TYPE_MSG_VUL_EMPNO : sTitle := RS_Vul; // TYPE_MSG_NOTIFICATION, TYPE_MSG_UPDATE, TYPE_MSG_AFTERREPORT : begin sTitle := RS_Info; end; TYPE_MSG_NOTIFICATION : sTitle := RS_Noti; end; sNotiCenterMsg_ := sTitle + ':' + MsgList.Text; end else {$ENDIF} begin mmMsg.Text := MsgList.Text; // if ((NotiType = nftNormal) and (mmMsg.Lines.Count > 9)) or // ((NotiType = nftMin) and (mmMsg.Lines.Count > 5)) then if mmMsg.Lines.Count > 5 then mmMsg.ScrollBars := TScrollStyle.ssVertical; {$IFNDEF _HE_} Show; {$ENDIF} end; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. PopupMessage()'); end; end; procedure TDlgNoticeBT.FormClose(Sender: TObject; var Action: TCloseAction); begin try if _nNotiCnt > 0 then Dec(_nNotiCnt); Action := caFree; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. FormClose()'); end; end; procedure TDlgNoticeBT.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = #27 then begin try Close; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. FormKeyPress()'); end; end; end; procedure TDlgNoticeBT.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); end; procedure TDlgNoticeBT.FormShow(Sender: TObject); begin FormStyle := fsNormal; end; procedure TDlgNoticeBT.imgOkClick(Sender: TObject); begin try Close; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. imgOkClick()'); end; end; procedure TDlgNoticeBT.imgOkMouseEnter(Sender: TObject); var img: TImage; begin if Sender = nil then exit; if Sender is TImage then img := TImage(Sender) else if Sender = lbOk then img := imgOk else img := imgSet; SetImgBtn(img, img.Tag + 1); end; procedure TDlgNoticeBT.imgOkMouseLeave(Sender: TObject); var img: TImage; begin if Sender = nil then exit; if Sender is TImage then img := TImage(Sender) else if Sender = lbOk then img := imgOk else img := imgSet; SetImgBtn(img, img.Tag); end; procedure TDlgNoticeBT.imgSetClick(Sender: TObject); var sHlpExe: String; begin {$IFDEF _HE_} if sCmdParam_ <> '' then begin if sCmdParam_ = 'ChangeEmpNo' then begin if gMain <> nil then begin gMain.imgChangeEmpNoClick(nil); end; end else if sCmdParam_ = 'RegDevExcept' then begin if (IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.UsbApproval and (ReqDevExceptInfo_.ReqDevType = rdtUsbDrive)) or (IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.CdApproval and (ReqDevExceptInfo_.ReqDevType = rdtCdrom)) or (IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.MtpApproval and (ReqDevExceptInfo_.ReqDevType = rdtMtp)) or (IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.BtApproval and (ReqDevExceptInfo_.ReqDevType = rdtBluetooth)) or (IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.ExFApproval and (ReqDevExceptInfo_.ReqDevType = rdtExpFile)) then begin var nType: Integer := -1; ZeroMemory(@LogInfo, SizeOf(LogInfo)); LogInfo.sCode := REQUEST_APPROVAL; LogInfo.sDevName := ReqDevExceptInfo_.sDevName; LogInfo.sDevSerial := ReqDevExceptInfo_.sSerial; case ReqDevExceptInfo_.ReqDevType of rdtUsbDrive : begin nType := 1; LogInfo.sSummary := 'Approval Request : USB'; end; rdtExpFile : begin nType := 4; LogInfo.sDevSerial := ''; var O: ISuperObject := nil; try O := SO(ReqDevExceptInfo_.sSerial); except end; if (O <> nil) and (O.DataType = stArray) then begin LogInfo.sSummary := Format('Approval Request : File Export (%d)', [O.AsArray.Length]); if O.AsArray.Length = 1 then LogInfo.sPath := O.AsArray[0].S['filePath']; end else LogInfo.sSummary := 'Approval Request : File Export'; end; rdtMtp : begin nType := 5; LogInfo.sSummary := 'Approval Request : MTP'; end; rdtBluetooth : begin nType := 6; LogInfo.sSummary := 'Approval Request : Bluetooth'; end; rdtCdrom : begin nType := 7; LogInfo.sSummary := 'Approval Request : CD/DVD'; end; end; var sUrl: String := gMgSvc.SendApproval(nType, @ReqDevExceptInfo_); if sUrl = '' then begin TTgTrace.T('Fail .. SendApproval(1)'); MessageBox(Handle, PChar(RS_NoApprovalInfo), PChar(APP_TITLE), MB_ICONWARNING or MB_OK); end else begin gMgSvc.SendEventLogEx(@LogInfo, false); // ExecutePath(gMgSvc.DestIPort + sUrl); sHlpExe := 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 else if Pos('412', FreeLocalizer.LanguageFile) = 0 then begin TDlgReqDevExcept.Create(nil, ReqDevExceptInfo_).Show; end else begin var sExe: String := GetRunExePathDir + DIR_CONF + EXE_HLP; if FileExists(sExe) then begin var O: ISuperObject := SO; O.I['RcvWnd'] := gMgSvc.RcvHwnd; O.I['Cmd'] := HPCMD_REQ_DEVICE_EXCEPT; O.S['WinCap'] := APP_TITLE; O.O['ReqInfo'] := TTgJson.ValueToJsonObject(ReqDevExceptInfo_); O.I['CT'] := CUSTOMER_TYPE; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sExe, '', SW_SHOWNORMAL); {$ENDIF} end; end; end else if (sCmdParam_ = 'RegUrlExcept') and IsApproveSupport and gMgSvc.UseApproval and gMgSvc.ModePolicy.WebUrlApproval then begin var sUrl: String := gMgSvc.SendApproval(2, @ReqDevExceptInfo_.sSerial[1]); if sUrl = '' then begin TTgTrace.T('Fail .. SendApproval(2)'); MessageBox(Handle, PChar(RS_NoApprovalInfo), PChar(APP_TITLE), MB_ICONWARNING or MB_OK); end else begin LogInfo.sCode := REQUEST_APPROVAL; LogInfo.sDestIpUrl := ReqDevExceptInfo_.sSerial; LogInfo.sSummary := 'Approval Request : URL'; gMgSvc.SendEventLogEx(@LogInfo, false); // ExecutePath(gMgSvc.DestIPort + sUrl); sHlpExe := 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 else if sCmdParam_ = 'CttSch' then begin gMain.lbCttSchRstClick(nil); // TDlgViewCustomCttSchResult.Create(nil).Show; end else if sCmdParam_ = 'OutlookAddin' then begin sHlpExe := GetRunExePathDir + DIR_CONF + EXE_HP; if FileExists(sHlpExe) then begin var O: ISuperObject := SO; O.I['RcvWnd'] := gMain.Handle; O.B['RunAs'] := true; O.I['Cmd'] := HPCMD_INSTALL_OUTLOOK_ADDIN; O.S['MdDir'] := GetRunExePathDir + DIR_CONF; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} end; end else if sCmdParam_.StartsWith('http') then begin sHlpExe := 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'] := sCmdParam_; SaveJsonObjToFile(O, GetRunExePathDir + DIR_CONF + DAT_PARAM); {$IFDEF DEBUG} ExecutePath(sHlpExe); {$ELSE} ExecuteAppAsUser('explorer.exe', sHlpExe, '', SW_SHOWNORMAL); {$ENDIF} end else ExecutePath(sCmdParam_); end else if sCmdParam_.StartsWith('/c') then ExecutePath_hide('cmd.exe', sCmdParam_) end; {$ENDIF} Close; end; procedure TDlgNoticeBT.imgTopMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); end; procedure TDlgNoticeBT.lbPiCntClick(Sender: TObject); begin {$IFDEF _HE_} gMain.lbCttSchRstClick(nil); {$ENDIF} end; procedure TDlgNoticeBT.lbPiCntMouseEnter(Sender: TObject); begin lbPiCnt.Font.Style := lbPiCnt.Font.Style + [fsUnderline]; lbPiCnt.Font.Color := clBlue; end; procedure TDlgNoticeBT.lbPiCntMouseLeave(Sender: TObject); begin lbPiCnt.Font.Style := lbPiCnt.Font.Style - [fsUnderline]; lbPiCnt.Font.Color := clBlack; end; procedure TDlgNoticeBT.SetImgBtn(imgBtn: TImage; nImgIdx: Integer); begin try if imgBtnList.Count <= nImgIdx then exit; imgBtnList.GetIcon(nImgIdx, imgBtn.Picture.Icon); imgBtn.Repaint; case nImgIdx of 2, 3 : begin lbSet.Font.Color := clGreen; if lbSet.Caption <> RS_Confirm then // 음.. 깔끔하진 않지만 일단 이렇게 처리 25_0218 11:29:22 kku lbSet.Caption := RS_SetVul; end; 4, 5 : begin lbSet.Font.Color := clPurple; lbSet.Caption := RS_DevExcept; end; end; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. SetImgBtn()'); end; end; procedure TDlgNoticeBT.SetOneButtion; begin imgSet.Visible := false; lbSet.Visible := imgSet.Visible; imgOk.Left := (Width div 2) - (imgOk.Width div 2); lbOk.Left := imgOk.Left; end; procedure TDlgNoticeBT.SetPiResult4HEC(nRstCnt: Integer); begin // lbTitle.Visible := false; if lbTitle.Top = 193 then begin // Label1.Left := Label1.Left + 25; Label2.Left := Label2.Left + 25; lbGrade.Left := lbGrade.Left + 25; lbPiCnt.Left := lbPiCnt.Left + 25; Label5.Left := Label5.Left + 25; end; lbPiCnt.Caption := Format('(%d)', [nRstCnt]); // if nRstCnt < gMgSvc.PrefModel.PersonalInfoFileMax then {$IFDEF _HE_} if (gMgSvc.ProcCampn <> nil) and (gMgSvc.ProcCampn.Info.nNotiWarIfCnt > nRstCnt) then begin lbGrade.Caption := '''양호'''; lbGrade.Font.Color := clBlue; end; {$ENDIF} cpMain.ActiveCard := cdPI; end; procedure TDlgNoticeBT.tCloseTimer(Sender: TObject); begin tClose.Enabled := false; btnClose.Click; end; procedure TDlgNoticeBT.tInitTimer(Sender: TObject); begin tInit.Enabled := false; SetImgBtn(imgOk, imgOk.Tag); SetImgBtn(imgSet, imgSet.Tag); Application.ProcessMessages; end; procedure TDlgNoticeBT.btnCloseClick(Sender: TObject); begin Close; end; end.