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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.90409 の関連記事表示

<< 0 >>
■90409  VB.NETのHTMLDocumentイベントについて
□投稿者/ TanuTanu -(2019/03/08(Fri) 18:15:47)

    分類:[VB.NET/VB2005 以降] 

    VBAからVS2017に移行したVB.NET初心者です。

    VBAではHTMLDocumentのイベント処理は簡単に出来ましたが、

    VB.NETでは、Dim WithEvents doc As HTMLDocument ではイベント表示すらされません。

    これは出来ないってことなのでしょうか?

    宜しくお願いいたします。

    開発環境、使用言語:VS2017、VB.NET
親記事 /過去ログ156より / 関連記事表示
削除チェック/

■90410  Re[1]: VB.NETのHTMLDocumentイベントについて
□投稿者/ 魔界の仮面弁士 -(2019/03/08(Fri) 18:19:12)
    2019/03/08(Fri) 20:13:06 編集(投稿者)

    No90409 (TanuTanu さん) に返信
    > VBAではHTMLDocumentのイベント処理は簡単に出来ましたが、
    > VB.NETでは、Dim WithEvents doc As HTMLDocument ではイベント表示すらされません。

    System.Windows.Forms.HtmlDocument クラスをお使いでしょうか。
    その場合は、Click / Focusing/ MouseMove などの基本的なイベントを
    WithEvents や AddHandler で扱えるはずです。
    (HtmlWindow クラスなら、Load / Resize / Scroll イベント等)

    http://bbs.wankuma.com/index.cgi?mode=al2&namber=51775&KLOG=87


    その他のイベントの場合は、AttachEventHandler メソッドを試してみてください。
    (VBA 同様、ActiveX 版の HTMLDocument オブジェクトを利用することもできます)



    Public Class Form1
     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      WebBrowser1.Navigate("http://bbs.wankuma.com/index.cgi?mode=al2&namber=90409")
     End Sub

     Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
      Dim doc = WebBrowser1.Document
      doc.AttachEventHandler("onmousemove", Sub(o, arg) document_onmousemove(doc))
      doc.AttachEventHandler("onkeypress", Sub(o, arg) document_onkeypress(doc))
     End Sub

     Private Sub document_onmousemove(doc As HtmlDocument)
      Dim ev As New EventObject(doc.Window)
      Dim pt As New Point(ev.GetInt("x"), ev.GetInt("y"))
      Dim client As New Point(ev.GetInt("clientX"), ev.GetInt("clientY"))
      Dim offset As New Point(ev.GetInt("offsetX"), ev.GetInt("offsetY"))
      Dim src As Object = ev.Get("srcElement")

      TextBox1.Text = $"{pt}, {client}, {offset}, <{CallByName(src, "tagName", CallType.Get)}>"
     End Sub

     Private Sub document_onkeypress(doc As HtmlDocument)
      Dim ev As New EventObject(doc.Window)
      Dim altKey = CBool(ev.Get("altKey"))
      Dim ctrlKey = CBool(ev.Get("ctrlKey"))
      Dim shiftKey = CBool(ev.Get("shiftKey"))
      Dim keyCode As Char = ChrW(ev.GetInt("keyCode"))

      Dim s As String = keyCode
      If altKey Then s &= " + Alt"
      If ctrlKey Then s &= " + Ctrl"
      If shiftKey Then s &= " + Shit"

      TextBox2.Text = s
     End Sub
     Private Class EventObject
      Private ev As Object
      Public Sub New(win As HtmlWindow)
       ev = CallByName(win.DomWindow, "event", CallType.Get)
      End Sub
      Public Function [Get](memberName As String) As Object
       Return CallByName(ev, memberName, CallType.Get)
      End Function
      Public Function GetInt(memberName As String) As Integer
       Return CInt([Get](memberName))
      End Function
     End Class
    End Class
記事No.90409 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90411  Re[2]: VB.NETのHTMLDocumentイベントについて
□投稿者/ TanuTanu -(2019/03/08(Fri) 23:27:07)
    魔界の仮面弁士 様
    早速のご助言ありがとうございます。VBAの時は大変お世話になりました。
    まさか崇拝する魔界の仮面弁士 様からご助言頂けるとは思っていませんでしたので夢のようです。

    詳細を明記しますと 既に起動してあるIEをフック→WEBページダイアログが表示された後、マルチスレッド内にて
    下記サイトのGetIEDocumentでHTMLDocumentを取得しております。

    https://log.windows78.net/2015/06/1404/

    実施したい事は、上記WEBページダイアログをフックすることです。

    ご助言頂いたコードでWebBrowser1は使用しておりませんのでこの部分は使えないのかもしれませんが

    doc.AttachEventHandler("onmousemove", Sub(o, arg) document_onmousemove(doc))をfocusoutイベントにすれば
    何とかなりそうかなと考えております。

    本当は、WEBページダイアログのInternet Explorer_Serverをフックしたかったのですが小生の知識では不可能でした
    ので教えて頂いた内容で対応したいと思います。

    ありがとうございます。

記事No.90409 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90415  Re[3]: VB.NETのHTMLDocumentイベントについて
□投稿者/ 魔界の仮面弁士 -(2019/03/09(Sat) 13:56:42)
    No90411 (TanuTanu さん) に返信
    > VBAの時は大変お世話になりました。
    > まさか崇拝する魔界の仮面弁士 様からご助言頂けるとは思っていませんでしたので夢のようです。

    何の件でお世話したのかは記憶に無いですが (^_^;)
    お役に立てていたようであれば嬉しいです。


    > 下記サイトのGetIEDocumentでHTMLDocumentを取得しております。

    WM_HTML_GETOBJECT から COM インターフェイスを得られていて、
    そこから onfocusout イベントを拾いたいのであれば、

    (1) 参照設定で [COM] - "Microsoft HTML Object Library" を加える。

    (2) ソリューション エクスプローラーで 参照 の下にある MSHTML を
     選択して、プロパティの "相互運用型の埋め込み" を False にする。

    (3) Private WithEvents doc As mshtml.HTMLDocumentClass
     を宣言しておいて、
      doc = TryCast(GetIEDocument(p), mshtml.HTMLDocumentClass)
     とする。

    とすれば受け取れます。
記事No.90409 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90431  Re[4]: VB.NETのHTMLDocumentイベントについて
□投稿者/ TanuTanu -(2019/03/11(Mon) 11:10:11)
    魔界の仮面弁士 様

    ありがとうございます。
    無事、WEBページダイアログをフックする事に成功致しました。
    初心者なのでよく解りませんがTryCastはなくても動作しました。
    魔界の仮面弁士様のような神様にここまで詳しくご教授頂けた私は誠に幸せ者です;;

    過去に魔界の仮面弁士様に特に助けて頂いたコードは下記BBSのものになります。
    このコードにたどり着けなかったら今の私はいませんので、それ以来、魔界の仮面弁士様は
    私の中ではずっと神様です。
    http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200505/05050018.txt

    この度は本当にありがとうございました。
記事No.90409 のレス / END /過去ログ156より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -