프로그래밍 초보 탈출

Libraries/Delphi Library

[OLE] OLE Command Library

째즈토끼 2022. 6. 23. 22:23
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.

'Libraries > Delphi Library' 카테고리의 다른 글

[System] System Power Control Library  (0) 2022.06.23
[System] OS Version Library  (0) 2022.06.23
[IPC] Mutex Library  (0) 2022.06.22
[IPC] Memory Map  (0) 2022.06.22
[System] Item ID List Library  (0) 2022.06.22