网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
Delphi实现Windows外壳扩展编程
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

for i:=0 to FileNumber-1 do begin

DragQueryFile(StgMedium.hGlobal

i

FFileName

SizeOf(FFileName));

FileList.Add(FFileName);

Result := NOERROR;

end;

ReleaseStgMedium(StgMedium);

end;

function TContextMenu.QueryContextMenu(Menu: HMENU; indexMenu

idCmdFirst

idCmdLast

uFlags: UINT): HResult;

begin

Result := 0;

if ((uFlags and $0000000F) = CMF_NORMAL) or

((uFlags and CMF_EXPLORE) <> 0) then begin

// 往Context Menu中加入一个菜单项

InsertMenu(Menu

indexMenu

MF_STRING or MF_BYPOSITION

idCmdFirst

PChar(''执行文件操作''));

// 返回增加菜单项的个数

Result := 1;

end;

end;

function TContextMenu.InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult;

var

// sFile:TFileStream;

charSavePath:array[0..1023]of char;

sSaveFile:String;

i:Integer;

F: TextFile;

FirstLine: string;

begin

// 首先确定该过程是被系统而不是被一个程序所调用

if (HiWord(Integer(lpici.lpVerb)) <> 0) then

begin

Result := E_FAIL;

Exit;

end;

// 确定传递的参数的有效性

if (LoWord(lpici.lpVerb) <> 0) then begin

Result := E_INVALIDARG;

Exit;

end;

file://建立一个临时文件保存用户选中的文件名

GetTempPath(1024

charSavePath);

sSaveFile:=charSavePath+''chen0001.tmp'';

AssignFile(F

sSaveFile); { next file in Files property }

ReWrite(F);

file://将文件名保存到临时文件中

for i:= 0 to FileList.Count -1 do begin

FirstLine:=FileList.Strings[i];

Writeln(F

FirstLine); { Read the first line out of the file }

end;

CloseFile(F);

file://调用文件操作程序对用户选中的文件进行操作

ShellExecute(0

nil

''c:\FileOP.exe''

PChar(sSaveFile)

charSavePath

SW_NORMAL);

Result := NOERROR;

end;

function TContextMenu.GetCommandString(idCmd

uType: UINT; pwReserved: PUINT;

pszName: LPSTR; cchMax: UINT): HRESULT;

begin

if (idCmd = 0) then begin

if (uType = GCS_HELPTEXT) then

{返回该菜单项的帮助信息,此帮助信息将在用户把鼠标移动到该菜单项时出现在状态条上。}

StrCopy(pszName

PChar(''点击该菜单项将执行文件操作''));

Result := NOERROR;

end

else

Result := E_INVALIDARG;

end;

type

TContextMenuFactory = class(TComObjectFactory)

public

procedure UpdateRegistry(Register: Boolean); override;

end;

procedure TContextMenuFactory.UpdateRegistry(Register: Boolean);

var

ClassID: string;

begin

if Register then begin

inherited UpdateRegistry(Register);

ClassID := GUIDToString(Class_ContextMenu);

CreateRegKey(''*\shellex''

''''

'''');

CreateRegKey(''*\shellex\ContextMenuHandlers''

''''

'''');

CreateRegKey(''*\shellex\ContextMenuHandlers\OpenWithWordPad''

''''

ClassID);

file://如果操作系统为Windows NT的话

if (Win32Platform = VER_PLATFORM_WIN32_NT) then

with TRegistry.Create do

try

RootKey := HKEY_LOCAL_MACHINE;

OpenKey(''SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions''

True);

OpenKey(''Approved''

True);

WriteString(ClassID

''Context Menu Shell Extension'');

finally

Free;

end;

end

else begin

DeleteRegKey(''*\shellex\ContextMenuHandlers\FileOpreation'');

DeleteRegKey(''*\shellex\ContextMenuHandlers'');

// DeleteRegKey(''*\shellex'');

inherited UpdateRegistry(Register);

end;

end;

initialization

TContextMenuFactory.Create(ComServer

TContextMenu

Class_ContextMenu

''''

''Context Menu Shell Extension''

ciMultiInstance

tmApartment);

end.

将该单位文件保存为unit2.pas,文件同contextmenu.dpr位

  • 下一篇资讯: Delphi编程实现文件关联
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号