BSOne.SFC/Tocsg.Module/SunkAssister/EXE_SunkAssister/DAstMain.pas

877 lines
25 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 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.