IE9 WebbrowserコントロールでGmailのレイアウトが崩れる

VS.NET 2008でWebbrowserコントロールを使用して、Gmailを開くプログラムを使用していました。
以前はWindowsXPだったのでうまく表示されていましたが、Windows7でIE9になったら、レイアウトが崩れてしまうようになりました。

WebbrowserコントロールはユーザーエージェントがIE7として起動しているようです。
そのため、ユーザーエージェントをIE9に変更してやればうまく表示されるようになります。

レジストリエディタで、
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl
に、キー「FEATURE_BROWSER_EMULATION」を追加して、
その中にDWORD型で、プログラムのファイル名の値を作成し、値のデータを9999にします。

例えば、作成したプログラムが●●.exeだったら、
「FEATURE_BROWSER_EMULATION」に、「●●.exe」という値をDWORD型で作成し、9999にします。

これで、ユーザーエージェントはIE9に切り替わりますが、デバッグするときは、
「●●.exe」は、「●●.vshost.exe」と認識されているので、
「●●.vshost.exe」についても同様に設定します。

ちなみに、Gmailのログイン状態で、WebbrowserコントロールのURLに「https://mail.google.com/mail/#search/is%3Aunread」をすると、未読メッセージのみ表示されて便利です。
posted by VB.NET+MSDE+ActiveReports at 10:29 | Comment(4) | TrackBack(0) | WEB

VBScriptで、ショートカットを作成する

例えば、グーグルへのリンクをデスクトップに作る場合



Option Explicit

'デスクトップのフォルダ名のレジストリキー
Const REG_DESKTOP = _
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop"

'GoogleのURL
Const URL = "http://google.com/"

Dim objWsh
Dim objShortcut

Set objWsh = WScript.CreateObject("WScript.Shell")

Set objShortcut = objWshShell.CreateShortcut(objWshShell.RegRead(REG_DESKTOP) & "\Google.lnk")

With objShortcut
'URLを指定
.TargetPath = URL
'インターネットエクスプローラのアイコンを指定
.IconLocation = "C:\WINDOWS\system32\url.dll"
'保存
.Save
End With

Set objShortcut = Nothing
Set objWsh = Nothing



デスクトップのフォルダのパスには、ユーザー名が含まれているため
レジストリからパスを読み込みました。


posted by VB.NET+MSDE+ActiveReports at 15:53 | Comment(0) | TrackBack(0) | WEB

世界のアマゾンから一番安い本を探す


アマゾンは、日本、アメリカ、イギリス、ドイツ、フランス、カナダにあるので、
洋書を買うときに、世界のアマゾンで検索して、一番安いものを探す方法です。
見つけようとしたことがあります。
高額な本だと、送料を考慮しても、安くなることがあります。


以下のようなURLで、ドキュメントを取得します。
http://xml-[ロケール].amznxslt.com/onca/xml3?dev-t=[アクセスキーID]&t=[アソシエイトID]&type=heavy&offer=All&locale=[ロケール]&f=xml&AsinSearch=[ASIN]

[ロケール]は、日本はjp、アメリカはus、イギリスはuk、ドイツはde、フランスはfr、カナダはcaです。

取得したドキュメントはXMLなので、
以下のようにタグ名で金額を取得します。

        Dim xmlDoc As New XmlDocument()
        Dim xmlList As XmlNodeList
        Dim xmlElem As XmlElement
        Dim sTagName As String 'タグ名
        Dim sXMLSource As String '取得したXMLドキュメントの内容
        xmlDoc.LoadXml(sXMLSource)
        xmlList = xmlDoc.GetElementsByTagName(sTagName)
        If xmlList.Count > 0 Then
            xmlElem = xmlList(0)
            sValue = xmlElem.FirstChild.Value
        End If

タグ名は、OurPrice(アマゾンの価格)、UsedPrice(ユーズドの最低価格)、
CollectiblePrice(コレクターの最低価格)を調べて、一番安いものを見つけます。
これを各国で行って最低価格を見つけます。
アマゾンでプロマーチャント契約をしている人は、予約注文リストで、
洋書の予約注文のあるものを安く輸入して儲けることができるかもしれません。

posted by VB.NET+MSDE+ActiveReports at 19:03 | Comment(0) | TrackBack(0) | WEB

VB.NetでJavaScriptのクリックイベントを無理やりおこす

ヤフーメールに自動ログインという記事で、
VB.NETでIDとパスワードを入力して、
ログインボタンを押す方法を紹介しました。
その方法を使えば、いろいろなサイトにボタン1つで、ログインできる
ソフトを作ることができます。
自動でログインできると便利なので、いろいろ作っていると、
ヤフーメールに自動ログインのやり方では、ボタンをクリックできない場合があります。
ログインボタンが <INPUT>タグではなくて、hrefでJavaScriptの関数に
リンクしている場合、ヤフーメールに自動ログインのようにやってもうまくいきません。
IDとパスワードが入力できていれば、ログインボタンを押すだけなので、
だいぶ楽ができますが、ログイン後に、さらに自動入力したい場合は
面倒です。

その場合は、JavaScriptの関数の中身を見て、例えば、
            document.forms[0].submit()
となっていたら、
            Dim objeHTMLDoc As mshtml.HTMLDocument
            objeHTMLDoc.forms.item(0).submit()
とすると、ボタンをクリックしたときのイベントが発生します。
うまくいかない、場合はitem(0)をitem(1)とかitem(2)とか
やっているうちに正解が見つかります。

JavaScriptとVB.Netは少し似ているので、ソースを見比べて、
それらしいことをいろいろ試せば何とかなります。

posted by VB.NET+MSDE+ActiveReports at 17:53 | Comment(3) | TrackBack(0) | WEB

ライブドアのお天気プラグインを表示

ライブドアのお天気プラグインを表示する方法です。

JavaScriptですが、

<script language="javascript" charset="euc-jp" type="text/javascript" src="http://weather.livedoor.com/plugin/common/forecast/##.js"></script>
↑↑↑↑↑
これだけです。
##は地域ごとに違います。

例えば、東京都は 13 です。

すると、次のようになります。


VB.NETの場合、WEBブラウザコントロールで表示するか、
画像を表示します。

WEBブラウザコントロールはVB.NET2005しかついていません。

VB.NET2005なら、URIを指定して、ピクチャーボックスに表示することが可能です。
↓↓↓↓↓
ピクチャボックスに簡単に画像を表示する


VB.NET2002、VB.NET2003の場合は、URIから直接表示できないので
以下のようにします。

        Dim sURL As String
        Dim objeClient As New System.Net.WebClient()
        Dim objeStream As System.IO.Stream = objeClient.OpenRead(sURL)

        sURL = "http://image.weather.livedoor.com/component/img/plugin/weather_image/##.gif"
        PictureBox1.Image = Image.FromStream(objeStream)

        objeStream.Close()

[PR]の部分が表示できないので、やってはいけないかもしれません。

posted by VB.NET+MSDE+ActiveReports at 00:17 | Comment(0) | TrackBack(0) | WEB

ヤフーメールに自動ログイン

ヤフーメールに自動でログインする方法です。

ヤフーメールのアドレスが10個以上あるので作りました。
ログインのページを開いて、
IDとパスワードを入力して、
ログインボタンを押すだけです。

参照を二つ追加します。
[.NET] Microsoft.mshtml
[COM] Microsoft Internet Controls

        Dim objeBrowser As New SHDocVw.InternetExplorer()
        Dim iCol As mshtml.IHTMLElementCollection
        Dim iEle As mshtml.IHTMLElement
        Dim sString As String
        Dim sID As String 'Yahoo! JAPAN ID
        Dim sPass As String 'パスワード


        objeBrowser.Visible = True
        objeBrowser.Navigate("https://login.yahoo.co.jp/config/login_verify2?.src=ym", Nothing, Nothing, Nothing, Nothing)
        Do
        Loop Until Not objeBrowser.Busy
        Dim HTMLDoc As mshtml.HTMLDocument

        Do
        Loop Until Not objeBrowser.Busy

        HTMLDoc = objeBrowser.Document
        iCol = HTMLDoc.getElementsByTagName("input")
        'Yahoo! JAPAN ID============================
        For Each iEle In iCol
            If Not iEle.getAttribute("name") Is Nothing Then
                sString = iEle.getAttribute("name").ToString
                If sString = "login" Then
                    iEle.setAttribute("value", sID)
                    Exit For
                End If
            End If
        Next
        'パスワード=================================
        For Each iEle In iCol
            If Not iEle.getAttribute("name") Is Nothing Then
                sString = iEle.getAttribute("name").ToString
                If sString = "passwd" Then
                    iEle.setAttribute("value", sPass)
                    Exit For
                End If
            End If
        Next
        'ログイン====================================
        For Each iEle In iCol
            If Not iEle.getAttribute("type") Is Nothing Then
                sString = iEle.getAttribute("type").ToString
                If sString = "submit" Then
                    iEle.click()
                    Exit For
                End If
            End If
        Next
        Do
        Loop Until Not objeBrowser.Busy

ログインしていない状態で
次回からIDの入力を省略になっていない場合しか
考えていません。

posted by VB.NET+MSDE+ActiveReports at 16:19 | Comment(0) | TrackBack(0) | WEB