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

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

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

全過去ログを検索

<< 0 >>
■633  Re[3]: NO TITLE
□投稿者/ 中博俊 -(2005/06/18(Sat) 00:48:23)
>

    分類:[VB.NET] 

    んーもうちょっと論理的に整理しましょう。
    エラーメッセージは"こんなの"ではなく、確実にコピー&ペーストしてください。

    大体sqlの中身がそんなものとは・・・

    con.close()してますか?

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

■7142  Re[2]: フレンドクラスに対する代替案
□投稿者/ 囚人 -(2006/10/03(Tue) 19:59:32)

    分類:[C#] 

    internal で十分かな?
記事No.7138 のレス /0過去ログ7より / 関連記事表示
削除チェック/

■51616  Re[1]: truetransparencyみたいなソフトを作る
□投稿者/ よもやま -(2010/07/12(Mon) 12:32:53)
    No51592 (SHT さん) に返信
    > 開発環境;WindowsXPProfessionalSP3 , VisualBasic2008ExpressEdition
    > "truetransparency"みたいなソフトを作ることができますか?
    > まず、デスクトップ上のウィンドウのタイトルバーや、サイズ変更枠を消したりすることはできないですか?
    > 他、ウィンドウのタイトルを取得したり、ウィンドウの状態(ダイアログ、サイズ変更枠など)を取得したり、
    > ウィンドウの一覧を取得したりできませんか?
    いっぱいできませんか?がありますが
    どれからあなたはやってみたいですか?
記事No.51592 のレス /過去ログ86より / 関連記事表示
削除チェック/

■90557  Re[12]: AddHandler Eventの別スレッドについて
□投稿者/ PANG2 -(2019/03/21(Thu) 07:17:12)
    2019/03/21(Thu) 07:37:35 編集(投稿者)

    Private Sub IE_1_DownloadComplete() Handles IE_1.DownloadComplete
    DoSomething()
    End Sub

    で、何が問題あるのでしょうか?

    また、NewWindowイベントなら第一引数で別窓をつかめるはずです。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90558  Re[12]: AddHandler Eventの別スレッドについて
□投稿者/ 魔界の仮面弁士 -(2019/03/21(Thu) 10:39:08)
    No90556 (TanuTanu さん) に返信
    > invokeが気になったので調べてみたら2008年に魔界の仮面弁士 様が回答している件
    > がまさに私が悩んでる案件かも知れません。

    そもそも何故、UI スレッドとワーカースレッドの間でのやり取りを必要としているのでしょうか。
    わざわざスレッドを立ち上げずとも、イベントドリブンな非同期実装にするだけで良いと思うのですが。

    もしもスレッドを分けるとしても、複数のスレッドでやりとりしようとせず、
    取得から操作までを同一のスレッドで行うべきかと。



    それと、IE 側から切断されたまま使おうとすると、COMException や InvalidComObjectException に
    陥る可能性がありますので、ShellWindows を列挙した後、そのウィンドウが閉じられた場合に備えて、
    OnQuit イベントを捕らえておくことをお奨めします。



    No90557 (PANG2 さん) に返信
    > NewWindowイベントなら第一引数で別窓をつかめるはずです。

    COM 版の NewWindow イベント だとしたら、第一引数は URL のはず。
     ' DWebBrowserEvents::NewWindow
     ' void NewWindow(BSTR URL, long Flags, BSTR TargetFrameName, VARIANT* PostData, BSTR Headers, [in, out] VARIANT_BOOL* Processed);
     Sub NewWindow(URL As String, Flags As Integer, TargetFrameName As String, ByRef PostData As Object, Headers As String, ByRef Processed As Boolean)


    使うとすれば、NewWindow2 イベントか
     ' DWebBrowserEvents2::NewWindow2
     ' void NewWindow2([in, out] IDispatch** ppDisp, [in, out] VARIANT_BOOL* Cancel);
     Sub NewWindow2(ByRef ppDisp As Object, ByRef Cancel As Boolean)


    もしくは NewWindow3 イベントが良さそうです。
     ' DWebBrowserEvents2::NewWindow3
     ' void NewWindow3([in, out] IDispatch **ppDisp, [in, out] VARIANT_BOOL *Cancel, /* NWMF */ DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl);
     Sub NewWindow3(ByRef ppDisp As Object, ByRef Cancel As Boolean, dwFlags As UInteger, bstrUrlContext As String, bstrUrl As String)
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/

■90583  Re[13]: AddHandler Eventの別スレッド
□投稿者/ TanuTanu -(2019/03/22(Fri) 12:36:15)
    2019/03/22(Fri) 12:40:09 編集(投稿者)

    魔界の仮面弁士 様
    PANG2 様

    お世話になっております。
    恐れ入りますが、ご教授頂きたく存じます。

    ■90547の件 INVOKEを使いたいのですが小生の知識では上手く動作させる事が出来ませんでした;;
    どのように記述すれば良いのでしょうか?

    Private Function WebDisp_click(ByVal e As mshtml.IHTMLEventObj) As Boolean
    MsgBox("webDisp_onclick", MsgBoxStyle.SystemModal)
    Return CBool(Invoke(CallByName(btnYoinTehai_Button_onclick, "[DispId=0]", CallType.Method, e))) 
    End Function

    エラー内容
    System.InvalidCastException
    Message=型 'System.__ComObject' の COM オブジェクトをクラス型 'System.Delegate' にキャストできません。
    COM コンポーネントを表す型のインターフェイスを COM コンポーネントを表さない型にキャストすることはできません。
    ただし、基になる COM コンポーネントがインターフェイスの IID の QueryInterface 呼び出しをサポートする場合は、
    インターフェイスにキャストすることができます。

    ■90558の件 スレッドを分ける理由について

    ビギナーですので出来ればイベントドリブンな非同期実装や同一スレッドで組みたいのですが方法が解りません。

    WEBページのボタンを手動クリック⇒DownloadCompleteを捕まえて重い処理させるとWEBページダイアログが重い処理終了しないと表示されない為、
    DownloadCompleteで別スレッドにしようと考えました。


    ■90557の件 下記を試しましたが、GetIEDocument(hWnd_IES)にてハンドル取得出来ませんでした。

    Private Sub IE_1_DownloadComplete() Handles IE_1.DownloadComplete
    DoSomething()
    End Sub

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




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

■90589  Re[14]: AddHandler Eventの別スレッド
□投稿者/ 魔界の仮面弁士 -(2019/03/22(Fri) 15:03:37)
    No90588 (PANG2 さん) に返信
    > DocumentCompletedを使うとか。

    DocumentComplete イベントですね。名前は似ていますが、
    DocumentCompleted はマネージ版 WebBrowser のイベントです。


    No90583 (TanuTanu さん) に返信
    > ■90547の件 INVOKEを使いたいのですが小生の知識では上手く動作させる事が出来ませんでした;;
    使う方法はありますが、そもそも今回の要件では、
    無理にスレッドを分けるべきではないように思います。


    > Message=型 'System.__ComObject' の COM オブジェクトをクラス型 'System.Delegate' にキャストできません。
    Invoke の引数にはデリゲートインスタンスを渡す必要があります。ラムダ式でも良いですが。
    手っ取り早いのは、そのメソッド自身を AddressOf で呼びなおすとか。
    https://www.atmarkit.co.jp/ait/articles/0506/17/news111.html


    > ■90558の件 スレッドを分ける理由について
    > ビギナーですので出来ればイベントドリブンな非同期実装や同一スレッドで組みたいのですが方法が解りません。
    ビギナーなら尚の事、イベント駆動型の開発スタイルで組むことをお奨めします。
    現状の理解度でスレッドセーフな設計を組むのは難易度が高すぎるかと。


    > WEBページのボタンを手動クリック⇒DownloadCompleteを捕まえて重い処理させるとWEBページダイアログが重い処理終了しないと表示されない為、
    > DownloadCompleteで別スレッドにしようと考えました。

    DownloadComplete は Document の取得とは無関係ですよね。
    DocumentComplete では駄目でしょうか?
    https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa752084%28v=vs.85%29#events

    DocumentComplete では期待する結果が得られない場合(Refresh 時など)は、
    PANG2 さんも指摘されていたように、Timer を併用することも検討してみてください。



    > ■90557の件 下記を試しましたが、GetIEDocument(hWnd_IES)にてハンドル取得出来ませんでした。
    取得できないというのは、具体的にはどういう状況でしょうか。

    その処理を呼び出す前の、hWnd_IES を取得する処理に問題が生じているのか、
    hWnd_IES は得ているが、それが指し示すウィンドウが失われている状態なのか、
    SendMessageTimeout がタイムアウトしてゼロを返してくるのか、
    SendMessageTimeout は成功しているけれど ObjectFromLresult が失敗しているのか、
    ObjectFromLresult まで成功したけれど、想定外していたオブジェクトではないのか…。

    あるいはそもそも、GetIEDocument を呼び出すところまで辿りつけていない状態なのか。


    なお GetIEDocument では、hWnd_IES 配下に複数の "Internet Explorer_Server" が
    存在していた場合を考慮した実装になっていないように見えます。最初に見つかったものが
    目的のウィンドウであるかどうかを確認するための機構も用意されていないようですし。

    ビギナーであるというのなら、無闇に API に頼ることはおすすめできません。

    以前にも指摘していますが、New SHDocVw.ShellWindows() あるいは
    CreateObject("Shell.Application").Windows を For Each して InternetExplorer を列挙し、
    そのイベントやプロパティを通じて操作することをお奨めします。
記事No.90434 のレス /過去ログ156より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -