C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C#で現在開いているブラウザを取得するには


(過去ログ 122 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■72860 / inTopicNo.1)  C#で現在開いているブラウザを取得するには
  
□投稿者/ マサ (1回)-(2014/07/28(Mon) 21:56:14)

分類:[C#] 

C#で現在開いている、ブラウザ(IE)を取得するには
どのようにすれば良いのでしょうか?

スクリプトで書くと次のような感じです。
これをC#で書くとどのように記述すれば良いのでしょうか?
分かる方がいたら教えて下さい。

Dim oSH,oIE,oMyIE
Set oSH = CreateObject("Shell.Application")
Set oMyIE = Nothing
For Each oIE In oSH.Windows
If InStr(oIE.FullName,"iexplore.exe") > 0 Then
Set oMyIE = oIE
Exit For
End If
Next

If oMyIE Is Nothing Then Exit Sub
oMyIE.Navigate "http://www.yahoo.co.jp/"
Set oMyIE = Nothing
End Sub

引用返信 編集キー/
■72862 / inTopicNo.2)  Re[1]: C#で現在開いているブラウザを取得するには
□投稿者/ 魔界の仮面弁士 (56回)-(2014/07/28(Mon) 23:40:06)
No72860 (マサ さん) に返信
> C#で現在開いている、ブラウザ(IE)を取得するには
> どのようにすれば良いのでしょうか?

その VBScript の内容を、C# 4.0 の構文で置き換えるとこんな感じです。


using System;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;

namespace Sample
{
    class Program
    {
        static void Main()
        {
            Regex re = new Regex("iexplore\\.exe", RegexOptions.IgnoreCase);
            Guid CLSID_ShellWindows = new Guid("{9BA05972-F6A8-11CF-A442-00A0C90A8F39}");

            dynamic shellWindows = Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID_ShellWindows));
            dynamic oMyIE = null;

            foreach (var oIE in shellWindows)
            {
                string fullName = null;
                try { fullName = oIE.FullName; }
                catch (COMException ex)
                {
                    Console.WriteLine(ex.Message);
                }
                if (re.IsMatch(fullName)) { oMyIE = oIE; break; }
                else { Marshal.ReleaseComObject(oIE); }
            }

            if (oMyIE != null)
            {
                oMyIE.Navigate2("http://www.yahoo.co.jp/");
                Marshal.ReleaseComObject(oMyIE);
            }
        }
    }
}


元の VBScript コードでは、Shell.Application オブジェクトの
Windows メソッドを用いて ShellWindows オブジェクトを取得していますが、
上記ではそれを、Activator.CreateInstance を用いた手法に変更しています。
※ VBScript で言えば、「Set shellWindows = GetObject("new:9BA05972-F6A8-11CF-A442-00A0C90A8F39")」に相当。


ただし実際に使う場合は、SHDocVw.dll を参照設定し、「shellWindows = new ShellWindows();」で
インスタンス化した方が、コーディングは楽かと思います。.NET 4.0 未満の場合は特に。

引用返信 編集キー/
■72863 / inTopicNo.3)  Re[2]: C#で現在開いているブラウザを取得するには
□投稿者/ マサ (2回)-(2014/07/29(Tue) 00:31:09)
No72861 (魔界の仮面弁士 さん) に返信
> ■No72860 (マサ さん) に返信
>>C#で現在開いている、ブラウザ(IE)を取得するには
>>どのようにすれば良いのでしょうか?
>
> C# 3.0 以降であれば、こんな感じ。
> (2005 以下の場合は、SHDocVw.dll を参照設定した方が手っ取り早いかも)
>
>
> using System;
> using System.Runtime.InteropServices;
> using System.Text.RegularExpressions;
>
> namespace Sample
> {
> class Program
> {
> static void Main()
> {
> Regex re = new Regex("iexplore\\.exe", RegexOptions.IgnoreCase);
>
> dynamic shellWindows = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("{9BA05972-F6A8-11CF-A442-00A0C90A8F39}")));
> dynamic oMyIE = null;
>
> foreach (var oIE in shellWindows)
> {
> string fullName = null;
> try { fullName = oIE.FullName; }
> catch (COMException ex)
> {
> Console.WriteLine(ex.Message);
> }
> if (re.IsMatch(fullName)) { oMyIE = oIE; break; }
> else { Marshal.ReleaseComObject(oIE); }
> }
>
> if (oMyIE != null)
> {
> oMyIE.Navigate2("http://www.yahoo.co.jp/");
> Marshal.ReleaseComObject(oMyIE);
> }
> }
> }
> }

魔界の仮面弁士さん
ありがとうございました。

動作が上手くいきました。

コードについては、これから一つ一つ解読していこうと思います。

大変助かりました。
本当にありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -