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

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

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

Re[1]: コンソールアプリにてWebKitBrowserが動作しない


(過去ログ 136 を表示中)

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

■79914 / inTopicNo.1)  コンソールアプリにてWebKitBrowserが動作しない
  
□投稿者/ やんまー (14回)-(2016/05/27(Fri) 18:13:04)

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

度々申し訳ありません。

WebKitBrowserのNavigateが動かないようで、困っています。

Windowsフォームアプリケーションでは正常にNavigateされることを確認しています。

やりたいことは、httpアクセスして、ソースファイルを取得したいだけです。

もちろんWebcliantにてのソース取得方法も存じておりますが、
今回はWebKitです。

またIEコンポーネントは、メモリの解放方法がないため、使用しません。
(しかしながらIEコンポーネントのWebbrowserなら動く・・・)

ソースを取得したいだけでフォームは無駄なので、コンソールアプリでやってみようと思ったらとたんに動かず
何が原因なのかわかりません。エラーは発生しません。
Navigateを実行すると、Navigating・Navigated・DocumentCompletedが呼ばれるはずなのですが
(フォームアプリではそのようになる)
どれだけまっても呼び出されません。

なにか、ここが違うんじゃないかな?、というようなヒントでもアドバイスでもいいので教えていただけると助かります。


Module Program
	Sub Main()
		Console.Write("Press any key to continue . . . ")
		Console.ReadKey(True)
		
		'WebKitBrowser
		Dim wwebk As WebKit.WebKitBrowser
		wwebk = New WebKit.WebKitBrowser
		AddHandler wwebk.DocumentCompleted, AddressOf wwebkDocumentCompleted
		AddHandler wwebk.Navigated, AddressOf wwebkNavigated
		AddHandler wwebk.Navigating, AddressOf wwebkNavigating
		'以下を入れてみたけど・・・無意味?
		wwebk.Name="webkit"
		wwebk.Url=nothing
		wwebk.SuspendLayout
				
		wwebk.Navigate("http://www.yahoo.co.jp")
		
		'UserAgentやURLはセットされているのか?確認(セットはされている)
		Console.Write("navi . . . " & wwebk.UserAgent & " " & wwebk.Url.ToString)
		Console.ReadKey(True)
		
		'空になってしまう・・・
		Console.Write( wwebk.DocumentText )
		
		Console.Write("Press any key to continue . . . ")
		Console.ReadKey(True)
	End Sub
	
	'以下全く呼び出されない・・・実行されていないということ・・・??
	Sub wwebkDocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
		MsgBox("complete." & e.Url.ToString)
	End Sub
	Sub wwebkNavigated(sender As Object, e As WebBrowserNavigatedEventArgs)
		MsgBox("navigated." & e.Url.ToString)
	End Sub
	Sub wwebkNavigating(sender As Object, e As WebBrowserNavigatingEventArgs)
		MsgBox("navigating." & e.Url.ToString)
	End Sub
End Module

引用返信 編集キー/
■79916 / inTopicNo.2)  Re[1]: コンソールアプリにてWebKitBrowserが動作しない
□投稿者/ とっちゃん (362回)-(2016/05/27(Fri) 18:39:26)
No79914 (やんまー さん) に返信

WebKitBrowser は、System.Windows.Forms.UserControlから派生しているやつですよね?
であれば、メッセージループをまわしてやる必要があります。
sourceforge にあったクラス定義を見ただけなので詳細はわかりませんが、
STAじゃないとダメだと思います。

で、これをコンソールでやるのは不可能ではありませんが、ちょこちょこっと書いてというものじゃないので
素直にフォームアプリとして実装することをお勧めします。


引用返信 編集キー/
■79929 / inTopicNo.3)  Re[2]: コンソールアプリにてWebKitBrowserが動作しない
□投稿者/ やんまー (16回)-(2016/05/29(Sun) 21:09:29)
とっちゃん さん

お返事遅れてしまい申し訳ございません。

メッセージループ、というのを軽く調べてみたのですが、全くわからなかったので
フォームアプリで作ってみました。。。

実は、このコンソールアプリは本体のフォームアプリから複数回実行されるのですが、
コンソールアプリの時は完全にサイレントに実行できたのですが、
フォームアプリにしたら、若干の引っ掛かりが出てきてしまいました。ちょっと一瞬フォーカスが奪われる感じです。
わたしのアプリの作りが悪いのかと思い、
試しにnotepad.txtを呼び出してみましたら、同じでした。そのたびごとにマウスの砂時計が表示されてしまう感じです。



Dim psi As New System.Diagnostics.ProcessStartInfo()
psi.FileName = "notepad.exe"
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden
psi.UseShellExecute = true;
'アプリケーションを起動する
Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi)


こんな感じで呼び出すと、確かに何も表示されずタスクリストにだけはあるので、サイレントっぽいので。
しかしこれをループさせてみるとわかるのですが、
やっぱり重いのか、一瞬操作を奪われるというか、フォーカスを奪われたような感じにいま選択中のフォームが変化したりします。
(実際にはフォーカスは奪われません。)

しかし、これ、コンソールアプリの呼び出しであれば、本当にサイレントにすることが出来たのです。


Webkitをコンソールアプリで実行する、
何か実現のためのヒントでも良いので、ぜひよろしくお願いいたします・・・・


引用返信 編集キー/
■79930 / inTopicNo.4)  Re[3]: コンソールアプリにてWebKitBrowserが動作しない
□投稿者/ Azulean (645回)-(2016/05/29(Sun) 21:28:17)
No79929 (やんまー さん) に返信
> メッセージループ、というのを軽く調べてみたのですが、全くわからなかったので

Windows ではウィンドウが処理すべき操作、イベントなどを「ウィンドウメッセージ」と呼ばれる通知を出しています。
その通知を受け取り、処理すべきコードに引き渡すのが「メッセージループ」と言えます、おおざっぱには。


> Webkitをコンソールアプリで実行する、
> 何か実現のためのヒントでも良いので、ぜひよろしくお願いいたします・・・・

WebKit を使わないか、通信と HTML パースする部分だけ頑張って切り出すかじゃないですかね。
IE ベースの WebBrowser も、WebKit もウィンドウとして表示して動くように設計・実装されているのですから「サイレントに処理する」ことに向いていないと思われます。

イメージとしては .NET の WebClient クラス でしょうか。


// このまま邪道で進むなら ShowWithoutActivation といった方面かなぁ。
// http://stackoverflow.com/questions/156046/show-a-form-without-stealing-focus
引用返信 編集キー/
■79931 / inTopicNo.5)  Re[3]: コンソールアプリにてWebKitBrowserが動作しない
□投稿者/ とっちゃん (363回)-(2016/05/30(Mon) 10:34:15)
No79929 (やんまー さん) に返信
> とっちゃん さん
>
> 実は、このコンソールアプリは本体のフォームアプリから複数回実行されるのですが、
> コンソールアプリの時は完全にサイレントに実行できたのですが、
> フォームアプリにしたら、若干の引っ掛かりが出てきてしまいました。ちょっと一瞬フォーカスが奪われる感じです。
> わたしのアプリの作りが悪いのかと思い、
> 試しにnotepad.txtを呼び出してみましたら、同じでした。そのたびごとにマウスの砂時計が表示されてしまう感じです。
>
>
>
> Dim psi As New System.Diagnostics.ProcessStartInfo()
> psi.FileName = "notepad.exe"
> psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden
> psi.UseShellExecute = true;
> 'アプリケーションを起動する
> Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(psi)
>
マウスが変化するのは自分のウィンドウの中ですよね?

であれば、Process クラスが一時的に砂時計にしているなどがあるんだと思います。


>
> Webkitをコンソールアプリで実行する、
> 何か実現のためのヒントでも良いので、ぜひよろしくお願いいたします・・・・
>
単体で動くものだと思っていたのですが、子プロセスで動かしているのですか?
それは、別のプログラムになっていないとダメなものなのでしょうか?

共通処理という格好なら、DLLにするという手もあります。解析した結果などを変数データとして
取り出せたりするのでかなり楽です。

