100分,求教如何在IE收藏夹中创建新的链接(100分)

  • 主题发起人 主题发起人 alac
  • 开始时间 开始时间
A

alac

Unregistered / Unconfirmed
GUEST, unregistred user!
我编一个程序,要求将自己的链接加入到IE的收藏中,我是这样想的
1. 做好一个*.url文件
2. 将这个文件Copy到Favorites目录下
3. 用SHGetFolderPath()函数获取Favorites目录的路径(防止它不放在Windows目录下)
我的问题在于SHGetFolderPath()函数Delphi没有封装,在Windows下找到SHFolder.dll后,
静态链接方式提示找不到SHGetFolderPath()函数,我的操作系统为Win98。请问:
A. 实现这个功能有没胡更简单的方法
B. if (条件A) = flase then 请指教有没有获得Favorites目录方法
 
惨了,没人捧场!!!!!55555555555555
 
问题解决了,绕了一圈又回到了注册表
var
FavoritesDir:string;
reg : TRegInIFile;
begin
reg := TRegInIFile.Create('Software');
FavoritesDir:=reg.ReadString('Microsoft/Windows/CurrentVersion/Explorer/Shell Folders',
'Favorites','');
reg.Free;
end;
另外,可把'Favorites'换为‘StartUp','startMenu','Desktop','History'............
 
好象没有更好的办法了
TWebBrowser不知有没有相应的方法?
 
哪用如此麻烦,我直接将URL文件COPY到Favorites目录下即可用了,你没试过吗?
 
你的思路挺好嘛。
 
引用shlobj,activex单元
Function Tform1.GETSPecial:string;
var s:array [0..100] of char;
begin
if shgetspecialfolderpath(0,s,CSIDL_COMMON_FAVORITES,false)=true then
result:=strpas(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
sl:IShellLINK;
PF:IPersistFile;
lnkName:widestring;
filepath:array[0..100] of char;
appname:string;
begin
if opendialog1.Execute then
begin
appname:=opendialog1.FileName;
//getspecialfolderpathw(0,s,CSIDL_ALTSTARTUP,true)
Olecheck(cocreateinstance(CLSID_Shelllink,nil,clsctx_inproc_server,ISHellLink,SL));
Pf:=sl as IPersistFile;
OLeCheck(sl.SetPath(pchar(appname)));
lnkname:=GETSPecial+'/'+changefileExt(Extractfilename(appname),'.lnk');
pf.Save(pwidechar(lnkname),true);
end;
end;
试试吧
 
IwebBrowser2接口可以控制IE实例的行为:
var idisp : IDispatch;
iwb2 : IWebBrowser2;
shellWindows : IShellWindows;
i : integer;
hwnd : THandle;
drawCanvas : TCanvas;
yes : wordbool;
begin
shellWindows := CoShellWindows.Create();
for i := 0 to shellWindows.Count - 1 do begin
idisp := shellWindows.Item( i );
idisp.QueryInterface( IWebBrowser2 , iwb2 );
if ( iwb2 <> nil ) then begin
iwb2.Set_Left( iwb2.Get_Left() + 2 );
{ 同样,调用iwb2.Set_XXX 应该可以操作收藏夹,具体涵数search一下
MSDN就知道了 }
try
iwb2.Set_RegisterAsBrowser(true);
except
On E : Exception do
ShowMessage('No page to go or forward');
end;
end;
end;
end;
 
To kevincsg:你的方法我试过了,确实非常好。
To wison:你的想法也很好,但我只想实现kevincsg的做法,不过还是会给你分的。
 
多人接受答案了。
 
后退
顶部