BSOne.SFC/Tocsg.Module/AipMdHelper/DAmhMain.pas

498 lines
12 KiB
Plaintext

unit DAmhMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TDlgAmhMain = class(TForm)
pnTop: TPanel;
Label1: TLabel;
Label2: TLabel;
edAipPath: TEdit;
edTargetDir: TEdit;
mmLog: TMemo;
btnEnc: TButton;
btnDec: TButton;
btnEncCnt: TButton;
btnExtrLabel: TButton;
btnSetLabel: TButton;
btnLabelChk: TButton;
procedure btnEncClick(Sender: TObject);
procedure btnDecClick(Sender: TObject);
procedure btnEncCntClick(Sender: TObject);
procedure btnExtrLabelClick(Sender: TObject);
procedure btnSetLabelClick(Sender: TObject);
procedure btnLabelChkClick(Sender: TObject);
private
{ Private declarations }
function FindAipMdWnd: HWND;
function SendData(h: HWND; dwCmd: DWORD; const sData: String): LONGLONG;
public
{ Public declarations }
end;
var
DlgAmhMain: TDlgAmhMain;
implementation
uses
Tocsg.Files, Tocsg.Safe, Tocsg.Path, Tocsg.Shell, Tocsg.Process,
Tocsg.DateTime, Tocsg.WndUtil, superobject, Tocsg.Registry;
{$R *.dfm}
procedure TDlgAmhMain.btnEncClick(Sender: TObject);
var
FileList: TStringList;
i, nCnt, n: Integer;
sTaskDir,
sMdPath, sSrcPath, sDestPath: String;
dtBegin: TDateTime;
O: ISuperObject;
begin
edAipPath.Text := Trim(edAipPath.Text);
edTargetDir.Text := Trim(edTargetDir.Text);
if edAipPath.Text = '' then
begin
MessageBox(Handle, PChar('AIP 모듈 경로를 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edAipPath.SetFocus;
exit;
end;
sMdPath := edAipPath.Text;
if not FileExists(sMdPath) then
begin
MessageBox(Handle, PChar('AIP 모듈이 존재하지 않습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edAipPath.SetFocus;
exit;
end;
if edTargetDir.Text = '' then
begin
MessageBox(Handle, PChar('대상 폴더를 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edTargetDir.SetFocus;
exit;
end;
sTaskDir := GetRunExePathDir + 'Task\';
if not ForceDirectories(sTaskDir) then
begin
MessageBox(Handle, PChar('작업 폴더를 생성하는 중 오류가 발생했습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
exit;
end;
Guard(FileList, TStringList.Create);
ExtrFilesPathFromDir(edTargetDir.Text, FileList);
var h: HWND := FindAipMdWnd;
dtBegin := Now;
nCnt := 0;
for i := 0 to FileList.Count - 1 do
begin
sSrcPath := FileList[i];
if not FileExists(sSrcPath) then
continue;
sDestPath := sTaskDir + ExtractFileName(sSrcPath);
O := SO;
O.S['src'] := sSrcPath;
O.S['dst'] := sDestPath;
if h <> 0 then
begin
n := SendData(h, 1, O.AsString);
if (n = 10) and FileExists(sDestPath) then
begin
DeleteFile(sSrcPath);
MoveFile_wait(sDestPath, sSrcPath);
Inc(nCnt);
end;
end;
// ExecuteAppWaitUntilTerminate(sMdPath, Format('-e "%s" "%s"', [sSrcPath, sDestPath]), SW_HIDE, 30000);
// if FileExists(sDestPath) then
// begin
// DeleteFile(sSrcPath);
// MoveFile_wait(sDestPath, sSrcPath);
// Inc(nCnt);
// end;
end;
ShowMessage(Format('성공 : %d, 소요시간 : %s', [nCnt, ConvSecBetweenToProgTime(dtBegin, Now)]));
end;
procedure TDlgAmhMain.btnEncCntClick(Sender: TObject);
var
FileList: TStringList;
i, nCnt, n: Integer;
sTaskDir,
sMdPath, sSrcPath, sDestPath: String;
dtBegin: TDateTime;
O: ISuperObject;
begin
edAipPath.Text := Trim(edAipPath.Text);
edTargetDir.Text := Trim(edTargetDir.Text);
if edAipPath.Text = '' then
begin
MessageBox(Handle, PChar('AIP 모듈 경로를 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edAipPath.SetFocus;
exit;
end;
sMdPath := edAipPath.Text;
if not FileExists(sMdPath) then
begin
MessageBox(Handle, PChar('AIP 모듈이 존재하지 않습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edAipPath.SetFocus;
exit;
end;
if edTargetDir.Text = '' then
begin
MessageBox(Handle, PChar('대상 폴더를 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edTargetDir.SetFocus;
exit;
end;
sTaskDir := GetRunExePathDir + 'Task\';
if not ForceDirectories(sTaskDir) then
begin
MessageBox(Handle, PChar('작업 폴더를 생성하는 중 오류가 발생했습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
exit;
end;
Guard(FileList, TStringList.Create);
ExtrFilesPathFromDir(edTargetDir.Text, FileList);
var h: HWND := FindAipMdWnd;
dtBegin := Now;
nCnt := 0;
for i := 0 to FileList.Count - 1 do
begin
sSrcPath := FileList[i];
if not FileExists(sSrcPath) then
continue;
sDestPath := sTaskDir + ExtractFileName(sSrcPath);
O := SO;
O.S['src'] := sSrcPath;
O.S['dst'] := sDestPath;
if h <> 0 then
begin
n := SendData(h, 3, O.AsString);
if n = 10 then
Inc(nCnt);
end;
// ExecuteAppWaitUntilTerminate(sMdPath, Format('"%s" "%s"', [sSrcPath, sDestPath]), SW_HIDE, 30000);
// if FileExists(sDestPath) then
// begin
// DeleteFile(sSrcPath);
// MoveFile_wait(sDestPath, sSrcPath);
// Inc(nCnt);
// end;
end;
ShowMessage(Format('성공 : %d, 소요시간 : %s', [nCnt, ConvSecBetweenToProgTime(dtBegin, Now)]));
end;
procedure TDlgAmhMain.btnExtrLabelClick(Sender: TObject);
var
dtBegin: TDateTime;
O: ISuperObject;
sPath,
sTaskDir: String;
n: Integer;
begin
sTaskDir := GetRunExePathDir + 'Task\';
if not ForceDirectories(sTaskDir) then
begin
MessageBox(Handle, PChar('작업 폴더를 생성하는 중 오류가 발생했습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
exit;
end;
var h: HWND := FindAipMdWnd;
dtBegin := Now;
if h <> 0 then
begin
O := SO;
sPath := sTaskDir + 'LabelList.txt';
O.S['src'] := sPath;
O.S['dst'] := sPath + '.tmp';
n := SendData(h, 0, O.AsString);
if (n = 10) and FileExists(sPath) then
begin
mmLog.Lines.LoadFromFile(sPath, TEncoding.UTF8);
DeleteFile(sPath);
end;
end;
ShowMessage(Format('소요시간 : %s', [ConvSecBetweenToProgTime(dtBegin, Now)]));
end;
procedure TDlgAmhMain.btnLabelChkClick(Sender: TObject);
const
REG_TEST = 'SOFTWARE\eCrmHomeEdition';
var
dtBegin: TDateTime;
O: ISuperObject;
sTaskDir: String;
n: Integer;
begin
// sTaskDir := GetRunExePathDir + 'Task\';
// if not ForceDirectories(sTaskDir) then
// begin
// MessageBox(Handle, PChar('작업 폴더를 생성하는 중 오류가 발생했습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
// exit;
// end;
// SetRegValueString(HKEY_LOCAL_MACHINE, REG_TEST, 'TEST', 'TEST', true);
// mmLog.Lines.Add(GetRegValueAsString(HKEY_LOCAL_MACHINE, 'SOFTWARE\eCrmHomeEdition', 'TEST', true));
// exit;
edTargetDir.Text := Trim(edTargetDir.Text);
var h: HWND := FindWindow(nil, 'BSOne-AIP-T140713');
dtBegin := Now;
if h <> 0 then
begin
O := SO;
O.S['src'] := edTargetDir.Text;
O.S['dst'] := edTargetDir.Text + '.tmp';
O.S['ssid'] := GetRegRecentUserSid;
n := SendData(h, 4, O.AsString);
if n = 10 then
begin
mmLog.Lines.Add(GetRegValueAsString(HKEY_CURRENT_USER, 'SOFTWARE\eCrmHomeEdition', 'ALabel'));
// DelRegValue(HKEY_CURRENT_USER, 'SOFTWARE\eCrmHomeEdition', 'ALabel');
end else
mmLog.Lines.Add('실패');
end else
mmLog.Lines.Add('실패2');
ShowMessage(Format('소요시간 : %s', [ConvSecBetweenToProgTime(dtBegin, Now)]));
end;
procedure TDlgAmhMain.btnSetLabelClick(Sender: TObject);
var
FileList: TStringList;
i, nCnt, n: Integer;
sTaskDir,
sMdPath, sSrcPath, sDestPath: String;
dtBegin: TDateTime;
O: ISuperObject;
begin
edAipPath.Text := Trim(edAipPath.Text);
edTargetDir.Text := Trim(edTargetDir.Text);
if edAipPath.Text = '' then
begin
MessageBox(Handle, PChar('AIP 모듈 경로를 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edAipPath.SetFocus;
exit;
end;
sMdPath := edAipPath.Text;
if not FileExists(sMdPath) then
begin
MessageBox(Handle, PChar('AIP 모듈이 존재하지 않습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edAipPath.SetFocus;
exit;
end;
if edTargetDir.Text = '' then
begin
MessageBox(Handle, PChar('대상 폴더를 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edTargetDir.SetFocus;
exit;
end;
sTaskDir := GetRunExePathDir + 'Task\';
if not ForceDirectories(sTaskDir) then
begin
MessageBox(Handle, PChar('작업 폴더를 생성하는 중 오류가 발생했습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
exit;
end;
Guard(FileList, TStringList.Create);
ExtrFilesPathFromDir(edTargetDir.Text, FileList);
var h: HWND := FindAipMdWnd;
dtBegin := Now;
nCnt := 0;
for i := 0 to FileList.Count - 1 do
begin
sSrcPath := FileList[i];
if not FileExists(sSrcPath) then
continue;
sDestPath := sTaskDir + ExtractFileName(sSrcPath);
O := SO;
O.S['src'] := sSrcPath;
O.S['dst'] := sDestPath;
O.S['lid'] := '9877e059-3e04-4eba-ad87-888eb0c7e9ba';
if h <> 0 then
begin
n := SendData(h, 5, O.AsString);
if (n = 10) and FileExists(sDestPath) then
begin
DeleteFile(sSrcPath);
MoveFile_wait(sDestPath, sSrcPath);
Inc(nCnt);
end;
end;
// ExecuteAppWaitUntilTerminate(sMdPath, Format('"%s" "%s"', [sSrcPath, sDestPath]), SW_HIDE, 30000);
// if FileExists(sDestPath) then
// begin
// DeleteFile(sSrcPath);
// MoveFile_wait(sDestPath, sSrcPath);
// Inc(nCnt);
// end;
end;
ShowMessage(Format('성공 : %d, 소요시간 : %s', [nCnt, ConvSecBetweenToProgTime(dtBegin, Now)]));
end;
function TDlgAmhMain.FindAipMdWnd: HWND;
var
nTO: Integer;
sPName: String;
begin
nTO := 0;
Result := FindWindow(nil, 'BSOne-AIP-T140713');
if Result = 0 then
begin
sPName := ExtractFileName(edAipPath.Text);
while Result = 0 do
begin
if nTO > 300 then
exit;
if GetProcessPidByName(sPName) = 0 then
begin
if not FileExists(edAipPath.Text) then
exit;
ExecutePath_hide(edAipPath.Text, '-r');
Sleep(500);
end;
Result := FindWindow(nil, 'BSOne-AIP-T140713');
Sleep(200);
end;
if Result = 0 then
TerminateProcessByName(sPName);
end;
end;
function TDlgAmhMain.SendData(h: HWND; dwCmd: DWORD; const sData: String): LONGLONG;
var
CopyData: TCopyDataStruct;
begin
CopyData.dwData := dwCmd;
CopyData.cbData := (Length(sData) + 1) * 2;
CopyData.lpData := PChar(sData);
Result := SendMessage(h, WM_COPYDATA, 0, NativeInt(@CopyData));
end;
procedure TDlgAmhMain.btnDecClick(Sender: TObject);
var
FileList: TStringList;
i, nCnt, n: Integer;
sTaskDir,
sMdPath, sSrcPath, sDestPath: String;
dtBegin: TDateTime;
O: ISuperObject;
begin
edAipPath.Text := Trim(edAipPath.Text);
edTargetDir.Text := Trim(edTargetDir.Text);
if edAipPath.Text = '' then
begin
MessageBox(Handle, PChar('AIP 모듈 경로를 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edAipPath.SetFocus;
exit;
end;
sMdPath := edAipPath.Text;
if not FileExists(sMdPath) then
begin
MessageBox(Handle, PChar('AIP 모듈이 존재하지 않습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edAipPath.SetFocus;
exit;
end;
if edTargetDir.Text = '' then
begin
MessageBox(Handle, PChar('대상 폴더를 입력해 주십시오.'), PChar(Caption), MB_ICONWARNING or MB_OK);
edTargetDir.SetFocus;
exit;
end;
sTaskDir := GetRunExePathDir + 'Task\';
if not ForceDirectories(sTaskDir) then
begin
MessageBox(Handle, PChar('작업 폴더를 생성하는 중 오류가 발생했습니다.'), PChar(Caption), MB_ICONWARNING or MB_OK);
exit;
end;
Guard(FileList, TStringList.Create);
ExtrFilesPathFromDir(edTargetDir.Text, FileList);
var h: HWND := FindAipMdWnd;
dtBegin := Now;
nCnt := 0;
for i := 0 to FileList.Count - 1 do
begin
sSrcPath := FileList[i];
if not FileExists(sSrcPath) then
continue;
sDestPath := sTaskDir + ExtractFileName(sSrcPath);
O := SO;
O.S['src'] := sSrcPath;
O.S['dst'] := sDestPath;
if h <> 0 then
begin
n := SendData(h, 2, O.AsString);
if (n = 10) and FileExists(sDestPath) then
begin
DeleteFile(sSrcPath);
MoveFile_wait(sDestPath, sSrcPath);
Inc(nCnt);
end;
end;
// ExecuteAppWaitUntilTerminate(sMdPath, Format('"%s" "%s"', [sSrcPath, sDestPath]), SW_HIDE, 30000);
// if FileExists(sDestPath) then
// begin
// DeleteFile(sSrcPath);
// MoveFile_wait(sDestPath, sSrcPath);
// Inc(nCnt);
// end;
end;
ShowMessage(Format('성공 : %d, 소요시간 : %s', [nCnt, ConvSecBetweenToProgTime(dtBegin, Now)]));
end;
end.