如何取得命令行参数,以及如何关联某个扩展名?(100分)

  • 主题发起人 主题发起人 LuJuhe
  • 开始时间 开始时间
L

LuJuhe

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要一种自定义数据文件能够在被双击后,自动打开我的程序进行处理,如何关联这个扩展
名,以及如何取得传过来的文件名呢?
我在TApplication中找不到有关属性。。。
 
ParamStr是一个函数,看一下Delphi在线帮助
ParamCount是参数个数
 
ParamCount, ParamStr
 
unit regftyp;

(*
the procedure registerfiletype associates the given file-extension with the given application
params :
ft : the file-ext to create an association
key : the registry-key-name (not necessary)
desc : a description for the file-type
icon : the default-icon (not necessary)
prg : the application

e.g.
registerfiletype('.txt','textfile','Text-File','','notepad.exe')


(c) 1997 by Markus Stephany
mirbir.st@t-online.de
mirbir.st@saargate.de
Merkes' Pages : http://home.t-online.de/home/mirbir.st/


no guaranties, no restrictions
*)

interface
uses windows,registry,dialogs;

procedure registerfiletype(ft,key,desc,icon,prg:string);

implementation

procedure registerfiletype(ft,key,desc,icon,prg:string);
var myreg : treginifile;
ct : integer;
begin

// make a correct file-extension
ct := pos('.',ft);
while ct > 0 do begin
delete(ft,ct,1);
ct := pos('.',ft);
end;
if (ft = '') or (prg = '') then exit
//not a valid file-ext or ass. app
ft := '.'+ft;
try
myreg := treginifile.create('');
myreg.rootkey := hkey_classes_root
// where all file-types are described
if key = '' then key := copy(ft,2,maxint)+'_auto_file'
// if no key-name is given,
// create one
myreg.writestring(ft,'',key)
// set a pointer to the description-key
myreg.writestring(key,'',desc)
// write the description
if icon <> '' then
myreg.writestring(key+'/DefaultIcon','',icon)
// write the def-icon if given
myreg.writestring(key+'/shell/open/command','',prg+' %1')
//association
finally
myreg.free;
end;
showmessage('File-Type '+ft+' associated with'#13#10+
prg+#13#10);



end;
end.
 
举个例子:
procedure TMyBook.FormShow(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
if (ParamCount > 0) and FileExists(ParamStr(1)) then
begin
caption:=caption+' '+paramstr(1);
Openf(ParamStr(1));
end;
end;
 
ParamStr(0)表示应用程序名,ParamStr(1)为第一参数,ParamStr(2)为第
二参数,以此类推。ParamCount参数个数
 
OK,谢谢各位。
 
取得参数用paramstr与paramcount,与扩展名关联参考如下方法:

lphKey: HKEY;
sKeyName: string;
sKeyValue: string;

sKeyName := 'Myfile';
sKeyValue := 'My文档';
RegCreateKey(HKEY_CLASSES_ROOT, pchar(sKeyName), lphKey);
RegSetValue(lphKey, '', REG_SZ, pchar(sKeyValue), 0);

sKeyName := '.abc';
sKeyValue := 'Myfile';
RegCreateKey(HKEY_CLASSES_ROOT, pchar(sKeyName), lphKey);
RegSetValue(lphKey, '', REG_SZ, pchar(sKeyValue), 0);

sKeyName := 'Myfile';
sKeyValue := paramstr(0)+' %1';
RegCreateKey(HKEY_CLASSES_ROOT, pchar(sKeyName), lphKey);
RegSetValue(lphKey, 'shell/open/command', REG_SZ,pchar(sKeyValue), MAX_PATH);

sKeyName := 'Myfile';//以下为图标
sKeyValue := paramstr(0)+',0';
RegCreateKey(HKEY_CLASSES_ROOT, pchar(sKeyName), lphKey);
RegSetValue(lphKey, 'DefaultIcon', REG_SZ,pchar(sKeyValue),0);

sKeyName := '.abc';
sKeyValue := paramstr(0)+',0';
RegCreateKey(HKEY_CLASSES_ROOT, pchar(sKeyName), lphKey);
RegSetValue(lphKey, 'DefaultIcon', REG_SZ, pchar(sKeyValue),0);
 
dhycq的答案也不错,但是我发分太快了点,呵呵。。。 Sorry。
 
后退
顶部