如何才能通过"My:/1"的路径方式和"D:/MyDir/1"路径访问效果。 ( 积分: 300 )

  • 主题发起人 主题发起人 wjh_wy
  • 开始时间 开始时间
W

wjh_wy

Unregistered / Unconfirmed
GUEST, unregistred user!
如何才能通过"My:/1"的路径方式和"D:/MyDir/1"路径访问效果。很意思吧,有谁能实现呢,这个应该要对Windows系统内核很熟悉的。我看过有人已经实现了这种功能,就是不知道怎么实现的。如下图所示:
<img>http://www.cnblogs.com/images/cnblogs_com/cjsh/Snap2.gif</img>
 
如何才能通过"My:/1"的路径方式和"D:/MyDir/1"路径访问效果。很意思吧,有谁能实现呢,这个应该要对Windows系统内核很熟悉的。我看过有人已经实现了这种功能,就是不知道怎么实现的。如下图所示:
<img>http://www.cnblogs.com/images/cnblogs_com/cjsh/Snap2.gif</img>
 
什么意思,不是太明白的,你的my:/1是什么?
 
用bho很容易实现的牙,检测到地址为My:/1就自动替换成D:/MyDir/1
 
映射一个名为"My"的驱动器,指向"D:/MyDir/"
 
用WNetAddConnection2函數。
var
NetResource: TNetResource;
Res: DWord;
UserName, PassWord: string;
begin
NetResource.dwType := RESOURCETYPE_ANY;
NetResource.lpLocalName := PChar('My:');
NetResource.lpRemoteName := PChar('//Server/D:');
NetResource.lpProvider := nil;
Res := WNetAddConnection2(NetResource,PChar(PassWord),PChar
(UserName),CONNECT_UPDATE_PROFILE);
end;
 
to leadyli
我要的是本地的呀,不是远程的呀。
 
bho应该可以实现,刚刚找了一段代码,晚上慢慢调

大部分代码是网上的

procedure DoBeforeNavigate2(const pDisp: IDispatch; var URL: OleVariant; var Flags: OleVariant; var TargetFrameName: OleVariant; var PostData: OleVariant; var
Headers: OleVariant; var Cancel: WordBool);
var
URL_ : WideString;
begin
URL_ := UpperCase(URL);
if Pos('chenybin:/', URL_) = 1 then begin
StringReplace(URL_, 'chenybin:/', 'D:/Person File/', [rfIgnoreCase]);
URL := URL_;
Cancel := True;
(pDisp as IWebbrowser2).Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
end
else begin
Cancel := False;
(pDisp as IWebbrowser2).Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
end;
end;
 
在装某个软件时,它规定必须安装在磁盘的某个分区上,而恰恰此分区的磁盘空间不够了,怎么办?您一定会想到某些改变磁盘分区大小的软件。用第三方软件来解决是一个非常好的方法,而笔者提供的则是另一种方法,那就是“动态磁盘”。

什么是“动态磁盘”?“动态磁盘”又有什么作用呢?磁盘的使用方式可以分为两类:一类是“基本磁盘”。“基本磁盘”非常常见,我们平时使用的磁盘类型基本上都是“基本磁盘”。“基本磁盘”受26个英文字母的限制,也就是说磁盘的盘符只能是26个英文字母中的一个。因为A、B已经被软驱占用,实际上磁盘可用的盘符只有C~Z 24个。另外,在“基本磁盘”上只能建立四个主分区(注意是主分区,而不是扩展分区);另一种磁盘类型是“动态磁盘”。“动态磁盘”不受26个英文字母的限制,它是用“卷”来命名的。“动态磁盘”的最大优点是可以将磁盘容量扩展到非邻近的磁盘空间。正是这个特点可以帮助我们解决上面的那个问题。

一定会有读者问,怎样知道自己的磁盘属于哪种类型呢?方法很简单,点击“开始→程序→管理工具→计算机管理”(Windows 2000 Server系统),在计算机管理的选项中找到磁盘管理,点击左键,从右面的参数显示中就可以看到了。

那么,“基本磁盘”和“动态磁盘”又有什么关系呢?它们可否互相转换?如果你的磁盘是“基本磁盘”,完全可以升级到“动态磁盘”,但要注意的是你的磁盘里必须有最少1MB没有被分配的空间。升级方法非常简单:右击“磁盘管理”界面右侧的磁盘盘符,在菜单中选择升级到“动态磁盘”就可以了。在这个过程中会重新启动计算机,重启次数=磁盘分区数量-1(如磁盘分了四个区,那就需要重启3次)。升级过程会自动完成,在升级过程中,磁盘的数据不会丢失。

升级完成后,就可以利用它来解决上面的问题了。方法是:在磁盘管理中单击那个未被分配的空间,选择创建新的卷,然后按提示一步一步进行就可以了(注意:创建过程中所选择的替换文件夹必须为空,比如选择C卷下的ABC文件夹,ABC文件夹必须是空的)。回到C卷下,您会发现ABC文件夹变成了一个“动态磁盘”的图标,这样就大功告成了。磁盘空间不够的问题解决了,赶快安装程序吧!

注意:从“基本磁盘”升级到“动态磁盘”,磁盘数据是不会改变的,但是从“动态磁盘”返回到“基本磁盘”,磁盘中的数据会全部丢失。所以一定要慎用此功能。
 
两种方式
1、使用BHO,动态转向url,这个比较麻烦,网上有个很有名的例子,我在盒子发布了部分代码,里面有个IEHelper,在上面已经回答过了,还没有测试成功,大概思路对了,
2、这种方式估计是比较正统的做法,也是比较简单的做法
把下面的两个reg文件导入到注册表
1.reg
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/chenybin]
@="URL: chenybin Protocol"
"URL Protocol"=""

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/chenybin/DefaultIcon]
@="E://Program Files//IERedirect.exe"
"OldIcon"="E://Program Files//IERedirect.exe"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/chenybin/shell]
@="open"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/chenybin/shell/open]
@="open"

[HKEY_LOCAL_MACHINE/SOFTWARE/Classes/chenybin/shell/open/command]
@="/"E://Program Files//IERedirect.exe/" /"%1/""
"OldDefault"="/"E://Program Files//IERedirect.exe/" /"%1/""

2.reg
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT/chenybin]
@="URL: chenybin Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT/chenybin/DefaultIcon]
@="E://Program Files//IERedirect.exe"
"OldIcon"="E://Program Files//IERedirect.exe"

[HKEY_CLASSES_ROOT/chenybin/shell]
@="open"

[HKEY_CLASSES_ROOT/chenybin/shell/open]
@="open"

[HKEY_CLASSES_ROOT/chenybin/shell/open/command]
@="/"E://Program Files//IERedirect.exe/" /"%1/""
"OldDefault"="/"E://Program Files//IERedirect.exe/" /"%1/""

然后写个程序,这个程序很简单,就是把参数取过来,然后换了路径就可以了
然后在IE地址栏目里面输入chenybin://test.aaa 看看效果


--------------------------------------
楼下的如果和我的方法一样就不要枪分了,但愿楼主守信
 
后退
顶部