BSOne.SFC/Tocsg.Module/BlueMon/DNoticeBT.pas

999 lines
36 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<TReqDevExceptInfo>(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.