热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c#WebBrowser开发参考

c#WebBrowser开发参考资料webbrowser,所有资料的采集均来自网上:最近看到博客园入门教学文章比较流行,自己最近又偷懒比较多

c# WebBrowser开发参考资料webbrowser,所有资料的采集均来自网上:

  最近看到博客园入门教学文章比较流行,自己最近又偷懒比较多,没啥心得,不妨写一篇没啥深度的入门文章吧webbrowser

  话说有了WebBrowser类,终于不用自己手动封装SHDocVw的AxWebBrowser这个ActiveX控件了webbrowser。这个类如果仅仅作为一个和IE一模一样浏览器,那就太

  没意思了(还不如直接用IE呢)webbrowser。那么,无论我们是想做一个“定制版IE”,还是希望利用HTML来做用户界面(指WinApp而非WebApp。许多单机软件

  ,包括Windows的帮助支持中心,都是HTML做的),都少不了Windows Form和包含在WebBrowser中的Web页面的交互webbrowser。本文将通过几个实际的例子,初

  步介绍一下WinForm和WebBrowser所包含的Web页面之间的交互webbrowser

  下面的代码假设你已经建立了一个Windows Form,上面有一个WebBrowser名为“webBrowser”webbrowser

  Study Case 1:用WinForm的Event Handler响应Web页面的事件

  现在有这样一个Windows Application,它的界面上只有一个WebBrowser,显示一个本地的HTML文件作为界面webbrowser。现在的问题是,所有逻辑都可以放在

  HTML文件里,唯独“关闭”按钮遇到了困难——通常,Web页面是没有办法直接控制浏览器的,更不用说结束这个WinForm程序了webbrowser

  但是,在.Net 2.0当中,“由Windows Form响应Web页面的事件”已经成为了现实webbrowser

  在.Net 2.0中,整个HTML文档以及其包含的各个HTML元素,都和一个个HtmlDocument、HtmlElement之类的.Net对象对应webbrowser。因此只要找到这个“关闭”

  按钮对应的HtmlElement对象,为其click事件添加Event Handler即可webbrowser

  假设HTML源代码如下:

  

  

  

  

  

  那么找出该按钮并为之添加Event Handler的代码如下:

  HtmlDocument htmlDoc = webBrowser.Document;

  HtmlElement btnElement = htmlDoc.All["btnClose"];

  if (btnElement != null)

   btnElement.click += new HtmlElementEventHandler(HtmlBtnClose_Click);

  其中HtmlBtnClose_Click是按下Web按钮时的Event Handlerwebbrowser

  很简单吧?那么稍稍高级一点的——我们都知道一个HTML元素可能有很多各种各样的事件,而HtmlElement这个类只给出最常用、共通的几个webbrowser。那么,

  如何响应其他事件呢?这也很简单webbrowser,只需要调用HtmlElement的AttachEventHandler就可以了:

  btnElement.AttachEventHandler("onclick", new EventHandler(HtmlBtnClose_Click));

  //这一句等价于上面的btnElement.click += new HtmlElementEventHandler(HtmlBtnClose_Click);

  对于其他事件,把"onclick"换成该事件的名字就可以了webbrowser。例如:

  formElement.AttachEventHandler("onsubmit", new EventHandler(HtmlForm_Submit));

  Study Case 2:表单(form)的自动填写和提交

  要使我们的WebBrowser具有自动填表、甚至自动提交的功能,并不困难webbrowser

  假设有一个最简单的登录页面,输入用户名密码,点“登录”按钮即可登录webbrowser。已知用户名输入框的id(或Name,下同)是username,密码输入框的id

  是passwordwebbrowser,“登录”按钮的id是submitbutton,那么我们只需要在webBrowser的DocumentCompleted事件中使用下面的代码即可:

  HtmlElement btnSubmit = webBrowser.Document.All["submitbutton"];

  HtmlElement tbUserid = webBrowser.Document.All["username"];

  HtmlElement tbPasswd = webBrowser.Document.All["password"];

  if (tbUserid == null || tbPasswd == null || btnSubmit == null)

   return;

  tbUserid.SetAttribute("value", "smalldust");

  tbPasswd.SetAttribute("value", "12345678");

  btnSubmit.InvokeMember("click");

  这里我们用SetAttribute来设置文本框的“value”属性,用InvokeMember来调用了按钮的“click”方法webbrowser。因为不同的Html元素,其拥有的属性和方

  法也不尽相同,所以.Net 2.0提供了统一的HtmlElement来概括各种Html元素的同时,提供了这两个方法以调用元素特有的功能webbrowser。关于各种Html元素的

  属性和方法一览,可以查阅MSDN的DHTML Referencewebbrowser

  ※关于表单的提交webbrowser,的确还有另一种方法就是获取form元素而不是button,并用form元素的submit方法:

  HtmlElement formLogin = webBrowser.Document.Forms["loginForm"];

  formLogin.InvokeMember("submit");

  本文之所以没有推荐这种方法,是因为现在的网页,很多都在submit按钮上添加onclick事件,以对提交的内容做最基本的验证webbrowser。如果直接使用form的

  submit方法,这些验证代码就得不到执行,有可能会引起错误webbrowser

  Study Case 3:查找并选择文本

  这次我们希望实现一个和IE一模一样的查找功能,以对Web页面内的文字进行查找webbrowser

  文本查找要借助于TextRange对象的findText方法webbrowser。但是,.Net里并没有这个对象。这是因为,.Net 2.0提供的HtmlDocument,HtmlWindow,

  HtmlElement等类,只不过是对原有mshtml这个COM组件的不完整封装,只提供了mshtml的部分功能webbrowser。所以许多时候,我们仍旧要借助mshtml来实现我

  们需要的功能webbrowser。好在这些.Net类都提供了DomDocument这个属性,使得我们很容易把.Net对象转换为COM对象使用。下面的代码演示了如何查找Web页面

  的文本webbrowser

  (需要添加mshtml的引用webbrowser,并加上using mshtml;)

   public partial class SearchDemo : Form

   // 建立一个查找用的TextRange(IHTMLTxtRange接口)

   private IHTMLTxtRange searchRange = null;

   public SearchDemo()

   InitializeComponent();

   private void btnSearch_Click(object sender, EventArgs e)

   // Document的DomDocument属性,就是该对象内部的COM对象webbrowser

   IHTMLDocument2 document = (IHTMLDocument2)webBrowser.Document.DomDocument;

   string keyword = txtKeyword.Text.Trim();

   if (keyword == "")

   return;

   // IE的查找逻辑就是,如果有选区,就从当前选区开头+1字符处开始查找;没有的话就从页面最初开始查找webbrowser

   // 这个逻辑其实是有点不大恰当的,我们这里不用管,和IE一致即可webbrowser

   if (document.selection.type.ToLower() != "none")

   searchRange = (IHTMLTxtRange)document.selection.createRange();

   searchRange.collapse(true);

   searchRange.moveStart("character", 1);

   else

   IHTMLBodyElement body = (IHTMLBodyElement)document.body;

   searchRange = (IHTMLTxtRange)body.createTextRange();

   // 如果找到了,就选取(高亮显示)该关键字;否则弹出消息webbrowser

   if (searchRange.findText(keyword, 1, 0))

   searchRange.select();

   else

   MessageBox.Show("已搜索到文档结尾webbrowser。");

  到此为止,简单的查找就搞定了webbrowser。至于替换功能,看了下一个例子,我相信你就可以触类旁通轻松搞定了。

  Study Case 4:高亮显示

  上一个例子中我们学会了查找文本——究跟到底,对Web页面还是只读不写webbrowser。那么,如果说要把所有的搜索结果高亮显示呢?我们很快会想到把所有匹

  配的文字颜色、背景改一下就可以了webbrowser

  首先想到的可能是直接修改HTML文本吧……但是,与SourceCode的高亮显示不同,我们需要并且只需要高亮页面中的文本部分webbrowser。HTML标签、脚本代码

  等等是绝对不应该去改动的webbrowser。因此我们不能把整个页面的Source Code读进来然后replace,那样有破坏HTML文件结构的可能;我们只能在能够分离出

  文本与其他内容(标签,脚本……)的前提下进行webbrowser

  具体方法有很多,下面提供两个比较简单的方法webbrowser

  方法一:使用TextRange(IHTMLTxtRange)

  有了上一个Case的基础,相信大家立刻会想到使用TextRangewebbrowser。没错,TextRange除了提供查找方法之外,还提供了一个pasteHTML方法,以指定的HTML

  文本替换当前TextRange中的内容webbrowser。代码片断如下:

   public partial class HilightDemo : Form

   // 定义高亮显示效果的标签webbrowser

   string tagBefore = "";

   string tagAfter = "";

   private void btnHilight_Click(object sender, EventArgs e)

   HtmlDocument htmlDoc = webBrowser.Document;

   string keyword = txtKeyword.Text.Trim();

   if (keyword == "")

   return;

   object oTextRange = htmlDoc.Body.InvokeMember("createTextRange");

   mshtml.IHTMLTxtRange txtrange = oTextRange as mshtml.IHTMLTxtRange;

   while (txtrange.findText(keyword, 1, 4))

   try

   txtrange.pasteHTML(tagBefore + keyword + tagAfter);

   catch { }

   txtrange.collapse(false);

