none
請問,如何抓取最前景視窗的URL?? RRS feed

  • 問題

  • 大家好~

    1)我想寫一個直接抓取系統的最前景視窗再去判斷他是否為IE、Firefox、Google Chrome等瀏覽器

    在抓取瀏覽器內的URL的程式。

    我在網路上有看到很多人寫的資料

    如這篇

    http://social.msdn.microsoft.com/Forums/zh-TW/233/thread/60008ace-b556-4d4c-92eb-1948f51aeb70

    還有小歐ou大寫的這篇

    http://www.dotblogs.com.tw/chou/archive/2010/01/11/12953.aspx

    跟Peter Pan大這篇

    http://social.msdn.microsoft.com/Forums/zh-TW/230/thread/73600ce6-f3cf-4f8f-bd73-37e8a9bdebd2

     

     // 取得目前 Shell 的所有視窗
     SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();
    foreach (SHDocVw.InternetExplorer ie in shellWindows)
    {
          // 判斷視窗是否為 iexplore
          if (Path.GetFileNameWithoutExtension(ie.FullName).ToLower().Equals("iexplore"))
             {
                 // 判斷此 Internet Explorer 是否為正在使用視窗[前景]
                 if (ie.HWND == GetForegroundWindow().ToInt32())
                 {
                     this.txtURL.Text = ie.LocationURL;
                 }
    
                 this.lbURL.Items.Add(ie.LocationURL);
             }
         }

     

    但是全都好像先抓取Shell的所有視窗再去判斷是否為IE在判斷是否為前景

    我想請問有沒有辦法可以直接抓取前景在判斷呢??因為要考慮使用者不一定用IE。


    2)請問SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();

    這一行是什麼意思呢??我是剛接觸C#所以不太懂。

     

    謝謝大家!! 感恩!! Wing

    2010年4月7日 上午 09:18

解答

  • 到 MSDN 搜尋 ShellWindowsClass 就有線上手冊可看。

    想要跨瀏覽器,只能靠 API ,配合 EnumChildWindow 跟 spy++ 依照瀏覽器各版本、各軟體公司建立規則,沒有後向相容或前向相容,做多少支援多少。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Wing King 2010年4月9日 上午 02:40
    2010年4月7日 下午 03:04
  • 針對你第2個問題回答:

    依照 http://www.omegacoder.com/?p=63 (Access Explorer and Internet Explorer in C# to Find Web Pages and Directories ) 一文中所提到的...

    " First step requires the access ShellWindows object which represents a collection of open windows in the system. To access that object which resides in the SHDocVw namespace we need to import a Com library Microsoft Internet Controls in to the project: "

     


    逐步學習,逐夢踏實;腳步要踩穩,這樣下一步才不會跌倒。 http://www.dotblogs.com.tw/nobel12
    • 已標示為解答 Wing King 2010年4月9日 上午 02:40
    2010年4月8日 上午 07:23

所有回覆

  • 到 MSDN 搜尋 ShellWindowsClass 就有線上手冊可看。

    想要跨瀏覽器,只能靠 API ,配合 EnumChildWindow 跟 spy++ 依照瀏覽器各版本、各軟體公司建立規則,沒有後向相容或前向相容,做多少支援多少。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Wing King 2010年4月9日 上午 02:40
    2010年4月7日 下午 03:04
  • 感謝~我馬上去找看看
    2010年4月8日 上午 02:09
  • 針對你第2個問題回答:

    依照 http://www.omegacoder.com/?p=63 (Access Explorer and Internet Explorer in C# to Find Web Pages and Directories ) 一文中所提到的...

    " First step requires the access ShellWindows object which represents a collection of open windows in the system. To access that object which resides in the SHDocVw namespace we need to import a Com library Microsoft Internet Controls in to the project: "

     


    逐步學習,逐夢踏實;腳步要踩穩,這樣下一步才不會跌倒。 http://www.dotblogs.com.tw/nobel12
    • 已標示為解答 Wing King 2010年4月9日 上午 02:40
    2010年4月8日 上午 07:23
  • TO  Nobel12 - 軋延油    

    感謝幫忙~

     

    不知道我理解的對不對,照 心冷熱情熄大跟Nobel12 - 軋延油大說的

    因IE的URL是Microsoft  Internet Controls物件,所以要跨瀏覽器還是只能靠API。


    Wing

    2010年4月8日 上午 08:28
  • 是...
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年4月8日 下午 02:55
  •  

    目前是這樣...


    逐步學習,逐夢踏實;腳步要踩穩,這樣下一步才不會跌倒。 http://www.dotblogs.com.tw/nobel12
    2010年4月9日 上午 01:15
  • 非常感謝兩位幫忙~

       Wing

    2010年4月9日 上午 02:41