877 lines
25 KiB
Plaintext
877 lines
25 KiB
Plaintext
unit DAstMain;
|
||
|
||
interface
|
||
|
||
uses
|
||
Define,
|
||
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
|
||
Vcl.ExtCtrls, Vcl.Menus, Vcl.Forms, Vcl.Dialogs, Vcl.Controls, FShotcutForder,
|
||
Vcl.ComCtrls, Vcl.StdCtrls, Tocsg.Trace, ManagerConfig,
|
||
Vcl.Graphics, DAngle, Vcl.Buttons, ManageWindowPage,
|
||
CtrlWndActiveHook, KeyMonDLL;
|
||
type
|
||
TDlgKoAstMain = class(TForm)
|
||
mMain: TMainMenu;
|
||
miFile: TMenuItem;
|
||
miExit: TMenuItem;
|
||
rMain: TTrayIcon;
|
||
popTry: TPopupMenu;
|
||
miTrayExit: TMenuItem;
|
||
N1: TMenuItem;
|
||
miConfig: TMenuItem;
|
||
tInit: TTimer;
|
||
N2: TMenuItem;
|
||
miOpen: TMenuItem;
|
||
StatusBar1: TStatusBar;
|
||
S1: TMenuItem;
|
||
E1: TMenuItem;
|
||
F1: TMenuItem;
|
||
pnTop: TPanel;
|
||
edErrorCode: TEdit;
|
||
btnErrorCode: TButton;
|
||
Label1: TLabel;
|
||
pcMain: TPageControl;
|
||
toolAddWindow: TBitBtn;
|
||
popPage: TPopupMenu;
|
||
miWndPage: TMenuItem;
|
||
N3: TMenuItem;
|
||
miWndPageClose: TMenuItem;
|
||
miView: TMenuItem;
|
||
miStayOnTop: TMenuItem;
|
||
N4: TMenuItem;
|
||
miKeylogView: TMenuItem;
|
||
tbAlphaBlend: TTrackBar;
|
||
chAlphaBlend: TCheckBox;
|
||
N5: TMenuItem;
|
||
miLockScreen: TMenuItem;
|
||
H1: TMenuItem;
|
||
procedure miExitClick(Sender: TObject);
|
||
procedure tInitTimer(Sender: TObject);
|
||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||
procedure miConfigClick(Sender: TObject);
|
||
procedure miOpenClick(Sender: TObject);
|
||
procedure btnErrorCodeClick(Sender: TObject);
|
||
procedure edErrorCodeKeyPress(Sender: TObject; var Key: Char);
|
||
procedure toolAddWindowMouseDown(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure toolAddWindowMouseMove(Sender: TObject; Shift: TShiftState; X,
|
||
Y: Integer);
|
||
procedure toolAddWindowMouseUp(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure pcMainMouseDown(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
procedure popPagePopup(Sender: TObject);
|
||
procedure miWndPageCloseClick(Sender: TObject);
|
||
procedure miViewClick(Sender: TObject);
|
||
procedure miStayOnTopClick(Sender: TObject);
|
||
procedure miKeylogViewClick(Sender: TObject);
|
||
procedure chAlphaBlendClick(Sender: TObject);
|
||
procedure tbAlphaBlendChange(Sender: TObject);
|
||
procedure miLockScreenClick(Sender: TObject);
|
||
procedure H1Click(Sender: TObject);
|
||
private
|
||
{ Private declarations }
|
||
WndHook_: TCtrlWndActiveHook;
|
||
Config_: TManagerConfig;
|
||
Trace_: TTgTrace;
|
||
KeyMon_: TKeyMonDLL;
|
||
LastWindowState_: TWindowState;
|
||
// Clipboard_: TDrawClipboard;
|
||
bSeeking_: Boolean;
|
||
hPreTopHWND_: HWND;
|
||
DlgAngle_: TDlgAngle;
|
||
sSelfProcName_: String;
|
||
WndPages_: TManagerWindowPage;
|
||
dwCurrentProcPid_: DWORD;
|
||
SysImgList: TImageList;
|
||
|
||
// procedure OnDrawClipboard(Sender: TDrawClipboard);
|
||
procedure VisibleMainform(bVal: Boolean);
|
||
procedure SaveFormState;
|
||
|
||
procedure OnClickWndPage(Sender: TObject);
|
||
|
||
procedure OnActiveWindow(Sender: TCtrlWndActiveHook; aWindowEntry: TProcessEntry);
|
||
procedure OnDeActiveWindow(Sender: TCtrlWndActiveHook; aWindowEntry: TProcessEntry);
|
||
|
||
function IsAbleAddWindow(hWindow: HWND): Boolean;
|
||
procedure ProcessDetectWindow(hWindow: HWND);
|
||
public
|
||
{ Public declarations }
|
||
Constructor Create(aOwner: TComponent); override;
|
||
Destructor Destroy; override;
|
||
|
||
procedure CreateWindowTab(aWndInfo: TWndInfo);
|
||
|
||
procedure process_WM_HOTKEY(var msg: TMessage); Message WM_HOTKEY;
|
||
procedure process_WM_SYSCOMMAND(var Msg: TWMSysCommand); Message WM_SYSCOMMAND;
|
||
procedure process_WM_CATCHKEY_NOTIFY(var msg: TMessage); Message WM_CATCHKEY_NOTIFY;
|
||
|
||
procedure process_WM_WNDHOOK_RELOAD(var msg: TMessage); Message WM_WNDHOOK_RELOAD;
|
||
procedure process_WM_WNDHOOK_NOTIFY(var msg: TMessage); Message WM_WNDHOOK_NOTIFY;
|
||
procedure process_WM_MESSAGEHOOK_NOTIFY(var msg: TMessage); Message WM_MESSAGEHOOK_NOTIFY;
|
||
|
||
property KeyMon: TKeyMonDLL read KeyMon_;
|
||
end;
|
||
|
||
var
|
||
DlgKoAstMain: TDlgKoAstMain;
|
||
gMain: TDlgKoAstMain = nil;
|
||
|
||
implementation
|
||
|
||
uses
|
||
Tocsg.Safe, DCloseQuestion, DConfig, Winapi.ShellAPI, Tocsg.Shell,
|
||
Tocsg.Registry, Tocsg.Path, Winapi.ActiveX,
|
||
DShowAudioVolume, Tocsg.WndUtil, Tocsg.Process, FWindowPage,
|
||
DKeyInput, DLockScreen, DefineKeyMon, Vcl.Clipbrd, Tocsg.Keyboard;
|
||
|
||
{$R *.dfm}
|
||
|
||
const
|
||
HOKEY_MAINFORM_SHOWHIDE = 1;
|
||
|
||
var
|
||
_DlgSystemVol: TDlgShowAudioVolume = nil;
|
||
|
||
{ TDlgKoAstMain }
|
||
|
||
Constructor TDlgKoAstMain.Create(aOwner: TComponent);
|
||
|
||
procedure InitControls;
|
||
begin
|
||
with gCfg do
|
||
begin
|
||
LastWindowState_ := wsNormal;
|
||
|
||
AlphaBlend := NormalConfig.AlphaBlend;
|
||
AlphaBlendValue := NormalConfig.AlphaBlendVal;
|
||
chAlphaBlend.Checked := AlphaBlend;
|
||
tbAlphaBlend.Position := AlphaBlendValue;
|
||
|
||
if FormSizeSave then
|
||
begin
|
||
// Position := poDesigned; // ũ<><C5A9> <20><><EFBFBD><EFBFBD> <20>Ҷ<EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD> <20><> <20>ʿ䰡 <20><><EFBFBD><EFBFBD> 15_0506 23:51:39 sunk
|
||
Width := FormWidth;
|
||
Height := FormHeight;
|
||
end;
|
||
|
||
if FormPosSave then
|
||
begin
|
||
Position := poDesigned;
|
||
Top := FormTop;
|
||
Left := FormLeft;
|
||
end;
|
||
|
||
if gCfg.FormInitHide then
|
||
WindowState := wsMinimized;
|
||
|
||
if StartupExecute and not ExistsRunAppByHLM(FAMILY_NAME) then
|
||
AddRunAppByHLM(FAMILY_NAME, Format('"%s%s" /exename %s',
|
||
[GetRunExePathDir, APP_STARTUP, APP_EXECUTE]));
|
||
|
||
end;
|
||
end;
|
||
|
||
procedure LoadKeyHookDLL;
|
||
begin
|
||
KeyMon_ := TKeyMonDLL.Create(Handle, MAP_FILENAME_KM, GetRunExePathDir + DLL_KEYMON);
|
||
if KeyMon_.LastError <> ERROR_SUCCESS then
|
||
begin
|
||
MessageBox(Handle, PChar(Format('DLL <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. Error = %d',
|
||
[KeyMon_.LastError])), APP_NAME, MB_ICONSTOP or MB_OK);
|
||
end;
|
||
end;
|
||
|
||
begin
|
||
Inherited Create(aOwner);
|
||
ASSERT(gMain = nil);
|
||
gMain := Self;
|
||
|
||
// if (@IsProcessDPIAware <> nil) and not IsProcessDPIAware and (@SetProcessDPIAware <> nil) then
|
||
// SetProcessDPIAware;
|
||
|
||
SysImgList := TImageList.Create(Self);
|
||
SysImgList.ShareImages := true;
|
||
SysImgList.Handle := GetShellImageHandle;
|
||
pcMain.Images := SysImgList;
|
||
|
||
dwCurrentProcPid_ := GetCurrentProcessId;
|
||
sSelfProcName_ := UpperCase(ExtractFileName(Application.ExeName));
|
||
|
||
bSeeking_ := false;
|
||
hPreTopHWND_ := 0;
|
||
DlgAngle_ := TDlgAngle.Create(Self);
|
||
|
||
Config_ := TManagerConfig.Create;
|
||
Config_.LoadConfig;
|
||
Trace_ := TTgTrace.Create(Config_.LogPath, ExtractFileName(GetRunExePath) + '.log', true);
|
||
|
||
Caption := Format('%s %s', [APP_NAME, APP_VER]);
|
||
|
||
Trace_.T('[SunkAssister] Begin - %s', [Caption]);
|
||
|
||
// <20><><EFBFBD><EFBFBD> : RegisterHotKey, LoadKeyHookDLL <20>Ŀ<EFBFBD> InitControls <20>̰<EFBFBD> ȣ<><C8A3><EFBFBD>ϸ<EFBFBD> <20>̻<EFBFBD><CCBB>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD> <20>ٲ<EFBFBD><D9B2>
|
||
// WM_CATCHKEY_NOTIFY <20><EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2014-01-06 sunk
|
||
InitControls;
|
||
|
||
// <20>⺻ <20><><EFBFBD><EFBFBD>Ű = WinKey + ` (Ű<><C5B0><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ʿ<EFBFBD> <20>ִ<EFBFBD>)
|
||
if not RegisterHotKey(Handle, HOKEY_MAINFORM_SHOWHIDE, MOD_WIN, $C0) then
|
||
ShowMessage('<27><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD>Ű<EFBFBD><C5B0> <20><><EFBFBD><EFBFBD> <20>ϴµ<CFB4> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>..');
|
||
|
||
{$IFDEF DEBUG}
|
||
if DebugHook = 0 then
|
||
{$ENDIF}
|
||
LoadKeyHookDLL;
|
||
|
||
_DlgSystemVol := TDlgShowAudioVolume.Create(Self);
|
||
_DlgSystemVol.Caption := '<27>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD>';
|
||
|
||
WndHook_ := TCtrlWndActiveHook.Create(Handle, false, false);
|
||
WndHook_.OnActive := OnActiveWindow;
|
||
WndHook_.OnDeActive := OnDeActiveWindow;
|
||
|
||
WndPages_ := TManagerWindowPage.Create;
|
||
|
||
// DragAcceptFiles(FrmShotcutForder.Handle, true);
|
||
|
||
// Clipboard_ := TDrawClipboard.Create;
|
||
// Clipboard_.OnDrawClipboard := OnDrawClipboard;
|
||
|
||
//DragAcceptFiles(Handle, true);
|
||
//ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
|
||
//ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD);
|
||
//ChangeWindowMessageFilter($0049{WM_COPYGLOBALDATA}, MSGFLT_ADD);
|
||
|
||
tInit.Enabled := true;
|
||
end;
|
||
|
||
Destructor TDlgKoAstMain.Destroy;
|
||
begin
|
||
FreeAndNil(WndHook_);
|
||
FreeAndNil(WndPages_);
|
||
// FreeAndNil(Clipboard_);
|
||
// DragAcceptFiles(FrmShotcutForder.Handle, false);
|
||
FreeAndNil(_DlgSystemVol);
|
||
if Assigned(KeyMon_) then
|
||
FreeAndNil(KeyMon_);
|
||
|
||
Trace_.T('[SunkAssister] - End');
|
||
FreeAndNil(Trace_);
|
||
FreeAndNil(Config_);
|
||
|
||
FreeAndNil(DlgAngle_);
|
||
|
||
gMain := nil;
|
||
Inherited;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.CreateWindowTab(aWndInfo: TWndInfo);
|
||
var
|
||
WindowTab: TWndTabSheet;
|
||
begin
|
||
WindowTab := TWndTabSheet.Create(pcMain, aWndInfo);
|
||
WindowTab.PageControl := WindowTab.Owner as TPageControl;
|
||
WindowTab.PageControl.ActivePage := WindowTab;
|
||
|
||
WindowTab.Caption := ExtractFileName(aWndInfo.ProcPath); //GetWindowCaption(aWndInfo.WndHandle);
|
||
WindowTab.ImageIndex := GetShellImageIndex_path(aWndInfo.ProcPath);
|
||
// case aTaskInfo.TaskKind of
|
||
// tkDiskAnal : WindowTab.ImageIndex := 0;
|
||
// tkPCInspector : WindowTab.ImageIndex := 1;
|
||
// tkCollectData : WindowTab.ImageIndex := 2;
|
||
// end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.toolAddWindowMouseDown(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
begin
|
||
bSeeking_ := true;
|
||
SetCapture(toolAddWindow.Handle);
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.toolAddWindowMouseMove(Sender: TObject; Shift: TShiftState; X,
|
||
Y: Integer);
|
||
var
|
||
pt: TPoint;
|
||
hTemp,
|
||
hTopHWND: HWND;
|
||
WndRect: TRect;
|
||
sClassName,
|
||
sProcName: String;
|
||
begin
|
||
if bSeeking_ then
|
||
begin
|
||
pt.X := X;
|
||
pt.Y := Y;
|
||
pt := ClientToScreen(pt);
|
||
|
||
// OutputDebugString(PChar(Format('X=%d, Y=%d', [pt.X, pt.Y])));
|
||
hTopHWND := GetTopParentHWND(WindowFromPoint(pt));
|
||
if hTopHWND = 0 then
|
||
begin
|
||
hPreTopHWND_ := 0;
|
||
exit;
|
||
end;
|
||
|
||
if (hTopHWND <> Handle) and (hTopHWND <> 0) and (hPreTopHWND_ <> hTopHWND) then
|
||
begin
|
||
hPreTopHWND_ := 0;
|
||
DlgAngle_.Hide;
|
||
|
||
if not IsAbleAddWindow(hTopHWND) then
|
||
exit;
|
||
|
||
hPreTopHWND_ := hTopHWND;
|
||
|
||
GetWindowRect(hPreTopHWND_, WndRect);
|
||
DlgAngle_.ShowAngle(WndRect);
|
||
|
||
OutputDebugString(PChar(GetWindowCaption(hTopHWND)));
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.toolAddWindowMouseUp(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
begin
|
||
DlgAngle_.Hide;
|
||
ReleaseCapture;
|
||
bSeeking_ := false;
|
||
try
|
||
if (hPreTopHWND_ <> 0) and (hPreTopHWND_ <> Handle) then
|
||
begin
|
||
ProcessDetectWindow(hPreTopHWND_);
|
||
end;
|
||
finally
|
||
hPreTopHWND_ := 0;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.btnErrorCodeClick(Sender: TObject);
|
||
var
|
||
nCode: Integer;
|
||
begin
|
||
nCode := StrToIntDef(edErrorCode.Text, -1);
|
||
if nCode <> -1 then
|
||
ShowMessage(SysErrorMessage(nCode));
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.chAlphaBlendClick(Sender: TObject);
|
||
begin
|
||
AlphaBlend := chAlphaBlend.Checked;
|
||
tbAlphaBlend.Enabled := AlphaBlend;
|
||
gCfg.NormalConfig.AlphaBlend := AlphaBlend;
|
||
gCfg.SaveConfig;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.edErrorCodeKeyPress(Sender: TObject; var Key: Char);
|
||
begin
|
||
if Key = #13 then
|
||
begin
|
||
Key := #0;
|
||
btnErrorCode.Click;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.FormClose(Sender: TObject; var Action: TCloseAction);
|
||
begin
|
||
SaveFormState;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.H1Click(Sender: TObject);
|
||
begin
|
||
VisibleMainform(false);
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.OnActiveWindow(Sender: TCtrlWndActiveHook; aWindowEntry: TProcessEntry);
|
||
var
|
||
WndTab: TWndTabSheet;
|
||
OldFormStyle: TFormStyle;
|
||
begin
|
||
// <20><><EFBFBD>Ե<EFBFBD> <20>ܺ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>찡 Ŭ<><C5AC><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>찡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߵ<EFBFBD><DFB5><EFBFBD> <20><><EFBFBD><EFBFBD> 14_0409 00:05:15 sunk
|
||
// WndTab := WndPages_.WndTabSheet[aWindowEntry.PID];
|
||
// if Assigned(WndTab) then
|
||
// begin
|
||
// OldFormStyle := FormStyle;
|
||
// FormStyle := fsStayOnTop;
|
||
// FormStyle := OldFormStyle;
|
||
// end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.OnDeActiveWindow(Sender: TCtrlWndActiveHook; aWindowEntry: TProcessEntry);
|
||
begin
|
||
|
||
end;
|
||
|
||
function TDlgKoAstMain.IsAbleAddWindow(hWindow: HWND): Boolean;
|
||
var
|
||
sProcName,
|
||
sClassName: String;
|
||
hTemp: HWND;
|
||
begin
|
||
Result := false;
|
||
|
||
sProcName := UpperCase(GetProcessNameByPid(GetProcessPIDFromWndHandle(hWindow)));
|
||
if (WndPages_.GetWndPage(hWindow) <> nil) or
|
||
(sProcName = sSelfProcName_) then exit;
|
||
|
||
if sProcName = 'EXPLORER.EXE' then
|
||
begin
|
||
sClassName := UpperCase(GetWndClassName(hWindow));
|
||
if sClassName <> 'CABINETWCLASS' then
|
||
exit;
|
||
|
||
hTemp := FindWindowEx(0, 0, 'Progman', 'Program Manager');
|
||
if hTemp = 0 then
|
||
exit;
|
||
|
||
// if GetProcessPIDFromWndHandle(hTemp) = GetProcessPIDFromWndHandle(hWindow) then
|
||
// exit;
|
||
end;
|
||
|
||
Result := true;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.ProcessDetectWindow(hWindow: HWND);
|
||
var
|
||
sTitle,
|
||
sProcName: String;
|
||
dwPid: DWORD;
|
||
WndInfo: TWndInfo;
|
||
begin
|
||
sTitle := GetWindowCaption(hWindow);
|
||
dwPid := GetProcessPIDFromWndHandle(hWindow);
|
||
sProcName := GetProcessNameByPid(dwPid);
|
||
if MessageBox(Handle, PChar(Format('"%s" (%s) <20><><EFBFBD><EFBFBD><EFBFBD>찡 <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.', [sTitle, sProcName])+#13+#10+
|
||
'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?'), PChar(Caption), MB_ICONINFORMATION or MB_YESNO) = IDNO then exit;
|
||
|
||
// if WndPages_.WndTabSheet[dwPid] <> nil then
|
||
// begin
|
||
// MessageBox(Handle, '<27>̹<EFBFBD> <20><><EFBFBD>ϵǾ<CFB5> <20>ִ<EFBFBD> <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20>Դϴ<D4B4>.', PChar(Caption), MB_ICONWARNING or MB_OK);
|
||
// exit;
|
||
// end;
|
||
|
||
ZeroMemory(@WndInfo, SizeOf(WndInfo));
|
||
WndInfo.ProcInfo := TTgProcessInfo.Create(dwPid);
|
||
ASSERT((WndInfo.ProcInfo.ModulePath <> '') and (WndInfo.ProcInfo.ModuleName <> ''));
|
||
WndInfo.WndKind := wkNormal;
|
||
WndInfo.ProcPath := WndInfo.ProcInfo.ModulePath;
|
||
WndInfo.ProcID := dwPid;
|
||
WndInfo.WndHandle := hWindow;
|
||
WndInfo.WndFrameClass := TFrmWindowPage;
|
||
|
||
CreateWindowTab(WndInfo);
|
||
gWndPage.AddWndPage(WndInfo);
|
||
end;
|
||
|
||
//procedure TDlgKoAstMain.OnDrawClipboard(Sender: TDrawClipboard);
|
||
//var
|
||
// i: Integer;
|
||
//begin
|
||
////CF_TEXT
|
||
// Trace_.T('OnDrawClipboard() - FormatCount : %d', [Sender.FormatCount]);
|
||
// for i := 0 to Sender.FormatCount - 1 do
|
||
// Trace_.T('OnDrawClipboard() - Format(%d) : %d', [i, Sender.Formats[i]]);
|
||
//end;
|
||
|
||
procedure TDlgKoAstMain.VisibleMainform(bVal: Boolean);
|
||
var
|
||
OldFormStyle: TFormStyle;
|
||
begin
|
||
if bVal then
|
||
begin
|
||
WindowState := LastWindowState_;
|
||
Show;
|
||
OldFormStyle := FormStyle;
|
||
FormStyle := fsStayOnTop;
|
||
FormStyle := OldFormStyle;
|
||
SetForegroundWindow(Handle);
|
||
end else begin
|
||
LastWindowState_ := WindowState;
|
||
WindowState := wsMinimized;
|
||
Hide;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.SaveFormState;
|
||
begin
|
||
if gCfg.FormSizeSave then
|
||
begin
|
||
gCfg.FormWidth := Width;
|
||
gCfg.FormHeight := Height;
|
||
end;
|
||
|
||
if gCfg.FormPosSave then
|
||
begin
|
||
gCfg.FormLeft := Left;
|
||
gCfg.FormTop := Top;
|
||
end;
|
||
|
||
if gCfg.FormSizeSave or gCfg.FormPosSave or gCfg.NormalConfig.AlphaBlend then
|
||
gCfg.SaveConfig;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.tbAlphaBlendChange(Sender: TObject);
|
||
begin
|
||
AlphaBlendValue := tbAlphaBlend.Position;
|
||
gCfg.NormalConfig.AlphaBlendVal := AlphaBlendValue;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.tInitTimer(Sender: TObject);
|
||
var
|
||
enum: TWndInfoEnumerator;
|
||
sProcess: String;
|
||
begin
|
||
tInit.Enabled := false;
|
||
|
||
if WindowState = wsMinimized then
|
||
Hide;
|
||
|
||
sProcess := '';
|
||
Guard(enum, gWndPage.GetWndInfoEnumerator);
|
||
while enum.MoveNext do
|
||
sProcess := sProcess + ExtractFileName(enum.Current.ProcPath) + #13#10;
|
||
|
||
if sProcess <> '' then
|
||
if MessageBox(Handle, PChar(Format('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>.'+
|
||
#13+#10+#13+#10+'%s'+#13+#10+
|
||
'<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?', [sProcess])), PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDYES then
|
||
begin
|
||
Guard(enum, gWndPage.GetWndInfoEnumerator);
|
||
while enum.MoveNext do
|
||
TerminateProcessByPid(enum.Current.ProcID);
|
||
end;
|
||
|
||
WndPages_.ClearPages;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.miConfigClick(Sender: TObject);
|
||
var
|
||
dlg: TDlgConfig;
|
||
begin
|
||
// SwitchNormalFormstyle(Self);
|
||
Guard(dlg, TDlgConfig.Create(self));
|
||
dlg.ShowModal;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.miExitClick(Sender: TObject);
|
||
begin
|
||
if MessageBox(Handle, '<27><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?', PChar(Caption),
|
||
MB_ICONQUESTION or MB_YESNO) = IDNO then exit;
|
||
|
||
Close;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.miKeylogViewClick(Sender: TObject);
|
||
begin
|
||
if gKeyInput = nil then
|
||
TDlgKeyInput.Create(Self).Show
|
||
else
|
||
gKeyInput.Close;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.miLockScreenClick(Sender: TObject);
|
||
begin
|
||
TDlgLockScreen.Create(Self).DoLockScreen;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.miOpenClick(Sender: TObject);
|
||
begin
|
||
VisibleMainform(true);
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.miStayOnTopClick(Sender: TObject);
|
||
begin
|
||
if FormStyle = fsStayOnTop then
|
||
FormStyle := fsNormal
|
||
else
|
||
FormStyle := fsStayOnTop;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.miViewClick(Sender: TObject);
|
||
begin
|
||
miStayOnTop.Checked := FormStyle = fsStayOnTop;
|
||
miKeylogView.Checked := gKeyInput <> nil;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.miWndPageCloseClick(Sender: TObject);
|
||
var
|
||
WndTab: TWndTabSheet;
|
||
begin
|
||
if pcMain.PageCount > 0 then
|
||
begin
|
||
if MessageBox(Handle, '<27><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ðڽ<C3B0><DABD>ϱ<EFBFBD>?', PChar(miWndPageClose.Caption),
|
||
MB_ICONQUESTION or MB_YESNO) = IDNO then exit;
|
||
|
||
WndTab := TWndTabSheet(pcMain.ActivePage);
|
||
|
||
if IsWindow(WndTab.WndInfo.WndHandle) and
|
||
// (GetProcessPathFromPID(WndInfo_.ProcID) <> '') and
|
||
(MessageBox(Handle, '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>쵵 <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?',
|
||
APP_NAME, MB_ICONQUESTION or MB_YESNO) = IDYES) then
|
||
begin
|
||
PostMessage(WndTab.WndInfo.WndHandle, WM_CLOSE, 0, 0);
|
||
// WndInfo_.ProcID := 0;
|
||
end;
|
||
|
||
WndTab.Free;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.process_WM_HOTKEY(var msg: TMessage);
|
||
begin
|
||
case msg.WParam of
|
||
HOKEY_MAINFORM_SHOWHIDE : VisibleMainform(not Visible);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.process_WM_SYSCOMMAND(var Msg: TWMSysCommand);
|
||
var
|
||
dlg: TDlgCloseQuestion;
|
||
begin
|
||
if Msg.CmdType = SC_CLOSE then
|
||
begin
|
||
SaveFormState;
|
||
case gCfg.CloseBtnEvent of
|
||
cbeHide : VisibleMainform(false);
|
||
cbeExit : miExit.Click;
|
||
cbeQuestion :
|
||
begin
|
||
// SwitchNormalFormstyle(Self);
|
||
Guard(dlg, TDlgCloseQuestion.Create(self));
|
||
case dlg.ShowModal of
|
||
mrOk : VisibleMainform(false);
|
||
mrClose : Close;//miExit.Click;
|
||
end;
|
||
end;
|
||
end;
|
||
exit;
|
||
end;
|
||
|
||
Inherited;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.pcMainMouseDown(Sender: TObject; Button: TMouseButton;
|
||
Shift: TShiftState; X, Y: Integer);
|
||
begin
|
||
if Button = mbRight then
|
||
begin
|
||
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
|
||
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.OnClickWndPage(Sender: TObject);
|
||
var
|
||
MenuItem: TMenuItem;
|
||
begin
|
||
if Sender is TMenuItem then
|
||
begin
|
||
MenuItem := TMenuItem(Sender);
|
||
pcMain.ActivePageIndex := MenuItem.Tag;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.popPagePopup(Sender: TObject);
|
||
var
|
||
i: Integer;
|
||
MenuItem: TMenuItem;
|
||
WndTab: TWndTabSheet;
|
||
begin
|
||
miWndPage.Clear;
|
||
if pcMain.PageCount > 0 then
|
||
for i := 0 to pcMain.PageCount - 1 do
|
||
begin
|
||
WndTab := TWndTabSheet(pcMain.Pages[i]);
|
||
MenuItem := TMenuItem.Create(popPage);
|
||
MenuItem.Caption := ExtractFileName(WndTab.WndInfo.ProcPath);
|
||
MenuItem.OnClick := OnClickWndPage;
|
||
MenuItem.Tag := i;
|
||
miWndPage.Add(MenuItem);
|
||
|
||
if WndTab.TabIndex = pcMain.ActivePageIndex then
|
||
MenuItem.Checked := true;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.process_WM_CATCHKEY_NOTIFY(var msg: TMessage);
|
||
var
|
||
ShiftState: TShiftState;
|
||
sKey: String;
|
||
hWindow: HWND;
|
||
begin
|
||
ShiftState := KeyDataToShiftState(0);
|
||
if GetKeyState(VK_LMENU) < 0 then
|
||
Include(ShiftState, ssAlt);
|
||
|
||
if (ssShift in ShiftState) and
|
||
(ssCtrl in ShiftState) and
|
||
(ssAlt in ShiftState) then
|
||
begin
|
||
case msg.WParam of
|
||
38 : // <20><> ȭ<><C8AD>ǥ <20><>
|
||
begin
|
||
// SetUpSystemAudioVolume;
|
||
// _DlgSystemVol.SetVolume(GetSystemAudioVolume);
|
||
end;
|
||
40 : // <20>Ʒ<EFBFBD> ȭ<><C8AD>ǥ <20><>
|
||
begin
|
||
// SetDownSystemAudioVolume;
|
||
// _DlgSystemVol.SetVolume(GetSystemAudioVolume);
|
||
end;
|
||
|
||
45 : // <20>μ<EFBFBD>Ʈ(Insert)
|
||
begin
|
||
hWindow := GetForegroundWindow;
|
||
if IsAbleAddWindow(hWindow) then
|
||
begin
|
||
VisibleMainform(true);
|
||
ProcessDetectWindow(hWindow);
|
||
end;
|
||
end;
|
||
|
||
88 : // x
|
||
// 90 : // z, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ź<EFBFBD><C5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x<><78> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؽ<EFBFBD>Ʈ <20><>ȣȭ <20><><EFBFBD><EFBFBD>Ű<EFBFBD><C5B0> <20><><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
begin
|
||
var CB: TClipboard;
|
||
Guard(CB, TClipboard.Create);
|
||
CB.AsText := FormatDateTime('yyyy-mm-dd', Now) + ' : [BSOne] ';
|
||
// Sleep(500);
|
||
// PressKeys('v', true); // Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ְ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD> <20>Ѿ<D1BE><EEB0A1> <20>ν<EFBFBD><CEBD>ϳ<EFBFBD><CFB3><EFBFBD><EFBFBD><EFBFBD>
|
||
end;
|
||
|
||
90 : // z
|
||
begin
|
||
var CB: TClipboard;
|
||
Guard(CB, TClipboard.Create);
|
||
var sText: String := CB.AsText;
|
||
if (sText.Length < 2) or (sText[2] <> ':') then
|
||
exit;
|
||
|
||
var sHead: String := Format('/mnt/%s/', [LowerCase(sText[1])]);
|
||
sText := StringReplace(sText, Format('%s:\', [sText[1]]), sHead, [rfReplaceAll]);
|
||
sText := '"' + StringReplace(sText, '\', '/', [rfReplaceAll]) + '"';
|
||
|
||
CB.AsText := sText;
|
||
end;
|
||
end;
|
||
end;
|
||
// else
|
||
// if (ssShift in ShiftState) and
|
||
// (ssCtrl in ShiftState) then
|
||
// begin
|
||
// case msg.WParam of
|
||
//
|
||
// end;
|
||
// end;
|
||
|
||
// msg.LParam <20><> PID<49><44> DLL <20>ε<EFBFBD> <20>ѳ<EFBFBD><D1B3><EFBFBD> PID <20>̴<EFBFBD>.. 14_0423 23:52:13 sunk
|
||
if gKeyInput <> nil then
|
||
gKeyInput.ProcessKeyInput(msg.WParam, ShiftState);
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.process_WM_WNDHOOK_RELOAD(var msg: TMessage);
|
||
|
||
function CheckUnHook(dwPID: DWORD): Boolean;
|
||
var
|
||
dwTick: DWORD;
|
||
sOld, sCur: String;
|
||
begin
|
||
// TTgTrace.t('TDlgKoAstMain >> process_WM_WNDHOOK_RELOAD >> CheckUnHook()');
|
||
Result := true;
|
||
|
||
dwTick := GetTickCount;
|
||
while (GetTickCount - dwTick) < 1000 do
|
||
begin
|
||
sOld := GetProcessNameByPid(dwPID);
|
||
Sleep(100);
|
||
sCur := GetProcessNameByPid(dwPID);
|
||
if (sCur = '') or (sCur <> sOld) then
|
||
begin
|
||
Result := false;
|
||
exit;
|
||
end;
|
||
Application.ProcessMessages;
|
||
end;
|
||
end;
|
||
|
||
begin
|
||
if Assigned(WndHook_) then
|
||
begin
|
||
// TTgTrace.t('TDlgKoAstMain >> process_WM_WNDHOOK_RELOAD >> PID = %d', [msg.WParam]);
|
||
if CheckUnHook(msg.WParam) then
|
||
begin
|
||
TTgTrace.t('TDlgKoAstMain >> process_WM_WNDHOOK_RELOAD >> CheckUnHook() >> UnHook!!!, pid=%d', [msg.WParam]);
|
||
WndHook_.LoadHookDll;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.process_WM_WNDHOOK_NOTIFY(var msg: TMessage);
|
||
var
|
||
WndLogEntry: TWindowLogEntry;
|
||
ProcEntry: TProcessEntry;
|
||
WndTab: TWndTabSheet;
|
||
begin
|
||
if msg.WParamLo = WND_STATE_DETACH_HOOK then
|
||
begin
|
||
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI<55><49><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ư<><C6AF> <20><>Ȳ<EFBFBD>̴<EFBFBD>.
|
||
ProcEntry := WndHook_[msg.WParamHi];
|
||
if Assigned(ProcEntry) then
|
||
begin
|
||
WndLogEntry := ProcEntry.AddWindowLog(msg.LParam, wlDetach);
|
||
// if WndLogEntry.dtLog <> 0 then
|
||
// AddWndLog(WndLogEntry);
|
||
|
||
TTgTrace.T('(%s:%d) <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD><EFBFBD> (Begin = %s, End = %s)', [ProcEntry.ModuleName, ProcEntry.PID,
|
||
DateTimeToStr({ProcEntry.CreateDateTime}0), DateTimeToStr(now)]);
|
||
|
||
WndPages_.DeleteWndTabSheetFromPid(ProcEntry.PID);
|
||
end;
|
||
ProcEntry := WndHook_.DeleteWindowEntry(msg.WParamHi);
|
||
// if Assigned(ProcEntry) then
|
||
// AddWndEntry(ProcEntry, true);
|
||
end else begin
|
||
WndLogEntry := WndHook_.ProcessHookNotify(msg);
|
||
if WndLogEntry.dtLog <> 0 then
|
||
begin
|
||
// AddWndLog(WndLogEntry);
|
||
case msg.WParamLo of
|
||
WND_STATE_ACTIVATE : TTgTrace.T('(%s:%d) Ȱ<><C8B0>ȭ - %s', [WndLogEntry.OwnerWindow.ModuleName, WndLogEntry.OwnerWindow.PID, WndLogEntry.sTitle]);
|
||
WND_STATE_WINDOW_MIN : TTgTrace.T('(%s:%d) <20>ּ<EFBFBD>ȭ - %s', [WndLogEntry.OwnerWindow.ModuleName, WndLogEntry.OwnerWindow.PID, WndLogEntry.sTitle]);
|
||
WND_STATE_WINDOW_MAX : TTgTrace.T('(%s:%d) <20>ִ<EFBFBD>ȭ - %s', [WndLogEntry.OwnerWindow.ModuleName, WndLogEntry.OwnerWindow.PID, WndLogEntry.sTitle]);
|
||
WND_STATE_WINDOW_MOVESIZE : TTgTrace.T('(%s:%d) <20>̵<EFBFBD> / ũ<><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - %s', [WndLogEntry.OwnerWindow.ModuleName, WndLogEntry.OwnerWindow.PID, WndLogEntry.sTitle]);
|
||
WND_STATE_REDRAW_TITLE : TTgTrace.T('(%s:%d) ĸ<>Ǻ<EFBFBD><C7BA><EFBFBD> - %s', [WndLogEntry.OwnerWindow.ModuleName, WndLogEntry.OwnerWindow.PID, WndLogEntry.sTitle]);
|
||
WND_STATE_CREATE_MAIN : TTgTrace.T('(%s:%d) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - %s', [WndLogEntry.OwnerWindow.ModuleName, WndLogEntry.OwnerWindow.PID, WndLogEntry.sTitle]);
|
||
WND_STATE_DESTROY_MAIN : TTgTrace.T('(%s:%d) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - %s', [WndLogEntry.OwnerWindow.ModuleName, WndLogEntry.OwnerWindow.PID, WndLogEntry.sTitle]);
|
||
WND_STATE_WINDOW_NORMAL : TTgTrace.T('(%s:%d) <20>ּ<EFBFBD> / <20>ִ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD> - %s', [WndLogEntry.OwnerWindow.ModuleName, WndLogEntry.OwnerWindow.PID, WndLogEntry.sTitle]);
|
||
WND_STATE_ACTIVATE2 : TTgTrace.T('(%s:%d) Ȱ<><C8B0>ȭ2 - %s', [WndLogEntry.OwnerWindow.ModuleName, WndLogEntry.OwnerWindow.PID, WndLogEntry.sTitle]);
|
||
end;
|
||
end else
|
||
if msg.WParamLo = WND_STATE_ATTACH_HOOK then
|
||
begin
|
||
// AddWndEntry(WndHook_[msg.WParamHi]);
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TDlgKoAstMain.process_WM_MESSAGEHOOK_NOTIFY(var msg: TMessage);
|
||
var
|
||
WndTabSheet: TWndTabSheet;
|
||
begin
|
||
case msg.WParam of
|
||
MSG_WM_DESTROY : WndPages_.DeleteWndTabSheetFromHWND(msg.LParam);
|
||
MSG_WM_SETTEXT :
|
||
begin
|
||
WndTabSheet := WndPages_.GetWndTabSheet(msg.LParam);
|
||
if WndTabSheet <> nil then
|
||
begin
|
||
WndTabSheet.Caption := GetWindowCaption(msg.LParam);
|
||
end;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
end.
|