请问如何知道系统是否安装浏览器?(100分)

  • 主题发起人 主题发起人 壹平
  • 开始时间 开始时间

壹平

Unregistered / Unconfirmed
GUEST, unregistred user!
我想知道系统中是否有浏览器,如果没有,就可以运行我自己的浏览器,我用了
ShellExecute(Handle, nil,pchar('html/index.html'),'','', 0);
 
这个方法基本上没有错, 您可以判断返回值已确定是不能执行.html的文件, 然后就可以运行您自己的浏览器了, 当然您最好还是用注册文件类型的方法, 把您的浏览器注册成.html文件的缺省Viewer.
 
用FindExecutable然后判断返回植!
//win32 api
HINSTANCE FindExecutable(
LPCTSTR lpFile, // pointer to string for filename
LPCTSTR lpDirectory, // pointer to string for default directory
LPTSTR lpResult // pointer to buffer for string for executable file on return
);
If the function succeeds, the return value is greater than 32.
If the function fails, the return value is less than or equal to 32. The following table lists the possible error values:
0 The system is out of memory or resources.
31 There is no association for the specified file type.
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.
ERROR_BAD_FORMAT The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).

31正是你需要的!
 
没有关联的时候, ShellExecute也会给出这样的返回值的, :)
 
pegasus大侠为何多日不见?:)
 
实在不好意思,前一段时间一来工作很忙,二来总是连不上这里。
现在有了这个代理真是好极了,:)
祝各位新老朋友暑期愉快!
 
柳五公子:
非常感谢!但是能否帮我写一个例子?谢谢!
 
pegasus:
我该如何判断返回值呢??
 
procedure TForm1.Button1Click(Sender: TObject);
var
ret :array [0..255] of char;
i :integer;
begin
i :=FindExecutable('c:/windows/readme.htm',nil,ret);
if i<=32 then //偷懒了!!
label1.caption := 'There is no association for the specified file type.'
else
label1.caption := 'associated file: '+ret;
//pegasus
i:=ShellExecute(handle,'open','c:/pdos.def',nil,nil,sw_show);
if i<=32 then
label1.caption := 'There is no association for the specified file type.'
else
label1.caption := inttostr(i);
end;
 
使用ShellExecute
uses ShellAPI;
var a: Integer;
a := ShellExecute(Application.Handle,
'Open',
'C:/Test.html',
'',
'',
SW_SHOW)
if a = SE_ERR_NOASSOC then
ShowMessage('没有与之关联的应用程序');
ShellExecute的其他返回值,可以参看Delphi的Help。
 
柳五公子:
啊!别偷懒呀!我编译不通过了!写具体好吧!谢谢!
 
uses ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
var
ret :array [0..1023] of char;
i :integer;
s :string;
begin
i :=FindExecutable('c:/windows/readme.htm',nil,ret);
if i>32 then
s := 'associated file is: '+ret
else
begin
case i of
0:
s := 'The system is out of memory or resources.';
31:
s:= 'There is no association for the specified file type.';
ERROR_FILE_NOT_FOUND:
s := 'The specified file was not found.';
ERROR_PATH_NOT_FOUND:
s := 'The specified path was not found.';
ERROR_BAD_FORMAT:
s := 'The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).';
else
s := 'Error occurs';
end;
end;
label1.Caption := s;
end;


我有点受不了我自己!:-))
 
// Hehe, thanks for 柳五公子
To 壹平: Xixi, 你自己太懒了吧,对了,这100分也不能白给,:)
 
多人接受答案了。
 
后退
顶部