unit LibOLECommand;
interface
uses
Windows, ActiveX, SysUtils, Variants;
type
TOLECommandID = (
OLECMDID_NONE = 0 ,
OLECMDID_OPEN = 1 ,
OLECMDID_NEW = 2 ,
OLECMDID_SAVE = 3 ,
OLECMDID_SAVEAS = 4 ,
OLECMDID_SAVECOPYAS = 5 ,
OLECMDID_PRINT = 6 ,
OLECMDID_PRINTPREVIEW = 7 ,
OLECMDID_PAGESETUP = 8 ,
OLECMDID_SPELL = 9 ,
OLECMDID_PROPERTIES = 10,
OLECMDID_CUT = 11,
OLECMDID_COPY = 12,
OLECMDID_PASTE = 13,
OLECMDID_PASTESPECIAL = 14,
OLECMDID_UNDO = 15,
OLECMDID_REDO = 16,
OLECMDID_SELECTALL = 17,
OLECMDID_CLEARSELECTION = 18,
OLECMDID_ZOOM = 19,
OLECMDID_GETZOOMRANGE = 20,
OLECMDID_UPDATECOMMANDS = 21,
OLECMDID_REFRESH = 22,
OLECMDID_STOP = 23,
OLECMDID_HIDETOOLBARS = 24,
OLECMDID_SETPROGRESSMAX = 25,
OLECMDID_SETPROGRESSPOS = 26,
OLECMDID_SETPROGRESSTEXT = 27,
OLECMDID_SETTITLE = 28,
OLECMDID_SETDOWNLOADSTATE = 29,
OLECMDID_STOPDOWNLOAD = 30,
OLECMDID_ONTOOLBARACTIVATED = 31,
OLECMDID_FIND = 32,
OLECMDID_DELETE = 33,
OLECMDID_HTTPEQUIV = 34,
OLECMDID_HTTPEQUIV_DONE = 35,
OLECMDID_ENABLE_INTERACTION = 36,
OLECMDID_ONUNLOAD = 37,
OLECMDID_PROPERTYBAG2 = 38,
OLECMDID_PREREFRESH = 39,
OLECMDID_SHOWSCRIPTERROR = 40,
OLECMDID_SHOWMESSAGE = 41,
OLECMDID_SHOWFIND = 42,
OLECMDID_SHOWPAGESETUP = 43,
OLECMDID_SHOWPRINT = 44,
OLECMDID_CLOSE = 45,
OLECMDID_ALLOWUILESSSAVEAS = 46,
OLECMDID_DONTDOWNLOADCSS = 47,
OLECMDID_UPDATEPAGESTATUS = 48,
OLECMDID_PRINT2 = 49,
OLECMDID_PRINTPREVIEW2 = 50,
OLECMDID_SETPRINTTEMPLATE = 51,
OLECMDID_GETPRINTTEMPLATE = 52,
OLECMDID_PAGEACTIONBLOCKED = 55,
OLECMDID_PAGEACTIONUIQUERY = 56,
OLECMDID_FOCUSVIEWCONTROLS = 57,
OLECMDID_FOCUSVIEWCONTROLSQUERY = 58,
OLECMDID_SHOWPAGEACTIONMENU = 59,
OLECMDID_ADDTRAVELENTRY = 60,
OLECMDID_UPDATETRAVELENTRY = 61,
OLECMDID_UPDATEBACKFORWARDSTATE = 62,
OLECMDID_OPTICAL_ZOOM = 63,
OLECMDID_OPTICAL_GETZOOMRANGE = 64,
OLECMDID_WINDOWSTATECHANGED = 65
);
TOLECommandExecOption = (
OLECMDEXECOPT_DODEFAULT = 0,
OLECMDEXECOPT_PROMPTUSER = 1,
OLECMDEXECOPT_DONTPROMPTUSER = 2,
OLECMDEXECOPT_SHOWHELP = 3
);
type
TOLECmdStatus = packed record
Supported : Boolean;
Enabled : Boolean;
Latched : Boolean;
Ninched : Boolean;
end;
procedure OLECMD_SetCommandGroup(CGID: TGUID);
function OLECMD_QueryStatus(OBJ: IOleCommandTarget; CMD: TOLECommandID; var STATUS: DWORD; var STATUS_TEXT: String) : Boolean; overload;
function OLECMD_QueryStatus(OBJ: IOleCommandTarget; CMD: TOLECommandID; var STATUS: DWORD) : Boolean; overload;
function OLECMD_QueryStatus(OBJ: IOleCommandTarget; CMD: TOLECommandID; var STATUS: TOLECmdStatus) : Boolean; overload;
function OLECMD_QueryCaptionText(OBJ: IOleCommandTarget; CMD: TOLECommandID; var CAPTION: String) : Boolean;
function OLECMD_Execute(OBJ: IOleCommandTarget; CMD: TOLECommandID; const Option: TOLECommandExecOption; const Argument : OleVariant; var OutBuffer : OleVariant) : Boolean; overload;
function OLECMD_Execute(OBJ: IOleCommandTarget; CMD: TOLECommandID; const Option: TOLECommandExecOption; const Argument : OleVariant) : Boolean; overload;
function OLECMD_Execute(OBJ: IOleCommandTarget; CMD: TOLECommandID; const Option: TOLECommandExecOption = OLECMDEXECOPT_DODEFAULT) : Boolean; overload;
uses
ShlObj2;
//const
// ShlObj.pas
// CGID_Explorer : TGUID = '{000214D0-0000-0000-C000-000000000046}';
// CGID_ShellDocView : TGUID = '{000214D1-0000-0000-C000-000000000046}';
// ShlObj2.pas
{
CGID_ShellServiceObject : TGUID = (D1:$000214D2; D2:$; D3:$; D4:($C0,0,0,0,0,0,0,$46));
CGID_ExplorerBarDoc : TGUID = (D1:$000214D3; D2:$; D3:$; D4:($C0,0,0,0,0,0,0,$46));
CGID_DefView : TGUID = (D1:$4af07f10; D2:$d231; D3:$11d0; D4:($b9, $42, $00, $a0, $c9, $03, $12, $e1));
CGID_ShortCut : TGUID = (D1:$93A68750; D2:$951A; D3:$11D1; D4:($94, $6F, $0, $0, $0, $0, $0, $0));
CGID_MENUDESKBAR : TGUID = (D1:$5c9f0a12; D2:$959e; D3:$11d0; D4:($a3, $a4, $00, $a0, $c9, $08, $26, $36));
}
// ???
// CGID_DocHostCmdPriv : TGUID = '{000214D4-0000-0000-C000-000000000046}';
// CGID_FuckIE4 : TGUID = '{ed016940-bd5b-11cf-ba4e-00c04fd70816}';
// CGID_MSHTML : TGUID = '{DE4BA900-59CA-11CF-9592-444553540000}';
var
__CGID : PGUID = nil;
__CGID_USER : TGUID;
procedure OLECMD_SetCommandGroup(CGID: TGUID);
begin
__CGID_USER := CGID;
__CGID := @__CGID_USER;
end;
{$DEFINE __TEST__}
{$IFDEF __TEST__}
function SUCCEEDED(S : HRESULT) : Boolean;
begin
RESULT := S = S_OK;
end;
{
type OLECMDERR = (
OLECMDERR_E_FIRST = 0x80040100,
OLECMDERR_E_NOTSUPPORTED = 0x80040100, // -2147221248
OLECMDERR_E_DISABLED = 0x80040101, // -2147221247
OLECMDERR_E_NOHELP = 0x80040102, // -2147221246
OLECMDERR_E_CANCELED = 0x80040103, // -2147221245
OLECMDERR_E_UNKNOWNGROUP = 0x80040104, // -2147221244
);
}
{$ENDIF}
function __OLECMD_QueryStatus(OBJ: IOleCommandTarget; CMD: TOLECommandID; var STATUS: DWORD; const TextFlag: DWORD; var STATUS_TEXT: String) : Boolean;
var
OCS : OLECMD;
OCT : POLECMDTEXT;
begin
OCS.cmdID := DWORD(CMD);
OCS.cmdf := 0;
if TextFlag <> OLECMDTEXTF_NONE then begin
OCT := AllocMem(SizeOf(OLECMDTEXT) + (MAX_PATH * SizeOf(WideChar))); // Zero Filled Memory
OCT^.cmdtextf := TextFlag;
OCT^.cwBuf := MAX_PATH-1;
end
else begin
OCT := nil;
end;
try begin
RESULT := Assigned(OBJ) and SUCCEEDED(OBJ.QueryStatus(__CGID, 1, @OCS, OCT));
if RESULT then begin
STATUS := OCS.cmdf;
if Assigned(OCT) then begin
OCT^.rgwz[OCT^.cwActual] := #0;
STATUS_TEXT := WideString(PWideChar(@OCT^.rgwz[0]));
end;
end;
end;
except begin
RESULT := FALSE;
end;
end;
if Assigned(OCT) then FreeMem(OCT);
end;
function OLECMD_QueryStatus(OBJ: IOleCommandTarget; CMD: TOLECommandID; var STATUS: DWORD; var STATUS_TEXT: String) : Boolean;
begin
RESULT := __OLECMD_QueryStatus(OBJ, CMD, STATUS, OLECMDTEXTF_STATUS, STATUS_TEXT);
end;
function OLECMD_QueryStatus(OBJ: IOleCommandTarget; CMD: TOLECommandID; var STATUS: DWORD) : Boolean; overload;
var
DUMMY : String;
begin
RESULT := __OLECMD_QueryStatus(OBJ, CMD, STATUS, OLECMDTEXTF_NONE, DUMMY);
end;
function OLECMD_QueryStatus(OBJ: IOleCommandTarget; CMD: TOLECommandID; var STATUS: TOLECmdStatus) : Boolean; overload;
var
DUMMY : String;
STAT : DWORD;
begin
RESULT := __OLECMD_QueryStatus(OBJ, CMD, STAT, OLECMDTEXTF_NONE, DUMMY);
if RESULT then begin
STATUS.Supported := (STAT and OLECMDF_SUPPORTED) <> 0;
STATUS.Enabled := (STAT and OLECMDF_ENABLED) <> 0;
STATUS.Latched := (STAT and OLECMDF_LATCHED) <> 0;
STATUS.Ninched := (STAT and OLECMDF_NINCHED) <> 0;
end;
end;
function OLECMD_QueryCaptionText(OBJ: IOleCommandTarget; CMD: TOLECommandID; var CAPTION: String) : Boolean;
var
DUMMY : DWORD;
begin
RESULT := __OLECMD_QueryStatus(OBJ, CMD, DUMMY, OLECMDTEXTF_NAME, CAPTION);
end;
function OLECMD_Execute(OBJ: IOleCommandTarget; CMD: TOLECommandID; const Option: TOLECommandExecOption; const Argument : OleVariant; var OutBuffer : OleVariant) : Boolean;
begin
try begin
RESULT := Assigned(OBJ) and SUCCEEDED(OBJ.Exec(__CGID, DWORD(CMD), DWORD(Option), Argument, OutBuffer));
end;
except begin
RESULT := FALSE;
end;
end;
end;
function OLECMD_Execute(OBJ: IOleCommandTarget; CMD: TOLECommandID; const Option: TOLECommandExecOption; const Argument : OleVariant) : Boolean;
var
DUMMY : OleVariant;
begin
RESULT := OLECMD_Execute(OBJ, CMD, Option, Argument, DUMMY);
end;
function OLECMD_Execute(OBJ: IOleCommandTarget; CMD: TOLECommandID; const Option: TOLECommandExecOption = OLECMDEXECOPT_DODEFAULT) : Boolean;
var
DUMMY : OleVariant;
begin
RESULT := OLECMD_Execute(OBJ, CMD, Option, NULL, DUMMY);
end;
end.