send to 功能如何实现?(200分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
在某文件或者文件夹上点右键,有"发送到..."
其实就是在My Document and Setting下面
添加了一个链接或者图标.(可以参见foxmail)

问题是foxmail的 Sendto 能够新建一个邮件
并且将文件添加到附件中去(这是foxmail程序
的一部分功能),我怎样才能实现sendto "自己
的程序",然后将文件移动到某个位置(移动到
某位置是自己程序的某部分功能)

 

是有一个这个目录的,你把你的程序的快捷方式放那里就成
 
send to foxmail以后是新建了一个邮件,
并且将某文件作为附件.

 
1、添加你的程序的快捷方式到sendto目录
2、你的程序接收文件名作为参数(就是Params[1])
3、如果你的程序允许启动多个界面,处理Params,Over.
4、如果你的程序不允许启动多个界面,通过某种方法,将
参数传给已经启动的程序,处理,Over.
 
同意DreamTiger的观点
 
这应该是系统Shell编程!
 
to 千中元:
我在OICQ上不是给你说了吗,主要是参数的问题
你判断一下参数,然后作出你的不出动作来。
 
%Delphi%/Source/Rtl/WinMapi.pas 中有以下函数:
1.MapiSendMail
2.MapiSendDocuments
就是 ms 的 Messaging Applications Programming Interface 。
MapiSendDocuments 的用法如下:
MapiSendDocuments(0 {HWND},';'{多文件时的分隔符}, 'c:/windows/welcome.ini' {FilePaths},
'发送这个文件'{说明或 FileNames}, 0{保留=0});
我的系统 w2000+D5 ,附件倒是加进去了,但程序变得没有响应,呵呵,不知道为什么。
 
paramStr(1) 返回第一参数,在程序中根据参数编写代码就是了
 
您好:下面代码解决您的问题:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry, ActiveX, ShlObj, ComObj, StdCtrls;

type

ShortcutType = (_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _PROGRAMS);

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
procedure CreateShortcut(SourceFileName: string; Location: ShortcutType; SubDirectory: string);

implementation

{$R *.dfm}

procedure CreateShortcut(SourceFileName: string; Location: ShortcutType; SubDirectory: string);

var
MyObject: IUnknown;
MySLink: IShellLink;
MyPFile: IPersistFile;
Directory, LinkName, TempStr: string;
WFileName: WideString;
MyReg, QuickLaunchReg: TRegIniFile;

begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;
MySLink.SetPath(PChar(SourceFileName));
MyReg := TRegIniFile.Create('Software/MicroSoft/Windows/CurrentVersion/Explorer');
try
LinkName := ChangeFileExt(SourceFileName, '.lnk');
LinkName := ExtractFileName(LinkName);
case Location of
_DESKTOP: Directory := MyReg.ReadString('Shell Folders', 'Desktop', '');
_STARTMENU: Directory := MyReg.ReadString('Shell Folders', 'Start Menu', '');
_SENDTO: Directory := MyReg.ReadString('Shell Folders', 'SendTo', '');
_PROGRAMS: Directory := MyReg.ReadString('Shell Folders', 'Programs', '');
_QUICKLAUNCH:
begin
QuickLaunchReg := TRegIniFile.Create('Software/MicroSoft/Windows/CurrentVersion/GrpConv');
try
Directory := QuickLaunchReg.ReadString('MapGroups', 'Quick Launch', '');
finally
QuickLaunchReg.Free;
end;
end;
end;
TempStr := Directory;
if Location = _PROGRAMS then Directory := Directory + '/' + SubDirectory;
if (Location = _PROGRAMS) and (TempStr <> Directory) then
if not DirectoryExists(Directory) then
if not ForceDirectories(Directory) then Directory := TempStr;
WFileName := Directory + '/' + LinkName;
MyPFile.Save(PWChar(WFileName), False);
finally
MyReg.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//CreateShortcut('C:/VipProgram/VipBrowserWeb_OCR/VipBrowser.exe',_STARTMENU,'');
//CreateShortcut('C:/VipProgram/VipBrowserWeb_OCR/VipBrowser.exe',_DESKTOP,'');
//CreateShortcut('C:/VipProgram/VipBrowserWeb_OCR/VipBrowser.exe',_SENDTO,'');
/////////您所需要的!!!!!!!!!!!!!!!!!!
//CreateShortcut('C:/VipProgram/VipBrowserWeb_OCR/VipBrowser.exe',_QUICKLAUNCH,'');
CreateShortcut('C:/VipProgram/VipBrowserWeb_OCR/VipBrowser.exe', _PROGRAMS, 'Folder/SubFolder');
end;

end.
 
在某处建立一个‘我的程序’文件夹,把它的快捷方式copy到
‘c:/Documents and Settings/’下面一个同你登陆的用户名
相同的目录/send to中(修改文件夹属性使隐藏文件可见就可见send to)。
 
多人接受答案了。
 
后退
顶部