[转载]c#winform中使用WebKit传递js对象实现与网页交互 - 博君一笑的窝窝 - 博客频道 - CSDN.NET

mikel阅读(2269)

[转载]c#winform中使用WebKit传递js对象实现与网页交互 – 博君一笑的窝窝 – 博客频道 – CSDN.NET.

有个项目要使用WebBroswer控件,并且要能传递一个js对象供前台调用,用C#的WebBroswer控件很容易实现:

  1. private void Form1_Load(object sender, EventArgs e)  
  2. {  
  3.     WebBrowser wb = new WebBrowser();                      
  4.     wb.ObjectForScripting = new myClass();              
  5. }  

要传递的js对象必须使用[ComVisibleAttribute]标记为COM 可见:

  1. [System.Runtime.InteropServices.ComVisibleAttribute(true)]  
  2. class myClass  
  3. {  
  4.     public void Test()  
  5.     {  
  6.         System.Windows.Forms.MessageBox.Show(“alert:Test”);  
  7.     }  
  8. }  

这样前台就能使用window.external调用myClass的方法: window.external.Test();

如果就这样那就简单了 ,可偏偏项目使用的网站对IE的兼容性极差(吐槽下:个人觉得是IE太烂了,对标准的支持太差),无奈之下想找寻其他类似的WebBrowser控件,发现几个不错的替换控件:

  1. GeokoFx:一个Firefox的Geoko引擎的Windows Forms包装,google上的下载地址:http://code.google.com/p/geckofx/ 官网:http://www.geckofx.org/
  2. WebKit.NET:webkit的.NET封装,下载地址:http://sourceforge.net/projects/webkitdotnet/

本来决定使用GeokoFx,因为项目使用的网站用火狐打开是很快的,但是我找了几天资料也没发现怎么传递个js对象给控件,当发现Qt的 webbroswer控件也是封装的WebKit控件时,遂决定使用WebKit,但WebKit.NET也没有直接提供传递对象的方法,后来发现又一个 好东西:

  1. open-webkit-sharp:对webkit.net的又一次封装,提供了很多新功能。google上下载地址:http://code.google.com/p/open-webkit-sharp/

下面的使用就非常简单了,下载open-webkit-sharp后,把Core文件夹和References文件夹下所有文件拷贝到你的工程目录 下,然后打开你的项目,添加引用OpenWebKitSharp.dll和WebKit.Interop.dll(如果你的项目运行在.NET Framework 2.0 或 3.5 引用 Binary_NET2文件夹下的这两个文件,NET4.0的话就引用Binary文件夹下的这两个dll);然后就是工具箱->选择项-> 选择OpenWebKitSharp.dll,然后从工具箱中把WebKitBrowser拖到你的窗体上.现在已经成功了一大步了,但是为了避免使用时 遇到各种错误,我们需要先安装两个支持文件:

  1. Microsoft C++ 2005 Redistributable http://www.microsoft.com/download/en/details.aspx?id=26347Windows XP/Vista/7 32/64 Bit
  2. Apple QuickTime (Optional – for better HTML5 Support)

Ready!开始传递对象:

  1. private void Form1_Load(object sender, EventArgs e)  
  2. {  
  3.     this.webKitBrowser1.Navigate(“http://yourWebSiteUrl”);  
  4.     this.webKitBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webKitBrowser1_DocumentCompleted);  
  5. }  
  6. void webKitBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)  
  7. {  
  8.     this.webKitBrowser1.GetScriptManager.ScriptObject = new myClass();  
  9. }  

前台调用方式类似IE的webbroswer,也使用window.external调用,你也可以自己定义一个对象:

  1. this.webKitBrowser1.GetScriptManager.EvaluateScript(“var obj=window.external;”);  

这样调用的时候就能用你自己定义的对象名访问了。

应该也有直接自己定义对象的方法,但是open-webkit-sharp中文的资料实在的不多,耐着性子看了几天老外的论坛,一水的全是吐槽,实际解决问题的不多。等有更好的方法,也请大家不吝赐教。

[转载]C# C/S程序获取MAC地址三种方法 - 澜紫癜青 - 博客园

mikel阅读(911)

[转载]C# C/S程序获取MAC地址三种方法 – 澜紫癜青 – 博客园.

之前为了自己的共享软件,曾萌生过靠共享软件发财的想法,从而考虑通过绑定注册用户的MAC地址,从而实现正版用户与盗版用户的验证

研究了很多次,在笔记本,台式机,老式台式机(2002年到2009年之间的老式机器)上试验自己的程序

发现读取客户端的MAC地址有三种方法比较靠谱,献给大家我的测试结果

1.通过System.Net命名空间获取客户端当前启用的网络连接的网卡地址

#region 返回当前系统所启用的网络连接的信息
       public static NetworkInterface[] NetCardInfo()
       {
           return NetworkInterface.GetAllNetworkInterfaces();
       }
       #endregion
       public static string[] GetMacString()
       {
           string strMac = "";
           NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
           foreach (NetworkInterface ni in interfaces)
           {
               if (ni.OperationalStatus == OperationalStatus.Up)
               {
                   strMac += ni.GetPhysicalAddress().ToString() + "|";
               }
           }
           return strMac.Split('|');
       }

2.通过WMI读取系统信息里的网卡MAC

public static string[] WMIGetMACString()
       {
               //获取网卡Mac地址  
               string mac = "";
               ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
               ManagementObjectCollection moc = mc.GetInstances();
               foreach (ManagementObject mo in moc)
               {
                   if ((bool)mo["IPEnabled"] == true)
                   {
                       mac+= mo["MacAddress"].ToString()+"|";
                   }
               }
               moc = null;
               mc = null;
               return mac.Split('|');
       }

3.注册表读取方法(那种没装360,从来不打补丁,盗版修改版系统的用户要排除掉)

有1个路径

常规用户通过Windows Genuine Advantage可以获取到物理网卡地址。

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Genuine Advantage

PS:

第一种方法有以下两种缺陷

a.如果当前的网卡是禁用状态(硬件处于硬关闭状态),取不到MAC地址,MAC地址会返回为空。

b.如果当前启用了多个网卡,返回的地址是最近启用的网络连接的信息,假如说你获取的是个USB网卡呢,那就o(╯□╰)o了

第二种方法有很严重的一个缺陷,那就是依赖WMI的系统服务,如果系统服务缺失或者出现问题,WMI获取恐怕就很难

第一种PK第二种,优点很明显那就是不依赖服务,返回的信息可以直接构造成为数据,比如图片中的dataGridView绑定。

第三种是利用微软的正版验证程序所获取的信息,信微软则可以考虑,但是经过我的实地测试,在台式机上获取好像不太准确,会有两个MAC地址(实际只有一个物理网卡)

再提到一些不太靠谱的方法,个人所见,也许有人不赞同,但是请您将您的测试发出来

1.协议方法,通过网络协议获取客户端的IP再通过ARP协议转换成为MAC地址,

2.通过command命令行,比如说IPCONFIG 之类的,

3.通过扩展协议,比如说抓包程序,分析报文之类的

4.通过WIN32 API

这些方法都存在通用性不强,

1,2,3依靠C#执行别的代码就要通过那个什么CLR转换,效率太低,感觉就是很卡,而且通过new Process之类,线程之类的话,又存在休眠,效率守护之类囧。

4,他只能通过WIN的操作系统核心函数去取,不同WIN操作系统很可能这些核心函数的参数或者语法就不一样。

[转载]js 获取多个mac地址(支持火狐与google) - 一天进步一点 - ITeye技术网站

mikel阅读(912)

[转载]js 获取多个mac地址(支持火狐与google) – 一天进步一点 – ITeye技术网站.

BS项目中要实现mac地址验证,只能在js获取mac地址,而网络上很多写法都是调用微软ActiveX,而此有几个缺点:

 

1: IE核心浏览器会弹出提示,很多客户会误以为是病毒,而点击否

2: 不支持非IE浏览器

3: 无法跨平台

所以只能采用别的处理办法,那能不能从别的地方下手呢?

 

答案是肯定的,一下是我的想法,大家可以在我的基础上进行拓展。

 

1:  js读取xml

2:  通过批处理获取mac地址并生成XML

 

以下是代码:

 

html 通过js获取xml文件

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
</BODY>
</HTML>
<SCRIPT>
var progId, progIds = ["MSXML2.XMLHTTP.6.0" , "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];

function getXMLHttpRequest()
  {
   if (!window.ActiveXObject) {
    return new XMLHttpRequest();
   } else if (progId != null) {
    return new ActiveXObject(progId);
   } else {
    for (var i = 0; i < progIds.length; i++)
    {
     try {
      return new ActiveXObject(progId = progIds[i]);
     } catch (ex) {
      progId = null;
     }
    }
   }
  }
  function loadClass(src)
    {
     try
     {
      var xmlHttp = getXMLHttpRequest();
      xmlHttp.open("GET", src, false);
      xmlHttp.send(null);
      var stus = xmlHttp.status;
      if (stus == 200 || stus == 0 || stus == 304)
      {
       return xmlHttp.responseText;
      }
     }catch(ex){
        alert("error!");
     }
    }
var e =  loadClass("c:\\WINDOWS\\system32\\22.xml");

alert(e);

</SCRIPT>

通过bat 生成dos

@ECHO OFF
color 01a

@ECHO  系统启动中,请不要中断
C:
if not exist "c:\WINDOWS\system32\22.XML" (

for /f "delims=: tokens=1*" %%a in ('ipconfig/all^|find "Physical"')do echo %%b>>c:\WINDOWS\system32\22.xml

)
ping /n 2 127.1 >nul
rem 地址修改成需要的地址
 start http://localhost/
@ECHO 恭喜你 启动成功
pause

[转载]分享一套 CodeSmit 代码生成模板。 - JimHappy#真嗨皮#郑海滨 - 博客园

mikel阅读(854)

[转载]不再害羞,过程比结果更重要;分享一套 CodeSmit 代码生成模板。 – JimHappy#真嗨皮#郑海滨 – 博客园.

住博客园 5 年了,以前也发过一些博文,但都在 一天后 / 几周后 / 几年后 将它删了;因为感觉代码写得不好:不清晰或侵入太大,哪怕只有一句侵入。

可是最近重写一套 CodeSmith 代码生成模板的时候,发现自己编码能力长进不少:有能力删除大量代码了。删除得很顺利,即使不舍;看上去这是个好事,可也是个坏事:现已难以回忆起当初为什么删这些代码、更回忆不起来最初为什么加这些代码。

这些决策信息的丢失真是让人痛心疾首。

接下来,我要实现一个好玩的东西:维护对象在内存中的引用一致性。这一次,我可不想让那些左右决策的依据不翼而飞了;她们很珍贵:那是我的思路。

 

另外介绍一下上期成果吧,其实就是发个广告啦:

很多人、包括直到前不久离职的我,都在进行着 基于数据库且数据库优先 的简单应用开发。所幸的是大家都使用着相同的实现模式:Entity -(IDal、Dal)- Bll。
于是,我要写一套 CodeSmith 模板,让有缘人看到、使用 或 修改。

包括这套,一共编写了三套 CodeSmith 模板;
第一套实现了基本的可用功能,第二套添加了自认为有亮点的功能,这次重构并删除了那些自认为有亮点的功能;
所以也留下了一些心结:

  1. 枚举类型的字段。虽然可让代码强类型、可读性强,但使用字段注释和类型转换也可弥补。
  2. 视图中的唯一键。这个关系到分页性能,不过如果最多只返回 Top 500 之类的则也没啥差别。
  3. TransactionScope。SQLServer 2000 时需要启动 MsDtc 服务且影响性能,不过 SQLServer 2005 以上就不需要了。
    • 说明

      如果使用 CodeSmith 5.0,则在 CodeSmith 的 Template Explorer 的工具栏中点击第一个按钮(Create Template Folder Shortcut)指向 DatabaseBasedCodeGenerator 文件夹。

      打开 Main.cst,编译后在 Properties 设定必填属性就可运行 Main.cst 了,运行后会生成完整的解决方案。

      是否能编译则还要看你的数据库元素的命名是否重复。

      生成的主要是数据访问的实现:


      其中 Filter 和 Condition 是为了让查询条件强类型而引入的。

      Condition 弥补了 Filter 中条件只能与的缺陷。

      所以,Condition 蕴含的 SQL 是依靠数据库元数据生成的,因为使用 CodeSmith,所以参考了其 SchemaExplorer 命名空间中类的命名:

      下载点这里

[转载]Lambda表达式看到他我一下子就悟了 - 幕三少 - 博客园

mikel阅读(927)

[转载]看到他我一下子就悟了 – 幕三少 – 博客园.

一直对Lambda表达式似懂非懂,平常也用过,就是不太明白有时候还要百度。周六去图书馆看书,看到下面这几句话,一下子就悟了:

  • Lambda表达式(匿名函数),基本形式:

    (intput paramters)=〉expression
    a.只有一个参数时,括号是可选的,两个或者更多用逗号隔开
    b.编译器无法推断输入函数类型时,可以按一下实例中的方式显示指定类型

    int x,string s)=>s.Length>x

    其它参数举例:

    //两个参数
    (x,y)=>x==y
    //一个参数
    x=>x*x
    //零个参数
    ()=>somemethod()

 

  • Lambda语句(与Lambda表达式类似,只是语句在大括号中)

    基本形式:

    (input parametors)=>{ statement}

  • 哈哈,以后再Lambda表达式就不用翻书了,就这么个形式,记住万变不离其中,不管看多少书,做多少练习,最后还是他……

[转载]Visual Studio 2013 Preview - ASP.NET, MVC 5, Web API 2新功能搶先看 - 基点项目师 - 博客园

mikel阅读(883)

[转载]Visual Studio 2013 Preview – ASP.NET, MVC 5, Web API 2新功能搶先看 – 基点项目师 – 博客园.

來自TechEd North America 2013的第一手消息

以下資訊均來自 Channel9 目前於北美 TechEd 活動影片,主要記錄 DEV-B314 這一場 Microsoft ASP.NET, Web, and Cloud Tools Preview 的筆記。

Visual Studio 2013 Preview改良部分

以下將 Visual Studio 2013 Preview 相關內容整理如下:

單一對話視窗

Visual Studio 2013 Preview簡化一開始的新增專案的對話視窗,只區兩大類,進入後也只區分為Empty、Web Forms、MVC、Web API、SPA、Facebook、Mobile。

測試伺服器

測試伺服器不在局限於IIS Express,也可以設置為外部伺服器。

Browser Link

當我們修改頁面文字、Layout、CSS等,可快速重整所有已連接至Visual Studio測試頁面的瀏覽器。

認證組態

在新增專案時即可設置認證組態,目前可結合其他外部Microsoft Live Id、Facebook、Google+、twitter等。

Web Forms改良部分

以下將 Web Forms 相關內容整理如下:

Web Forms引入Bootstrap架構頁面

以 Web Forms 專案為例,開啟 Webform 專案後可以看到新專案範本整合使用了Bootstrap來架構頁面。

另外可使用bootswatch.com來快速改變Bootstrap預設顏色。

Web Forms加入MVC的Scaffold功能

現在 Web Forms 也可以和 MVC 一樣使用 Scaffold 技術快速產生 CRUD 的頁面。

Web Forms新會員系統 – Code first架構

採用新的會員系統,而且預設使用 Entity Faemwork Code first 來進行,這讓我們不在被 Database schema 綁死,可自由擴充與修改。

SignalR v2

內含 SignalR v2 版本。

ASP.NET MVC 5功能增強與改良

以下將 ASP.NET MVC 5 相關內容整理如下:

MVC 5引入Bootstrap架構頁面

與 Web Forms 相同。

MVC 5 Scaffold

MVC 5 Scaffold選項。

MVC 5 – Web API v2 – Attribute Routing

以屬性方式來設置Web API的路由,細節可參考 Attribute routing in Web API

MVC 5 – Web API v2 – CORS

細節可參考 ASP.NET WEB API CORS預覽功能完整剖析

簡報重點

以下將簡報重點相關內容整理如下:

  • Entity Framework 6 新功能有
  • 關於ASP.NET 新範本與 Bootstrap 的使用
  • Visual Studio 2013 Preview功能改良
  • ASP.NET 身分認證改良
  • ASP.NET MVC 5 必須使用 .NET Framework 4.5,.NET Framework 4.0 以下不支援。也就是說,如果你的專案不能升級或使用 .NET Framework 4.5,那麼 ASP.NET MVC 5 和你無緣份了。
  • 新整合的 Scaffolding 系統。
  • ASP.NET SignalR 2.0 必須使用 .NET Framwork 4.5,.NET Framework 4.0 以下不支援。也就是說,如果你的專案不能升級或使用 .NET Framework 4.5,那麼 ASP.NET SignalR 2.0 和你無緣份了。
  • ASP.NET Web API 2.0 必須使用 .NET Framwork 4.5,.NET Framework 4.0 以下不支援。也就是說,如果你的專案不能升級或使用 .NET Framework 4.5,那麼 ASP.NET Web API 2.0 和你無緣份了。
  • OWIN 和 Katana 

 

更多可参见:http://browse.feedreader.com/c/KingKong_Bruce/439476817

[转载]分享.NET单元测试电子书 - ily1322 - 博客园

mikel阅读(940)

[转载]分享.NET单元测试电子书 – ily1322 – 博客园.

引言:

   平时没有项目压力时候,首先想到的是充电学习,要系统学习都会想到购买书籍,或者向同事借阅。买的书多了烦恼 也来了,因为大学到现在5-6年陆续买了上百本开发书籍,面对堆积如山的书,每每搬家,排队,等公车都无法做到便捷。于是想到把这些纸质的书全部转行为电 子书,刚好上次一位好友索要,于是第一次动手自己做了一个PDF电子书,这样每次用Galaxy Note2或Ipad看书,真是太爽了,实在是居家旅行 杀人灭口 必备良药!分享如下:

书籍首页

书籍目录

  

备注:

由于博客园目前文件大小不支持超过10M,所以这边不能提供下载链接。

      

 

 

制作电子书,要扫描每一页为图片,然后再次用PDF进行编辑,制作完一本书真感觉有点自虐,但想到园子里有千千万万这样的学子,所谓我不入地狱谁入地狱。本人制作方式比较老土,如果您有好的快速的制作方法,希望您能提出宝贵意见

后期会陆续提供其他类型开发电子书,敬请期待。

下载方式:

百度网盘支持创建公开链接,但是,百度网盘感觉很不稳定,上传过程老是报服务器出错,如下图所示:

我目前使用的是115网盘,115使用这么久感觉很给力,美中不足的是115不支持创建公开链接,如下图:

所以您如果想下载的话,可能需要注册115账号,给您带来的下载不便,请多理解: 下载 

[转载]网页前端优化之滚动延时加载图片 - 林宇 - 博客园

mikel阅读(974)

[转载]网页前端优化之滚动延时加载图片 – 林宇 – 博客园.

做web开发的朋友都应该掌握前端优化这个技巧,其中一个就是滚动延时加载。这个技巧应用在了很多地方,比如新浪微博网页版。

为什么要延时加载呢?页面加载的时候就显示全部的图片不就得了?有必要多此一举吗?答案是肯定的。当要加载的图片或者内容很多时,如果一次性加载完 毕,那么整个页面将会加载很久,意味着要用户等待很久,这是对用户不友好的。或许你还会问,那不就做个分页不就得了?其实这种滚动延时加载的技巧正是用来 代替手动点击下一页的分页技术。每换一页都要用户点击一次,这也是对用户不友好的。所以才有了滚动延时加载。

我这里把加载图片作为例子,就好像百度图片里的一样,你往下滚动,它就会继续显示下一页的图片。

要求是这样的,比如我要加载20张图片,在页面加载完毕后我先加载5张(前提是5张已经占满浏览器窗口高度),当滚动条滚动到浏览器底部的时候再加载5张,一共加载4次。

原理是这样的,先获取当前浏览器的窗口高度a,然后给页面绑定一个滚动条滚动事件,当滚动条滚动的时候,首先判断时候已经加载了20张,如果小于20张,再获取当前文档距离顶部的高度b以及图片内容的高度c,如果a+b>=c,继续加载5张图片。

我说过,我喜欢以尽可能少的代码以及尽可能简单的demo来为有需要的人展示一些强大的功能,因为所有的东西原理其实都很简单,越简单的demo越容易让人理解和接受。所以代码很少,直接上代码:





页面滚动延迟加载图片

<script type="text/javascript" src="jquery-1.7.2.min.js"></script><script type="text/javascript">// <![CDATA[
        var n = 0;
        var winHeight = $(window).height();
        $(function () {
            loadimg();
            $(window).scroll(function () {
                if (n < 20) {                     var docTop = $(document).scrollTop();                     var contentHeight = $("#content").height();                     if (docTop + winHeight >= contentHeight - 10) {
                        loadimg();
                    }
                }
            });
        });
        function loadimg() {
            for (i = 0; i < 5; i++) {
                $("#content").append("
	<li><img src='1.jpg'/></li>

");
            }
            n += 5;
        }

// ]]></script>


这里使用了jqury框架是为了让代码更少更简单,如果你可以手写纯js代码来实现这个功能当然最好不过,毕竟是优化,这个小小的功能也不需要使用 到任何js框架。不过个人比较喜欢JQuery框架,毕竟在大项目中,手写纯js代码将会严重拖慢整个项目的进度,有一个强大的js框架摆在面前,合理运 用还是能提高开发效率的,而且在一个大项目中,JQuery不是仅仅能帮你实现这个小小的功能而已,像Ajax,它是能轻轻松松就能帮你搞定的。另外我这 里只是写死了加载这一张图片,事实上它应该是使用Ajax来请求新的图片,然后加载到页面里的,因为想尽量简单,就没有涉及后台逻辑,所以只加载这一张图 片。

你可能会注意到这句代码:docTop + winHeight >= contentHeight – 10,这里我为什么要-10呢?如果不-10在IE、Firefox下测试时通过的,但是在Chrome下就不行了,因为在Chrome下,docTop + winHeight是永远比contentHeight小1的,而在前两个浏览器里,docTop + winHeight是比contentHeight大1的,这个是浏览器的问题,我们只能去兼容它们,最简单的方法就是不一定要滚动到底部,滚动到距离底 部还有10个像素的时候就可以加载新的图片了。

习惯了晚睡晚起,知道这样对身体不好,可是就是很难改过来。以后尽量早点睡,早睡早起身体好,头脑也灵活一点。各位也是,莫把生命都给了coding,你的生活里还有更美好的事与人。

需要源工程代码

[转载]分布式网站负载压力测试工具官方下载 - 下载中心 - 秋色园

mikel阅读(1027)

[转载]分布式网站负载压力测试工具官方下载 – 下载中心 – 秋色园.

分布式网站负载压力测试工具简介:

这一款分布式网站负载压力测试工具,可以测试服务器负载性能和网站并发性能,默认可以使用9个节点发起近1万个并发链接,是网站开发者必备工具之一。
相关说明:
WST 用户服务说明:本站提供分布式并发请求功能,仅用于自身站点性能测试,不得攻击他人站点。

测试的网址应避免301、302等URL跳转(系统只对原始URL发送一次请求,不再对跳转后的URL发送请求)。

任务进行时:只提供并发压力,不提供测试数据,性能请从服务器自身(性能计数)进行分析(Current Connection 和CPU及内存等变化情况)。


安装后为Web操作界面,截图如下:


PS:根据网友的相关反馈,后期可能会增加网站验证步骤。


软件下载地址:

网站负载压力测试工具下载地址:点击下载