先引用COM组建mshtml;

然后处理WebBrowser控件的Navigated事件,代码如下:

 

Code
posted @ 2008-08-18 15:40 海边的风 阅读(83) | 评论 (0)编辑

如果需要编程实现IE选项中清除SSL状态的功能,可用SslEmptyCache函数,SslEmptyCache函数定义在Schannel.dll中,采用动态链接即可。

 

代码如下:

using System;
using System.Runtime.InteropServices;

namespace Demo
{
    
public class Ssl
    {
        [DllImport(
"kernel32.dll")]
        
internal static extern IntPtr LoadLibrary(String dllname);

        [DllImport(
"kernel32.dll")]
        
internal static extern IntPtr GetProcAddress(IntPtr hModule, String procname);

        
internal delegate bool SslEmptyCacheHelper(IntPtr targetName, int flags);

        
/// <summary>
        
/// UNICODE版
        
/// </summary>
        
/// <returns></returns>
        public bool SslEmptyCacheW()
        {
            IntPtr schannel 
= LoadLibrary("Schannel.dll");
            IntPtr procaddr 
= GetProcAddress(schannel, "SslEmptyCacheW");
            SslEmptyCacheHelper helper 
= (SslEmptyCacheHelper)Marshal.GetDelegateForFunctionPointer(procaddr, typeof(SslEmptyCacheHelper));
            
return helper(IntPtr.Zero, 0);
        }

        
/// <summary>
        
/// ANSI版
        
/// </summary>
        
/// <returns></returns>
        public bool SslEmptyCacheA()
        {
            IntPtr schannel 
= LoadLibrary("Schannel.dll");
            IntPtr procaddr 
= GetProcAddress(schannel, "SslEmptyCacheA");
            SslEmptyCacheHelper helper 
= (SslEmptyCacheHelper)Marshal.GetDelegateForFunctionPointer(procaddr, typeof(SslEmptyCacheHelper));
            
return helper(IntPtr.Zero, 0);
        }
    }

}

 

参考资料:

1、SslEmptyCache Function

2、.NET 2.0 中 GetDelegateForFunctionPointer 函数实现原理浅析 [草稿]

posted @ 2008-08-16 13:00 海边的风 阅读(75) | 评论 (0)编辑

设置ListView的VirtualMode为true,然后通过处理RetrieveVirtualItem和CacheVirtualItems事件,即可提高打造出高性能的ListView。

 

相关连接:Using the CLR 2.0 Virtual List View

posted @ 2008-08-07 13:15 海边的风 阅读(49) | 评论 (0)编辑

在WebBrowser控件中按下一个键的时候,PreviewKeyDown事件本来应该是只触发一次,但实际情况是引发了两次PreviewKeyDown事件,

ms的网站上有人报告了这个bug,详见:http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=220587

 

目前只能用代码来解决,在类中定义一个bool型的变量来记录是第一次引发还是第二次引发。代码如下:

 

bool _isFirstKeyDown = true;
private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    
if (_isFirstKeyDown)
    
{
       DoSomeThing();
    }

    _isFirstKeyDown 
= !_isFirstKeyDown;
}
posted @ 2008-07-19 12:09 海边的风 阅读(80) | 评论 (0)编辑

刚才集体默哀的时候,当警报响起、汽车鸣笛的那一刻,还是忍不住满眼的泪水,这算是对5.12地震死难者的最高礼遇了吧,愿死者安息。

posted @ 2008-05-19 14:55 海边的风 阅读(8) | 评论 (0)编辑
Berkeley DB for .NET是对Berkeley DB的.NET封装,它提供了.NET平台下的Berkeley DB编程接口(API),0.95版基于.NET 2.0,支持所有符合CLS规范的.NET下的开发语言。

Berkeley DB的.NET API类似于JAVA和C的接口,熟悉C或JAVA接口的程序员应该能很快熟悉它。

0.95版同时提供了对Berkeley DB 4.3 和 Berkeley DB 4.5的支持,通过不同的编译条件就可以得到不同的适用版本。推荐使用的Berkeley DB版本是 4.3.29 或 4.5.20 。

此版本是强命名的,需要用GAC工具gacutil.exe将程序库注册到GAC才能使用。通过自己编译源代码,也可以获得不包含强命名的版本。

一直在期待支持Berkeley DB 4.5的版本,这下终于有了。:)

访问:http://sourceforge.net/projects/libdb-dotnet
posted @ 2007-04-28 13:17 海边的风 阅读(481) | 评论 (3)编辑

因为数据库服务器安全的原因,以前把xp_regread这个系统的扩展存储过程删掉了,因为要使用这个过程,尝试恢复之后,还是不能使用。

使用的恢复语句为:
use master
dbcc addextendedproc ("Xp_regread","xpstar.dll")
go

看起来似乎没有错,但是xp_regread这个过程还是不能用,虽然在企业管理器里能看到这个存储过程,但就是不能使用,提示找不到,真是瞎眼了。后来把恢复语句中的Xp_regread改成xp_regread才正确了。

这样看来,恢复语句中的使用的存储过程名似乎是区分大小写的了,但是恢复之后,使用上却又不区分大小写。真是晕倒。

posted @ 2007-04-24 17:27 海边的风 阅读(224) | 评论 (1)编辑

今天打算用SQL Server代理(SQLServerAgent)运行定时任务的时候出错,报“当 SQLServerAgent 正在启动时,无法执行此操作。请稍候再试。”

网上的解决方案有二:

一、CSDN邹建提供的办法:取消数据库服务器的Windows NT纤程设置,重启SQL SERVER服务器。

二、对于服务器上数据的备份工作是网管员日常工作中最重要的工作之一,SQLServerAgent服务使得我们可以用SQL上的“数据库维护计划”功能来自动备份数据,但最近我发现服务器上SQLServerAgent服务无法启动了,回想最近所做的操作,原来是因为我把SQL中
Builtin/Administrators这个帐号的服务器访问权限禁止掉了,因为这个帐号的存在对于SQL来说很不安全,但又不想删除,因此把它的权限禁止,结果导致SQLServerAgent服务无法启动。
    解决的方法很简单,只要删除这个帐号,再建一个同时具有系统管理权限和SQL管理权限的用户,然后用这个用户去启动SQLServerAgent服务就可以了。以下是操作步骤:

1、打开企业管理器,打开左边的实例->安全性->登录,在右边空白处右击鼠标,选“新建登录”,单击“名称:”右边的按钮,会出现很多帐号名,选择一个具有windows超级管理员权限的用户(如Administrator),单击“添加”,再在“服务器角色”标签中选中“System Administrators”打勾,确定。

2、打开企业管理器左边的“管理”,右击“SQLServer代理”,选属性->常规->服务启动帐户,选“本帐户”,然后在旁边输入刚才所建的帐户和密码(例如:.\Administrator),密码是此用户的密码,确定。

3、最后,右击“SQLServer代理”,选“启动”,就能看到Agent成功启动了。



因为问题服务器是多CPU的,所以以前配置了使用Windows NT纤程的选项,取消这个选项之后,果然解决了问题,至于解决方案二,没有去试,不知是否正确。

posted @ 2007-04-24 17:07 海边的风 阅读(645) | 评论 (0)编辑
俗话说工欲善其事必先利其器,今天发现的这个小网站确实帮了不小的忙,特别是对于那些整天都需要跟好几个网站打交道的站长来说,有了这个小工具,以后您只在轻轻一点收email,一切情况搞定.

1、首先进去网站:http://site24x7.com,点击“Sign Up”. 如下图:



2、注册流程:



3、注册完即可以使用了,以下是进入后的主界面:



4、添加网站:



注:如果在主界面显示“Websites - Available”则证明网站是ok的,点右边的“All Websites Status”可查看所有网站情况。

5、在“Settings”里可以设置帐号怕信息:



注意“Reports”,这个功能可以每天或每周为您发送报告。



6、最后这个,如果您觉得他的email功能太麻烦,您还可以用付费的sms(短信功能)。



这个小工具好用吗? 还是您自己去试试吧,或者您只需要翘着二郞腿就可以解决一大堆问题了,至于这个工具收费吗?卖关子,还是那句老话您自己去看看吧。 ^_^

版权声明:如果您需要转载此文章,请注明出处,谢谢!
King@亿龙咨讯网(http://www.edragon.cn) & 老K部落(http://blog.edragon.cn)
posted @ 2007-03-05 20:45 海边的风 阅读(100) | 评论 (0)编辑

    很多人都喜欢豆瓣,但是豆瓣的URL设计似乎有一些小问题。

 

    豆瓣的URL地址大部分是以 / 结束的,这个 / 在URL地址中的本来意思是代表目录,但由于豆瓣采用了python开发的动态系统,所以,这些目录都是不存在的。

 

豆瓣的URL地址示例如下图:

 

但是在IE浏览器中,比如IE6,当输入URL地址时候,如果这个地址是曾经访问过的某地址的一部分,那么地址栏会出现URL地址自动补全提示,但是注意,IE的提示把最后的 / 给去掉了,如下图。 

 

这时如果用键盘上下键来选择这些自动提示的地址,如果这些目录是真实存在的话,那么web服务器会做出自动转向,以保证能访问到正确的目录,但是由于豆瓣在处理URL时没有处理这个情况,那么就会出现如下的错误了。 

这样的错误提示,对于普通用户来讲简直明显太深奥了,普通用户不会明白他们做错了什么,为什么会出现这样的情况。出于用户友好的考虑,网站程序应该自己处理这个情况,比如自动纠正这种情况,而不是把这个错误抛给用户去处理。

 

同样的情况,IMDB就对这种错误做了自动更正,比如在浏览器地址栏输入http://www.imdb.com/title/tt0399295这个地址,会自动更正到http://www.imdb.com/title/tt0399295/,(IMDB的这些目录也是不存在的,是使用了URL地址静态化处理)。

 

update:

豆瓣的系统似乎对部分URL进行了自动更正的处理,比如输入http://www.douban.com/subject/1053672,会自动更正到http://www.douban.com/subject/1053672/,(通过Firefox的Live HTTP Headers扩展可以看到确实是收到了豆瓣服务器的301转向回应),但这种处理为什么没有在全站使用呢?

posted @ 2007-02-04 00:04 海边的风 阅读(132) | 评论 (0)编辑