2012.4 The robot lists
うーん ログになんかみたことないアドレス。
しかも、月に7860回もアクセスしていやがる。
.htaccessで拒否いれてやろうかと思いましたが(ドメインブロック)
.go.jpドメインを参照してとあるので
とりあえず様子見。
※後日whois.jpドメイン管理情報を閲覧して本当に
.go.jpか調べます。
[Domain Name] JGN-X.JP
[登録者名] 独立行政法人情報通信研究機構
あとは、定番のロボしかlogに載っていないので
今回の定期ログ検閲は、問題なし。
| ホスト名 host name |
gw.ucri.jgn-x.jp |
| IP |
- |
| ユーザーエージェント UserAgent |
ICC-Crawler/2.0 (Mozilla-compatible; ; http://kc.nict.go.jp/project1/crawl.html) |
| なんだろう
ね? |
|
| ホスト名 host name |
crawl-数字-数字-数字-数字.googlebot.com |
| IP |
- |
| ユーザーエージェント UserAgent |
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) |
| Google の自動サイトデータ収集ソフトウェア | |
| ホスト名 host name |
msnbot-数字-数字-数字-数字.search.msn.com |
| IP |
- |
| ユーザーエージェント UserAgent |
Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm |
| 前から
bing? だったかな? 以前は、これだったみたい。 msnbot/2.0b (+http://search.msn.com/msnbot.htm)._ |
|
アクセスの80%は検索エンジンですけど、
利用統計 トップ 30 of 45 国
をみると、いろんな国からアクセスがあるのですね。
遠くに住む日本の方がアクセスしている場合もあるようです。
カテゴリー: レンタルサーバーやcgi
2012.05.18
|
●アクセストレード お持ちのホームページ・メルマガで広告収入を得ることが出来ます。 |
GPSログの手動checksum再計算
通常のchecksumは、全部の合計ですが計算方法が違います。
$と*の間の文字を順番にxor演算します。
修正したいポイントの緯度経度は、
google earthでカーソル位置の情報をリアルタイムで知ることができるのでそれを参考にすると簡単です。
GPSログの緯度経度を手動で修正した場合の再計算などに使うと便利です。
機器にGPSログの修正機能が付属していない場合に
ちょっとここ微妙に違う!!
このわずかな ずれが気になる!!
というようなときに活躍します。
C/C++言語の場合は、 xor は ^ です。
for ( i = 0; i < strlen(s); i++ )
{
if ( (i == 0) && (s[0] == ''$'') )
{ continue; }
if (s[i] == ''*'')
{ break; }
sum = sum ^ s[i];
}
GPSの各行の仕様は、
GPS NMEA フォーマット
GPS NMEA 仕様
などで検索すると知ることができます。
finepixだと 1ポイントは、4行が1セットです。
$GPGGA,・・・
$GPGSA,・・・
$GPRMC,・・・
$GPVTG,・・・
執筆:2012.05.05
通常のchecksumは、全部の合計ですが計算方法が違います。
$と*の間の文字を順番にxor演算します。
修正したいポイントの緯度経度は、
google earthでカーソル位置の情報をリアルタイムで知ることができるのでそれを参考にすると簡単です。
GPSログの緯度経度を手動で修正した場合の再計算などに使うと便利です。
機器にGPSログの修正機能が付属していない場合に
ちょっとここ微妙に違う!!
このわずかな ずれが気になる!!
というようなときに活躍します。
| コード(Pascal言語) |
|
// GPSのログの行を手動変更した場合のchecksumの再計算など |
C/C++言語の場合は、 xor は ^ です。
for ( i = 0; i < strlen(s); i++ )
{
if ( (i == 0) && (s[0] == ''$'') )
{ continue; }
if (s[i] == ''*'')
{ break; }
sum = sum ^ s[i];
}
GPSの各行の仕様は、
GPS NMEA フォーマット
GPS NMEA 仕様
などで検索すると知ることができます。
finepixだと 1ポイントは、4行が1セットです。
$GPGGA,・・・
$GPGSA,・・・
$GPRMC,・・・
$GPVTG,・・・
カテゴリー: General
2012.05.05
|
●アクセストレード お持ちのホームページ・メルマガで広告収入を得ることが出来ます。 |
PTF DIFF 1.0.0.0-ベータ1
PTF形式
Panasonic製のナビの登録ポイント
2ファイル間の差分・保存アプリケーション
サイズ 約600Kbyte
開発版のためダウンロードできません。
執筆:2012.1.3
PTF形式
Panasonic製のナビの登録ポイント
2ファイル間の差分・保存アプリケーション
![]() |
| Version 1.0.0.0-ベータ1 snapshot 20120103 |
サイズ 約600Kbyte
開発版のためダウンロードできません。
カテゴリー: General
2012.01.04
|
●アクセストレード お持ちのホームページ・メルマガで広告収入を得ることが出来ます。 |
パナナビ ポイント登録データフォーマット( .PTF 編 ) メモ
執筆:2011.12.18
編集:2011.12.19
編集:2011.12.20
編集:2011.12.21
編集:2011.12.22
編集:2011.12.28
編集:2011.12.19
編集:2011.12.20
編集:2011.12.21
編集:2011.12.22
編集:2011.12.28
マイ メモ
※データを操作するに はバ イナリ操作に関する知識が必要です。
※データを参考にする 際 は、自己責任で参考になされてください。
※データの整合性はご自分で十分検 証なされてください。
※設定を間違ったり、データを編集したりするとナビが故 障・誤動作する恐れがあります。
ファイル拡張子: PTF
ファイル形式: バイナリデータ
| ポイン ト
ファイル ptf |
|
| ヘッダ 12バイト | データ1 データ2 .... データN |
» 続きを読む
カテゴリー: ぷろぐらみんぐ/メモ
2011.12.18
|
●アクセストレード お持ちのホームページ・メルマガで広告収入を得ることが出来ます。 |
sqlite.exe .dumpで文字化け 【& patch p2 編】
概要
・sqlite.exe の dumpにHEXモードを追加する方法
・sqlite の 「dump」と「インポート」の仕方
・sqlite の構築の仕方
・php PDO sqlite versionの自動選択手法
・ソースコードのダウンロード先
sqlite3に完全移行していたつもりだったのですが
今回、サーバーのDBファイルがあちこちのフォルダに散らばっているため
保存先を統一して整理した結果
version3シリーズへの移行をしていないデータがいくつかありました。
そして dumpすると ビープ音 ビ ビー。
インポートも書式エラーでできない始末。
もー、出力をエスケープしていないようです。
sqlite3に移行するのが目的なので、強引に HEXモードを加えました。
一緒に前回(昨年のパッチ1、set_table_name関数)の修正も入っています
sqlite3.exeの .dumpでは、BLOB型にしていれば、HEX出力されるようです。
とりあえず、
1個のDBを移行するのに使うだけで、
cygwinで動いて 、無事に移行できたのでよしとします。
執筆:2011.12.09
編集:2011.12.10
編集:2011.12.10
概要
・sqlite.exe の dumpにHEXモードを追加する方法
・sqlite の 「dump」と「インポート」の仕方
・sqlite の構築の仕方
・php PDO sqlite versionの自動選択手法
・ソースコードのダウンロード先
sqlite3に完全移行していたつもりだったのですが
今回、サーバーのDBファイルがあちこちのフォルダに散らばっているため
保存先を統一して整理した結果
version3シリーズへの移行をしていないデータがいくつかありました。
そして dumpすると ビープ音 ビ ビー。
インポートも書式エラーでできない始末。
もー、出力をエスケープしていないようです。
sqlite3に移行するのが目的なので、強引に HEXモードを加えました。
一緒に前回(昨年のパッチ1、set_table_name関数)の修正も入っています
sqlite3.exeの .dumpでは、BLOB型にしていれば、HEX出力されるようです。
とりあえず、
1個のDBを移行するのに使うだけで、
cygwinで動いて 、無事に移行できたのでよしとします。
» 続きを読む
カテゴリー: ぷろぐらみんぐ/データベース
2011.12.09
|
●アクセストレード お持ちのホームページ・メルマガで広告収入を得ることが出来ます。 |
エラー: "B005SR0OMY" is not a valid value for ItemId.
はぁ・・・
最近まで正常に表示されていたので
全くわかりませんでしたが、表示されなくなっていたので
あわわ・・・って急いで調べました。
1時間検索の末、やっと
エンドポイントが原因ということを書いているページがあったので
AWSECommerceServicePortJPというのが wsdlに記述されているので
そこの値を指定すると解決しました。
$AWS_wsdl_end_point = 'https://webservices.amazon.co.jp/onca/soap?Service=AWSECommerceService';
$client->__setLocation($AWS_wsdl_end_point);
wsdlは日本のurlから取得しているのになんでcomの値が入っているの?
って感じ。
まったく もう!!
はぁ・・・
最近まで正常に表示されていたので
全くわかりませんでしたが、表示されなくなっていたので
あわわ・・・って急いで調べました。
1時間検索の末、やっと
エンドポイントが原因ということを書いているページがあったので
AWSECommerceServicePortJPというのが wsdlに記述されているので
そこの値を指定すると解決しました。
$AWS_wsdl_end_point = 'https://webservices.amazon.co.jp/onca/soap?Service=AWSECommerceService';
$client->__setLocation($AWS_wsdl_end_point);
wsdlは日本のurlから取得しているのになんでcomの値が入っているの?
って感じ。
まったく もう!!
カテゴリー: レンタルサーバーやcgi
2011.11.09
|
●アクセストレード お持ちのホームページ・メルマガで広告収入を得ることが出来ます。 |
coreserverに移転しようと思っていたのですが
スクリプトが動きません。
最初は、パーミッションの問題と思いましたが
同じスクリプトでパラメーターによって
動いたり、エラーがでたりするので
表示されるとおりにしてみてみました。
AddType application/x-httpd-phpcgi-debug .php
をいれなさいと表示されるので いれると
ページ最後に
PHPで以下のエラーがでました。
*** glibc detected *** malloc(): memory corruption: 0x087f4090 ***
coreserver glibc detected malloc(): memory corruptionで検索すると
どうやら
これが原因らしい。
【要望フォーラム】PHPが使用しているlibxmlのバージョンのアップグレード
http://sb.xrea.com/showthread.php?t=13001
で スクリプトの先頭で phpinfo(); exit; してみる
Hostname:Port www.m33.coreserver.jp:80
dom
DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.6.19
うーん。
比較のためにさくらでも phpinfo(); してみる
dom
DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.7.3
あちゃー、xreaは、メンテの悪いサーバーってうわさは聞いていましたが
有料サービスもですか・・・。
2008年のサポート掲示板の件が 2011.11になっても更新されていないってことなので
先が見えないから、契約するのは ちょっと保留というか取りやめですね。
「契約するぞー!」モードだったので
非常に残念ですが、さくっとcoreserverのお試しをキャンセルさせていただきます。
メールウイルス検知は、
ウィルスメールに「****VIRUS****」という件名を加えます
という 件名表記だけにどん引きしましたが、
まぁ、それは、別にPCで受信時に検知できるので
なくてもOKなんです。
しかしですね、
xmlパースできないと困ります!!
DBが使えないより、最悪ですよ!!
もうさくらは、解約申請したので、継続できないから
もー ロリポしかないです。
よし、「コロリポ」「ロリポ」うーん。。。
どっちにしよう・・・。
スクリプトが動きません。
最初は、パーミッションの問題と思いましたが
同じスクリプトでパラメーターによって
動いたり、エラーがでたりするので
表示されるとおりにしてみてみました。
AddType application/x-httpd-phpcgi-debug .php
をいれなさいと表示されるので いれると
ページ最後に
PHPで以下のエラーがでました。
*** glibc detected *** malloc(): memory corruption: 0x087f4090 ***
coreserver glibc detected malloc(): memory corruptionで検索すると
どうやら
これが原因らしい。
【要望フォーラム】PHPが使用しているlibxmlのバージョンのアップグレード
http://sb.xrea.com/showthread.php?t=13001
で スクリプトの先頭で phpinfo(); exit; してみる
Hostname:Port www.m33.coreserver.jp:80
dom
DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.6.19
うーん。
比較のためにさくらでも phpinfo(); してみる
dom
DOM/XML enabled
DOM/XML API Version 20031129
libxml Version 2.7.3
あちゃー、xreaは、メンテの悪いサーバーってうわさは聞いていましたが
有料サービスもですか・・・。
2008年のサポート掲示板の件が 2011.11になっても更新されていないってことなので
先が見えないから、契約するのは ちょっと保留というか取りやめですね。
「契約するぞー!」モードだったので
非常に残念ですが、さくっとcoreserverのお試しをキャンセルさせていただきます。
メールウイルス検知は、
ウィルスメールに「****VIRUS****」という件名を加えます
という 件名表記だけにどん引きしましたが、
まぁ、それは、別にPCで受信時に検知できるので
なくてもOKなんです。
しかしですね、
xmlパースできないと困ります!!
DBが使えないより、最悪ですよ!!
もうさくらは、解約申請したので、継続できないから
もー ロリポしかないです。
よし、「コロリポ」「ロリポ」うーん。。。
どっちにしよう・・・。
» 続きを読む
カテゴリー: レンタルサーバーやcgi
2011.11.02
|
●アクセストレード お持ちのホームページ・メルマガで広告収入を得ることが出来ます。 |
flashのハンドルを取得してみよう。
TWebBrowser.HWNDを取得する方法 (メモ: その2)
flashのハンドルを取得してみよう。
【方法1】 : Tag名からリストアップする
【方法2】 : 子Windowから探す
flashオブジェクトが htmlの
最上位に貼り付けられている場合の例です。
※iframeなどに入っている場合は、下位階層まで追いかける必要があります。
※単一のflashが htmlに張り付いている場合。
使用例 : SetFocusする。
GetWindowHandleFromIDispatch関数については、
TWebBrowser.HWNDを取得する方法 (メモ: その1)
に書いてあります。
TWebBrowserで、どうしても入力フォーカスを当てたい際に役に立ちます。
flash以外の他のオブジェクトも同様に応用することができます。
さようなら Delphi
レッツゴー ドットネット
それいけ ドットネット
それいけ C#
執筆:2011.10.19
編集:2011.10.19
編集:2011.10.19
TWebBrowser.HWNDを取得する方法 (メモ: その2)
flashのハンドルを取得してみよう。
【方法1】 : Tag名からリストアップする
| var H : THandle; i : Integer; v_Doccument, v_elems , v_attr : Variant; s : string; begin v_Doccument := WebBrowser1.Document; if VarIsClear(v_Doccument) or ('Internet Explorer_Server' <> GetClassNameText(GetWindowHandleFromIDispatch(v_Doccument))) then begin Exit; end; v_elems := v_Doccument.getElementsByTagName('OBJECT'); if Not VarIsClear(v_elems) and (v_elems.length > 0) then begin s := 'count: '+IntToStr(v_elems.length) + sLineBreak; for i := 0 to v_elems.length -1 do begin v_attr := v_elems.Item(i).getAttribute('CLASSID'); if Not VarIsClear(v_attr) and (VarToStr(v_attr) = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000') then begin s := s + v_attr + sLineBreak; H := GetWindowHandleFromIDispatch(v_elems.Item(i)); s := s + ' HWND: ' + IntToStr(H) + sLineBreak + sLineBreak; end; end; ShowMessage(s); end; end; |
【方法2】 : 子Windowから探す
flashオブジェクトが htmlの
最上位に貼り付けられている場合の例です。
※iframeなどに入っている場合は、下位階層まで追いかける必要があります。
※単一のflashが htmlに張り付いている場合。
| function
SearchFlashHandle(p_hwnd : HWND) : HWND; var c_hwnd : HWND; begin Result := 0; c_hwnd := GetWindow(p_hwnd, GW_CHILD ); while (c_hwnd > 0) do begin // ClassName[MacromediaFlashPlayerActiveX] if (Pos('MacromediaFlashPlayerActiveX', GetClassNameText(c_hwnd)) = 1) then begin Result := c_hwnd; break; end; c_hwnd := GetWindow(c_hwnd, GW_HWNDNEXT ); end; end; |
使用例 : SetFocusする。
| h :=
GetWindowHandleFromIDispatch(WebBrowser1.Document); flash_handle := SearchFlashHandle(h); if (flash_handle > 0) then Windows.SetFocus(flash_handle); |
GetWindowHandleFromIDispatch関数については、
TWebBrowser.HWNDを取得する方法 (メモ: その1)
に書いてあります。
TWebBrowserで、どうしても入力フォーカスを当てたい際に役に立ちます。
flash以外の他のオブジェクトも同様に応用することができます。
さようなら Delphi
レッツゴー ドットネット
それいけ ドットネット
それいけ C#
カテゴリー: ぷろぐらみんぐ/メモ
2011.10.20
|
●アクセストレード お持ちのホームページ・メルマガで広告収入を得ることが出来ます。 |
TWebBrowser.HWNDを取得する方法 (メモ: その1)
今日は、
C#へレッツゴー
さぁ Delphiなんか捨てて みんなドットネットへ Go !!
それいけ ドットネット推進派 の 禁断のDelphiネタです。
次期Windows8 の 「Windows Developer Preview版」が無償公開 されていますが
もう みなさんは、お使いですか?
※OSのアンインストール機能がないそうなので、インス トールは気をつけてください
Visual Studio 11 Expressの同梱版もあり すごいお試し版OSです。
“Win RunTime(WinRT)”と呼ばれる新しいAPIが追加され
新しいデスクトップ“Metro”では、新しい“Metro”対応のアプリケーション(“Metro style apps”)
なんていうものが必要になるそうです。
キット古い開発環境とアプリを市場から強制排除したいのでしょうね。
もう、Visual Studio意外に開発環境の選択の余地がないって感じになってきましたね。
ということで、 ほらほら、 みんなドットネットへ Go !!
では、本題です。
TWebBrowser.HWNDへのアクセスは不正なエラーに なります。
WebBrowser1.Handleでいいようです。
構造
ページを表示するとコンテンツに応じて 上の3つが、階層構造で多様につながる。
iframeなどの要素があると多重構造になるようです。
※ コードを参考にする場合は、自己責任で参考にされてください。
※ 十分なテストが必要です。
※ 将来的に、仕様などの変更で利用できなくなることも考えられます。
【TWebBrowser.HWNDは、無効なプロパティ】
(MSDN 文書番号: 244310):
※要約 子WindowをたどっていくとHandleを取得することができます。
【HTML要素からhandleを取得する方法。】
擬似キー入力を送るコード:Function Key
擬似キー入力を送るコード:通常文字
ALT+F4(終了)を呼びたい場合は
WM_SYSKEYDOWN を使います
VK_F1
テキストボックスに文字列をいれるだけなら、
普通にgetElementsByNameやgetElementByIdなどで
要素にアクセスして代入した方が安全に入力できます。
普通にテキストボックスに入力する方法
( 応用例:ログインIDなどの自動入力 )
使い方は、基本的にJavaScriptと同じ。
【一番上のShell DocObject View の HWND 取得方法】
GetWindow(WebBrowser1.Handle, GW_CHILD )
※ ClassNameで、確認した方がいい 、 GW_HWNDNEXT
Navigateでフォルダを指定した場合、エクスプローラーが内蔵されるので注意。 SysListView32などが現れる。
【場所から取得する方法】
・ ChildWindowFromPoint関数を使用します。
ついでに、それいけみんなドットネットなので
C#で、ハンドルにメッセージを送る方法は
知らないので
[System.Runtime.InteropServices.DllImport("user32.dll")]
private extern static System.Boolean PostMessage(
System.IntPtr hWnd,
System.UInt32 Msg,
System.Int32 wParam,
System.Int32 lParam);
で回避することができる。
執筆:2011.10.17
編集:2011.10.17
編集:2011.10.17
今日は、
C#へレッツゴー
さぁ Delphiなんか捨てて みんなドットネットへ Go !!
それいけ ドットネット推進派 の 禁断のDelphiネタです。
次期Windows8 の 「Windows Developer Preview版」が無償公開 されていますが
もう みなさんは、お使いですか?
※OSのアンインストール機能がないそうなので、インス トールは気をつけてください
Visual Studio 11 Expressの同梱版もあり すごいお試し版OSです。
“Win RunTime(WinRT)”と呼ばれる新しいAPIが追加され
新しいデスクトップ“Metro”では、新しい“Metro”対応のアプリケーション(“Metro style apps”)
なんていうものが必要になるそうです。
キット古い開発環境とアプリを市場から強制排除したいのでしょうね。
もう、Visual Studio意外に開発環境の選択の余地がないって感じになってきましたね。
ということで、 ほらほら、 みんなドットネットへ Go !!
では、本題です。
TWebBrowser.HWNDへのアクセスは不正なエラーに なります。
WebBrowser1.Handleでいいようです。
構造
| |
ClassName | |
| 親 |
- Shell Embedding | ←
GetClassName(WebBrowser1.Handle) |
| 子 |
-- Shell DocObject View | 不明 |
| 孫 |
--- Internet Explorer_Server | ← 操作画面 解説URL |
iframeなどの要素があると多重構造になるようです。
※ コードを参考にする場合は、自己責任で参考にされてください。
※ 十分なテストが必要です。
※ 将来的に、仕様などの変更で利用できなくなることも考えられます。
【TWebBrowser.HWNDは、無効なプロパティ】
(MSDN 文書番号: 244310):
※要約 子WindowをたどっていくとHandleを取得することができます。
| ※ TWebBrowser.HWND |
Web ブラウザの Window ハンドルへのアクセスを提供します。 |
| ※ Delphiでは、TWebBrowser.HWNDは使えません。 | |
| コード | WebBrowser1.HWND; |
| 実行結果 | デバッガ例外通知 プロジェクト は例外クラス EOleException (メッセージ 'エラーを特定できません')を送出しました。 |
【HTML要素からhandleを取得する方法。】
| ハンドルを
直接要求する方法 |
|
| // [エラー] : E2010
'System.TGUID' と 'Ole2.TGUID' には互換性がありません const // From Ole2.pas IID_IOleWindow: TGUID = ( D1:$00000114;D2:$0000;D3:$0000;D4:($C0,$00,$00,$00,$00,$00,$00,$46)); function GetWindowHandleFromIDispatch(disp: IDispatch) : HWND; var h : hwnd; Res : HRESULT; oWin : IOleWindow; // Unit ActiveX.pas begin // example: GetWindowHandleFromIDispatch(WebBrowser1.Document) Result := 0; Res := disp.QueryInterface(IID_IOleWindow, oWin); if Succeeded(Res) then begin Res := OWin.GetWindow(h); if (SUCCEEDED(Res)) then Result := h; end; end; |
|
| 使 い 方 |
// Class : Internet
Explorer_Server h := GetHTMLObjectWindowHandle(WebBrowser1.Document); if (h > 0) then Windows.SetFocus(h); |
| (参考)正
規のhtml要素のfocusの使い方 |
|
| |
// HtmlElement から直接呼び出す場合 // HtmlElement.focus(); var v : Variant; begin v_Doccument := WebBrowser1.Document; if Not VarIsClear(v_Doccument) then v_Doccument.focus(); |
| |
var v_Doccument, v_elems : Variant; begin v_Doccument := WebBrowser1.Document; if VarIsClear(v_Doccument) then exit; v_elems := v_Doccument.getElementsByName('ここにhtml要素の名前'); if Not VarIsClear(v_elems) and (v_elems.length > 0) then v_elems.Item(0).focus(); |
擬似キー入力を送るコード:Function Key
| var H : THandle; begin h := GetWindowHandleFromIDispatch(WebBrowser1.Document); Windows.PostMessage(H , WM_KEYDOWN, VK_F1 , 0); |
擬似キー入力を送るコード:通常文字
| var H : THandle; begin h := GetWindowHandleFromIDispatch(WebBrowser1.Document); Windows.PostMessage(H , WM_CHAR, Byte('a') , 0); end; |
ALT+F4(終了)を呼びたい場合は
WM_SYSKEYDOWN を使います
| Windows.PostMessage(TargetHandle
, WM_SYSKEYDOWN , wParam, lParam); |
||
| wParam |
lParam |
|
| VK_F4 + ALT | VK_F4 |
1 shl 29 |
VK_F1
IEのF1(ヘルプ)の呼び出しは、反応しないのでわかりません。
Firefox系の他のブラウザでは反応します。
Firefox系の他のブラウザでは反応します。
テキストボックスに文字列をいれるだけなら、
普通にgetElementsByNameやgetElementByIdなどで
要素にアクセスして代入した方が安全に入力できます。
普通にテキストボックスに入力する方法
( 応用例:ログインIDなどの自動入力 )
| 例 v_elems.Item(0).innerText := 'abc'; |
|
| .innerText | |
| |
.innerHTML |
| コンボボックス (selectタグのoption要素) |
e.options[e.selectedIndex].text e.options[e.selectedIndex].value |
【一番上のShell DocObject View の HWND 取得方法】
GetWindow(WebBrowser1.Handle, GW_CHILD )
※ ClassNameで、確認した方がいい 、 GW_HWNDNEXT
Navigateでフォルダを指定した場合、エクスプローラーが内蔵されるので注意。 SysListView32などが現れる。
| function
GetWebBrowser_Root_ShellDocObject_Handle(AWebBrowser :
TWebBrowser) : hwnd; // Shell DocObject View var h : hwnd; begin h := GetWindow(AWebBrowser.Handle, GW_CHILD ); while (h > 0) do begin if (Pos('Shell DocObject View', GetClassNameText(h)) = 1) then begin Result := h; Break; end; h := GetWindow(h, GW_HWNDNEXT ); end; end; |
| function
GetWebBrowser_Root_IE_Server_Handle(AWebBrowser :
TWebBrowser) : hwnd; // Internet Explorer_Server var h : hwnd; h_child : hwnd; begin h := GetWindow(AWebBrowser.Handle, GW_CHILD ); while (h > 0) do begin if (Pos('Shell DocObject View', GetClassNameText(h)) = 1) then begin h_child := GetWindow(h, GW_CHILD ); while (h_child > 0) do begin if (Pos('Internet Explorer_Server', GetClassNameText(h_child)) = 1) then begin Result := h_child; break; end; h_child := GetWindow(h_child, GW_HWNDNEXT ); end; if (Result > 0) then Break; end; h := GetWindow(h, GW_HWNDNEXT ); end; end; |
【場所から取得する方法】
・ ChildWindowFromPoint関数を使用します。
ついでに、それいけみんなドットネットなので
C#で、ハンドルにメッセージを送る方法は
知らないので
[System.Runtime.InteropServices.DllImport("user32.dll")]
private extern static System.Boolean PostMessage(
System.IntPtr hWnd,
System.UInt32 Msg,
System.Int32 wParam,
System.Int32 lParam);
で回避することができる。
カテゴリー: General
2011.10.19
|
●アクセストレード お持ちのホームページ・メルマガで広告収入を得ることが出来ます。 |
C#で WebBrowserを使ってみよう(その1)
Delphiで作ると実行ファイルが大きくなるし、Tabで WebBrowserコ ントロール内に移動できないので
さぁ C#だー
はっはっはっ!
って 試験動作させると
瞬時に ずっこけました。
OnNewWindowで、Dispatchが設定したかったのです。
他にもいっぱいあるのですけど
NewWindowでDelphi相当の機能が実装されていないのです。
開くURLも取得できないし、Dispatchも設定できないなんて、酷い(ひどい)話です。
.Netには、なんの嫌がらせか知りませんが、本来つけておくべきイベントがたくさんないのです。
なんでもかんでも
新しいWindowで開くで、IEに送るのでは、WebBrowserを内蔵する意味がほとんどないでしょ。
(※IEに送るとセッションCookie?が引き継がれないから問題なんです。)
ということで、
.NetのWebBrowserを拡張して本来あるべきイベントを追加して対処しました。
参考にした フォーラム が型とか ウソ書いていたので
少し手間だったヨ。
◎よくできました
とりあえず、目的の動作をするようにしたのでので「よし」としよう。
【参考サイト】
執筆:2011.10.15
編集:2011.10.16
編集:2011.10.16
Delphiで作ると実行ファイルが大きくなるし、Tabで WebBrowserコ ントロール内に移動できないので
さぁ C#だー
はっはっはっ!
って 試験動作させると
瞬時に ずっこけました。
OnNewWindowで、Dispatchが設定したかったのです。
他にもいっぱいあるのですけど
NewWindowでDelphi相当の機能が実装されていないのです。
開くURLも取得できないし、Dispatchも設定できないなんて、酷い(ひどい)話です。
.Netには、なんの嫌がらせか知りませんが、本来つけておくべきイベントがたくさんないのです。
なんでもかんでも
新しいWindowで開くで、IEに送るのでは、WebBrowserを内蔵する意味がほとんどないでしょ。
(※IEに送るとセッションCookie?が引き継がれないから問題なんです。)
ということで、
.NetのWebBrowserを拡張して本来あるべきイベントを追加して対処しました。
| private void
exWebBrowser1_NewWindow3( object sender, WebBrowserExtendedNewWindow3EventArgs e) { // メモ // (1)e.pDisp に設定しない。新しいIEとして開く。 // (2)e.pDisp を設定する。指定したWebBrowserで開く。 // ※同じWebBrowserでは、e.pDispは、動作しない。 // (3)同じWebBrowserで開く。キャンセルNavigateを呼ぶ。 // ※POSTなどが失われるので注意。 // MessageBox.Show((string) e.URL); // open as self WebBrowser // e.Cancel = true; exWebBrowser1.Navigate((string) e.URL); // open as new WebBrowser // e.pDisp = exWebBrowser2.ActiveXInstance; } |
|
| // using
System.Runtime.InteropServices; public event EventHandler<WebBrowserExtendedNewWindow3EventArgs> NewWindow3; protected void OnNewWindow3( ... 省略 ..... 省略 [ComImport, Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch), TypeLibType(TypeLibTypeFlags.FHidden)] public interface DWebBrowserEvents2 { [DispId(273)] void NewWindow3( [In, Out, MarshalAs(UnmanagedType.IDispatch)] ref object pDisp, [In, Out] ref bool cancel, [In] ref object flags, [In] ref object URLContext, [In] ref object URL); } |
|
| 読者に作る機会を与え、動作原理を理解させるために あえて、完全なコードは開示していません。 不足分は、参考サイトを見ながら完成させましょう。 |
参考にした フォーラム が型とか ウソ書いていたので
少し手間だったヨ。
◎よくできました
とりあえず、目的の動作をするようにしたのでので「よし」としよう。
【参考サイト】
- webBrowserで別のウインドウで開くときの開く先のURLの取得法
とその中のリンク記事
(VSUG フォーラム → .NET 開発 → Visual C# → webBrowserで別のウインドウで開くときの開く先のURLの取得法) - MSDN Library for Visual Studio 2008
・CreateSink メソッド (使用例)
・他
カテゴリー: ぷろぐらみんぐ/メモ
2011.10.17
|
●アクセストレード お持ちのホームページ・メルマガで広告収入を得ることが出来ます。 |