c# WebBrowser开发参考

  ※这段代码里获取IHTMLTxtRange的方式和上面的例子稍稍不同,其实所谓条条大路通罗马,本质是一样的webbrowser

  方法二:使用DOM(文档对象模型)

  将HTML文档解析为DOM,然后遍历每个节点,在其中搜索关键字并进行相应替换处理即可webbrowser

   public partial class HilightDemo : Form

   private void btnHilight_Click(object sender, EventArgs e)

   HTMLDocument document = (HTMLDocument)webBrowser.Document.DomDocument;

   IHTMLDOMNode bodyNode = (IHTMLDOMNode)webBrowser.Document.Body.DomElement;

   string keyword = txtKeyword.Text.Trim();

   if (keyword == "")

   return;

   HilightText(document, bodyNode, keyword);

   private void HilightText(HTMLDocument document, IHTMLDOMNode node, string keyword)

   // nodeType = 3:text节点

   if (node.nodeType == 3)

   string nodeText = node.nodeValue.ToString();

   // 如果找到webbrowser了关键字

   if (nodeText.Contains(keyword))

   IHTMLDOMNode parentNode = node.parentNode;

   // 将关键字作为分隔符webbrowser,将文本分离,并逐个添加到原text节点的父节点

   string[] result = nodeText.Split(new string[] { keyword }, StringSplitOptions.None);

   for (int i = 0; i

   if (result[i] != "")

   IHTMLDOMNode txtNode = document.createTextNode(result[i]);

   parentNode.insertBefore(txtNode, node);

   IHTMLDOMNode orgNode = document.createTextNode(keyword);

   IHTMLDOMNode hilightedNode = (IHTMLDOMNode)document.createElement("SPAN");

   IHTMLStyle style = ((IHTMLElement)hilightedNode).style;

   style.color = "black";

   style.backgroundColor = "yellow";

   hilightedNode.appendChild(orgNode);

   parentNode.insertBefore(hilightedNode, node);

   if (result[result.Length - 1] != "")

   IHTMLDOMNode postNode = document.createTextNode(result[result.Length - 1]);

   parentNode.insertBefore(postNode, node);

c# WebBrowser开发参考

   parentNode.removeChild(node);

   } // End of nodeText.Contains(keyword)

   else

   // 如果不是text节点webbrowser,则递归搜索其子节点

   IHTMLDOMChildrenCollection childNodes = node.childNodes as IHTMLDOMChildrenCollection;

   foreach (IHTMLDOMNode n in childNodes)

   HilightText(document, n, keyword);

  上面的两段代码都是为了清晰易懂而精简得不能再简的,有很多地方很不完善webbrowser。比如,没考虑到如何从高亮显示状态复原;也没有大小写匹配等等。

  当然,掌握了原理之后相信这些都不会太难webbrowser

  这两种方法各有优缺点:

  使用TextRange较轻量迅速,而且有一个特长,就是可以把跨标签(Tag)的关键字挑出来webbrowser。例如,有这么一段HTML:

  Hello World!

  先不管作者出于什么目的让Hel三个字母成为粗体,总之显示在页面上的是一句“Hello World!”webbrowser。在我们希望高亮页面中的“Hello”这个关键字时

  ,如果用DOM分析的话,会得出含有“Hel”的节点和文本节点“lo World!”两个节点,因此无法将其挑出来webbrowser。而TextRange则能正确识别,将其设

  置为高亮webbrowser。因此也可以说TextRange是只和文本有关,和HTML语法结构无关的对象。

  但是,TextRange也有其致命缺点,加亮容易,反向的话就很难webbrowser。换句话说,去除高亮显示的时候不能再用TextRange,而需要采用其他方法。

  而DOM方法则正好相反, 由于DOM的树状结构特性,虽然不能(或者很难)跨越Tag搜索关键字,但是去除高亮显示并不繁琐webbrowser

  Study Case 5:与脚本的互操作

  在Case 1当中webbrowser,我们已经看到,Web页面的HTML元素的事件,可以由Windows Form端来响应,可以在某种程度上看作是Web页面调用WinForm;那么反过

  来webbrowser,WinForm除了可以直接访问Web页面的HTML元素之外,能否调用Web页面里的各种Script呢?

  首先是调用Web页面的脚本中已经定义好的函数webbrowser。假设HTML中有如下Javascript:

  function DoAdd(a, b) {

   return a + b;

  那么webbrowser,我们要在WinForm调用它,只需如下代码即可:

  object oSum = webBrowser.Document.InvokeScript("DoAdd", new object[] { 1, 2 });

  int sum = Convert.ToInt32(oSum);

  其次,如果我们想执行一段Web页面中原本没有的脚本,该怎么做呢?这次.Net的类没有提供,看来还要依靠COM了webbrowser。IHTMLWindow2可以将任意的字符

  串作为脚本代码来执行webbrowser

  string scriptline01 = @"function ShowPageInfo() {";

  string scriptline02 = @" var numLinks = document.links.length; ";

  string scriptline03 = @" var numForms = document.forms.length; ";

  string scriptline04 = @" var numImages = document.images.length; ";

  string scriptline05 = @" var numScripts = document.scripts.length; ";

  string scriptline06 = @" alert('网页的统计结果:\r\n链接数:' + numLinks + ";

  string scriptline07 = @" '\r\n表单数:' + numForms + ";

  string scriptline08 = @" '\r\n图像数:' + numImages + ";

  string scriptline09 = @" '\r\n脚本数:' + numScripts);}";

  string scriptline10 = @"ShowPageInfo();";

  string strScript = scriptline01 + scriptline02 + scriptline03 + scriptline04 + scriptline05 +

   scriptline06 + scriptline07 + scriptline08 + scriptline09 + scriptline10;

  IHTMLWindow2 win = (IHTMLWindow2)webBrowser.Document.Window.DomWindow;

  win.execScript(strScript, "Javascript");

  

  使用ObjectForScripting属性,可启用 WebBrowser 控制项所装载之 Web 网页与包含 WebBrowser 控制项之应用程式间的通讯webbrowser

  这个属性可让您整合动态超文字标记语言 (DHTML) 程式码与用户端应用程式程式码webbrowser

  指定给这个属性的物件可让 Web 网页指令码做为 window.external 物件,这个物件是为了存取主应用程式而提供的内建 DOM 物件webbrowser

  private void btnScriptEvent_Click(object sender, EventArgs e)

   webBrowser1.ObjectForScripting = this;

   string szWebBrowserText = "" +

   "" +

   ""+

   "" +

   ""+

   "Please enter your name:
"+

   "
"+

   "Click Here"+

   "";

   webBrowser1.DocumentText = szWebBrowserText;

   public void ClickEvent(string userName)

   // Simply echo out the name that the user typed in the input box of the HTML page

   if (System.Threading.Thread.CurrentThread.CurrentUICulture.TextInfo.IsRightToLeft == true)

   MessageBox.Show("Hello " + userName, "Managed Web Browser Sample", MessageBoxButtons.OK,

  MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading);

   else

   MessageBox.Show("Hello " + userName, "Managed Web Browser Sample", MessageBoxButtons.OK,

  MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

  = szWebBrowserText;

  异常类型 条件

  ArgumentException

  设置该属性时指定的值为非公共类型的实例webbrowser

  - 或 -

  设置该属性时指定的值为非 COM 可见的类型的实例webbrowser。有关更多信息,请参见 Marshal.IsTypeVisibleFromCom。

  备注

  使用该属性启用 WebBrowser 控件承载的网页与包含 WebBrowser 控件的应用程序之间的通信webbrowser。使用该属性可以将动态 HTML (DHTML) 代码与客户端

  应用程序代码集成在一起webbrowser。为该属性指定的对象可作为 window.external 对象(用于主机访问的内置 DOM 对象)用于网页脚本。

  可以将此属性设置为希望其公共属性和方法可用于脚本代码的任何 COM 可见的对象webbrowser。可以通过使用 ComVisibleAttribute 对类进行标记使其成为

  COM 可见的类webbrowser

  若要从客户端应用程序代码调用网页中定义的函数,请使用可从 Document 属性检索的 HtmlDocument 对象的 HtmlDocument.InvokeScript 方法webbrowser

  示例

  下面的代码示例演示如何使用 ObjectForScripting 属性webbrowser。在该示例中,ObjectForScripting 属性被设置为当前窗体。

  using System;

  using System.Windows.Forms;

  using System.Security.Permissions;

  [PermissionSet(SecurityAction.Demand, Name="FullTrust")]

  [System.Runtime.InteropServices.ComVisibleAttribute(true)]

  public class Form1 : Form

   private WebBrowser webBrowser1 = new WebBrowser();

   private Button button1 = new Button();

   [STAThread]

   public static void Main()

   Application.EnableVisualStyles();

   Application.Run(new Form1());

   public Form1()

   button1.Text = "call script code from client code";

   button1.Dock = DockStyle.Top;

   button1.Click += new EventHandler(button1_Click);

   webBrowser1.Dock = DockStyle.Fill;

   Controls.Add(webBrowser1);

   Controls.Add(button1);

   Load += new EventHandler(Form1_Load);

   private void Form1_Load(object sender, EventArgs e)

   webBrowser1.AllowWebBrowserDrop = false;

   webBrowser1.IsWebBrowserCOntextMenuEnabled= false;

   webBrowser1.WebBrowserShortcutsEnabled = false;

   webBrowser1.ObjectForScripting = this;

   // Uncomment the following line when you are finished debugging.

   //webBrowser1.ScriptErrorsSuppressed = true;

   webBrowser1.DocumentText =

   "" +

   "";

   public void Test(String message)

   MessageBox.Show(message, "client code");

   private void button1_Click(object sender, EventArgs e)

   webBrowser1.Document.InvokeScript("test",

   new String[] { "called from client code" });

  // Navigates to the URL in the address box when

  // the ENTER key is pressed while the ToolStripTextBox has focus.

  private void toolStripTextBox1_KeyDown(object sender, KeyEventArgs e)

   if (e.KeyCode == Keys.Enter)

   Navigate(toolStripTextBox1.Text);

  // Navigates to the URL in the address box when

  // the Go button is clicked.

  private void goButton_Click(object sender, EventArgs e)

   Navigate(toolStripTextBox1.Text);

  // Navigates to the given URL if it is valid.

  private void Navigate(String address)

   if (String.IsNullOrEmpty(address)) return;

   if (address.Equals("about:blank")) return;

   if (!address.StartsWith(";

   !address.StartsWith("://"))

   address = ";

   try

   webBrowser1.Navigate(new Uri(address));

   catch (System.UriFormatException)

   return;

  // Updates the URL in TextBoxAddress upon navigation.

  private void webBrowser1_Navigated(object sender,

   WebBrowserNavigatedEventArgs e)

   toolStripTextBox1.Text = webBrowser1.Url.ToString();

  HtmlElement.DomElement 属性

  属性值

  元素的 COM IUnknown 指针,可以将其强制转换为 HTML 元素接口中的某一个接口,如 IHTMLElementwebbrowser

  备注

  HtmlElement 为 Internet Explorer 文档对象模型 (DOM) 的包装,它是用组件对象模型 (COM) 编写而成webbrowser。如果需要访问基础 COM 接口中的未公开

  属性或方法(如 IHTMLElement),可以使用此对象查询它们webbrowser

  为了使用非托管接口,需要将 MSHTML 库 (mshtml.dll) 导入到应用程序中webbrowser。但是,也可以使用 Invoke 方法执行未公开属性和方法。

  示例

  下面的代码示例使用非托管接口获取当前选定的文本,并使用由用户选择的 URL 将其转换为超链接webbrowser。编写此代码时,假定窗体拥有一个名为

  WebBrowser1 的 WebBrowser 控件,并假定已经以引用的形式将非托管 MSHTML 库添加到项目中webbrowser

  C#

  private void CreateHyperlinkFromSelection()

   if (webBrowser1.Document != null)

   mshtml.IHTMLDocument2 iDoc = (mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument;

   if (iDoc != null)

   mshtml.IHTMLSelectionObject iSelect = iDoc.selection;

   if (iSelect == null)

   MessageBox.Show("Please select some text before using this command.");

   return;

   mshtml.IHTMLTxtRange txtRange = (mshtml.IHTMLTxtRange)iSelect.createRange();

   // Create the link.

   if (txtRange.queryCommandEnabled("CreateLink"))

   Object o = null;

   txtRange.execCommand("CreateLink", true, o);

  

  使用webbrowser和mshtml.dll获取网页源代码的问题

  悬赏分:100 - 解决时间:2006-7-19 16:52

  我使用C#做一个程序,其中涉及到一个功能,在输入指定网址之后,需要获取html源代码进行分析webbrowser

  webbrowser我使用了webbrowser控件和mshtml.dll

  但是只能获取到普通页面的源代码

  一旦采集带有COOKIE控制的页面就会失败webbrowser

  谁能帮帮忙webbrowser

  我对于webbrowser的使用并不很清楚webbrowser,这个空间是否能直接获取html代码呢?

  mshtml.dll说是可以对html代码进行分析webbrowser。但如何使用?

  有谁能给出说明和源代码,感激不尽webbrowser

  问题补充:我使用以下代码获取webbrowser中的html,但是有个很奇怪的问题webbrowser。我每次点完按钮都会发现文本框中显示的html都不全,而且都把同一

  页面的html显示了很多遍webbrowser。如果页面内容较大则会引起程序死掉。

  为什么呢webbrowser

  提问者: willgo - 助理 二级 最佳答案

  private void button1_Click(object sender, System.EventArgs e) {

  object url=\"\";

  object nothing=null;

  this.axWebBrowser1.Navigate2(ref url,ref nothing,ref nothing,ref nothing,ref nothing);

  this.axWebBrowser1.DownloadComplete+=new System.EventHandler(this.button2_Click);

  private void button2_Click(object sender, System.EventArgs e) {

  this.textBox1.Text=\"\";

  mshtml.IHTMLDocument2 doc=(mshtml.IHTMLDocument2)this.axWebBrowser1.Document;

  mshtml.IHTMLElementCollection all=doc.all;

  System.Collections.IEnumerator enumerator=all.GetEnumerator();

  while(enumerator.MoveNext() && enumerator.Current!=null)

  mshtml.IHTMLElement element=(mshtml.IHTMLElement)(enumerator.Current);

  if(this.checkBox1.Checked==true)

  this.textBox1.Text+=\"\\r\\n\\r\\n\"+element.innerHTML;

  else

  this.textBox1.Text+=\"\\r\\n\\r\\n\"+element.outerHTML;

  注意 本例程中使用了一个未公开的GUID,其在将来的系统中可以发生变更webbrowser

    1、定义 IOleCommandTarget 接口

    为定义一个.NET接口以获得关于一个COM接口的参考,请遵从下列步骤:

    1) 赋予.NET接口相应的COM接口的GUID值;

    2) 包含对接口中所有方法的类型声明;

    3) 包含对Mshtml.dll和Shdocvw.dll文件的参考webbrowser,在Visual C# .NET工程中操作,请遵从:

    A. 在项目菜单下单击“添加引用”;

    B. 单击“COM” 选项卡;

    C. 双击“Microsoft HTML Object Library” 和“Microsoft Internet Controls”webbrowser


推荐阅读
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
author-avatar
碧后珍重
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有