这两天在做一个项目,主要是在Windows Form中嵌一个IE,访问一个网站,基于某些理由,不允许用户下载、上传及打印。
关于禁止下载,我查看了一个Inteernet Explorer的SDK,发现了FileDownload事件,根据SDK中的描述,该事件的作用是:“Fires to indicate that a file download is about to occur. If a file download dialog is to be displayed, this event is fired prior to the display of the dialog.”,正对我的需求。
可是无论我如何实验,那个“打开、保存”的对话框仍然持续出现,所以我感觉有问题,于是我到KB上查了一下,发现了这原来是Internet Explorer Control在通过.NET导入的时候出现的一个Bug。根据KB中的描述,这个Bug只发生在VS.NET 2002当中。不过我发现在VS.NET 2003当中仍然继续出现,所以我想,开发组的人员可能并没有弥补该Bug,十分遗憾。
对此Bug感兴趣的朋友可以参考KB中的文章:325204。非MVP请访问http://support.microsoft.com, MVP请访问http://mvp.support.microsoft.com。我想大部分人员知道如何通过KB索引号来查找KB文章了,我在这儿就不再叙述了。这篇KB还详细介绍了如何解决此问题,不过并不对我胃口,因为按照他介绍的Step By Step,我是得到FileDownload事件,但其它事件就丢失了。
不知道哪位朋友知道在使用VS.NET导入COM控件的时候,如何得到它产生的中间文件,即那个C#的源代码,我想在那个基础上修改,然后再编译。如果请知道,请在此加评论。
另外,关于如何屏蔽上传功能,我现在还没有很好的想法,我现在在BeforeNavigate2事件中,通过分析e.PostData是否含有“filename=”字段来禁止上传,但仍然会弹出那个对话框,使用户有权访问该机器上的文件,如何通过某种方案来使该对话框不出现?请大家帮我出出主意,即使非常变态的也可以,比如FindWindow,然后KillWindow,或者通过修改注册表中的某个健值而禁止打印。
打赏作者
写一个Work Thread,用下面的代码 可以关闭 input=file 打开的那个窗口
BOOL NotFindWindow=TRUE;
HWND wnd=NULL;
HWND ParentWnd=NULL;
char string[255];
while(NotFindWindow){
wnd=::FindWindow(NULL,"选择文件");
if(wnd!=0){
ParentWnd=::GetParent(wnd);
::GetWindowText(ParentWnd,string,255);
//判断Parent window是不是 IE,如果是
//就执行下面这段代码
::SendMessage(wnd,WM_CLOSE,NULL,NULL);
NotFindWindow=FALSE;
}
}
用VS.NET直接拖大概也是用TlbImp.exe生成的Wrapper dll,看不到原码的。只能自己写Wrapper class来包了。
可以这样啊,通过DHTML直接将选择文件的按钮设置为无效,这样根本就不会出现文件选择框了。
To everyone: 访问的Web内容我无权更改,就像你无权更改银行的Web页面一样。你只能屏蔽使用当前计算机的用户无法上传、下载及打印就可以了。
测试
the method suggested by technofantasy is a valid method, after the document download is complete, you just use the document object model to disable the <input type=file>
To saucer:好久不见你上网了,干啥去了?
这个我用过,在JoyQQ里面是这样用的。不过如何不按照ID来?因为我无法预估那些ID。
多谢,我再看看吧。现在还缺一个监控进程,今晚一通宵,明天交活了。
>>>因为我无法预估那些ID。
go through all <input> tags, if the type=file, disable them, for example:
mshtml.HTMLDocumentClass doc = (mshtml.HTMLDocumentClass)axWebBrowser1.Document;
mshtml.IHTMLElementCollection inputs = (mshtml.IHTMLElementCollection)doc.getElementsByTagName("INPUT");
foreach (mshtml.HTMLInputElementClass i in inputs)
{
//MessageBox.Show(i.type);
if(i.type.ToLower() == "file")
i.disabled = true;
}
To saucer:Thanks!!!
禁止IE的全部或者部分功能的话可以参考
Knowledge Base
Q179221
How to Limit User Access to Local Computer or Hard Disks with Internet Explorer 4.01
可以通过实现IDocHostShowUI修改或者禁用IE的菜单
通过实现IDocHostUIHandler2重载IE选项
为什么不用Win2k的组策略限制用户的权限呢?不然用netscape也是可以上传的……
广告时间:CSDN的VC版缺HTML/XML版斑竹……(原来的斑竹是偶,但是偶升官了……)
To Jiangsheng:它只有轨迹球,所以没有右键菜单及IE菜单。不能使用组策略:D
请问,那里有mshtml的使用的介绍?