あとは、もっとディープに非表示のプロセスとプロセス間通信してやり取りするようにしておいて
アプリ起動時に裏でこっそり立ち上げるあるいは、一回目だけちょっと時間がかかるとかもありだと思います。

あるいは、もっとお手軽に、呼び出すフォーム上で画面に見えないようにWebkitを張り付けておいて
自分のウィンドウ内で処理してしまうという方法もあると思います。

Webkit に限りませんが、コントロールを非表示にしておけば、フォームのどこに貼っても画面には
見えませんし、フォーカスも受け取りません。

そういう方向もありだと思います。

引用返信 編集キー/
■80207 / inTopicNo.6)  Re[4]: コンソールアプリにてWebKitBrowserが動作しない
□投稿者/ やんまー (17回)-(2016/06/23(Thu) 00:47:46)
とっちゃん さん

お礼が遅くなってしまい申し訳ありません。

おっしゃるようにIPCでやってみようかと思ったのですが、
ちょっと詰まってしまったので、また改めて質問させていただきたいと思います。

ありがとうございました。
引用返信 編集キー/
■80209 / inTopicNo.7)  Re[1]: コンソールアプリにてWebKitBrowserが動作しない
□投稿者/ やんまー (19回)-(2016/06/23(Thu) 00:51:16)
No79914 (やんまー さん) に返信
> 度々申し訳ありません。
>
> WebKitBrowserのNavigateが動かないようで、困っています。
>
> Windowsフォームアプリケーションでは正常にNavigateされることを確認しています。
>
> やりたいことは、httpアクセスして、ソースファイルを取得したいだけです。
>
> もちろんWebcliantにてのソース取得方法も存じておりますが、
> 今回はWebKitです。
>
> またIEコンポーネントは、メモリの解放方法がないため、使用しません。
> (しかしながらIEコンポーネントのWebbrowserなら動く・・・)
>
> ソースを取得したいだけでフォームは無駄なので、コンソールアプリでやってみようと思ったらとたんに動かず
> 何が原因なのかわかりません。エラーは発生しません。
> Navigateを実行すると、Navigating・Navigated・DocumentCompletedが呼ばれるはずなのですが
> (フォームアプリではそのようになる)
> どれだけまっても呼び出されません。
>
> なにか、ここが違うんじゃないかな?、というようなヒントでもアドバイスでもいいので教えていただけると助かります。
>
>
> Module Program
> Sub Main()
> Console.Write("Press any key to continue . . . ")
> Console.ReadKey(True)
>
> 'WebKitBrowser
> Dim wwebk As WebKit.WebKitBrowser
> wwebk = New WebKit.WebKitBrowser
> AddHandler wwebk.DocumentCompleted, AddressOf wwebkDocumentCompleted
> AddHandler wwebk.Navigated, AddressOf wwebkNavigated
> AddHandler wwebk.Navigating, AddressOf wwebkNavigating
> '以下を入れてみたけど・・・無意味?
> wwebk.Name="webkit"
> wwebk.Url=nothing
> wwebk.SuspendLayout
>
> wwebk.Navigate("http://www.yahoo.co.jp")
>
> 'UserAgentやURLはセットされているのか?確認(セットはされている)
> Console.Write("navi . . . " & wwebk.UserAgent & " " & wwebk.Url.ToString)
> Console.ReadKey(True)
>
> '空になってしまう・・・
> Console.Write( wwebk.DocumentText )
>
> Console.Write("Press any key to continue . . . ")
> Console.ReadKey(True)
> End Sub
>
> '以下全く呼び出されない・・・実行されていないということ・・・??
> Sub wwebkDocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs)
> MsgBox("complete." & e.Url.ToString)
> End Sub
> Sub wwebkNavigated(sender As Object, e As WebBrowserNavigatedEventArgs)
> MsgBox("navigated." & e.Url.ToString)
> End Sub
> Sub wwebkNavigating(sender As Object, e As WebBrowserNavigatingEventArgs)
> MsgBox("navigating." & e.Url.ToString)
> End Sub
> End Module
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -