<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Internet Explorer</title><link>http://blogs.wankuma.com/rapt/category/1622.aspx</link><description>Internet Explorer</description><managingEditor>RAPT</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>RAPT</dc:creator><title>IE7 以降で HttpOpenRequest() API が エラーコード 12006 で失敗する件</title><link>http://blogs.wankuma.com/rapt/archive/2009/01/14/166330.aspx</link><pubDate>Wed, 14 Jan 2009 02:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/rapt/archive/2009/01/14/166330.aspx</guid><wfw:comment>http://blogs.wankuma.com/rapt/comments/166330.aspx</wfw:comment><comments>http://blogs.wankuma.com/rapt/archive/2009/01/14/166330.aspx#Feedback</comments><slash:comments>1462</slash:comments><wfw:commentRss>http://blogs.wankuma.com/rapt/comments/commentRss/166330.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/rapt/services/trackbacks/166330.aspx</trackback:ping><description>&lt;p&gt;IE7 以降で &lt;strong&gt;HttpOpenRequest&lt;/strong&gt;() API が エラーコード 12006 で失敗する件&lt;/p&gt;
&lt;p&gt;プログラム上からインターネットに接続して直接ファイルをダウンロードしたい場合などに、&lt;strong&gt;InternetOpen&lt;/strong&gt;/&lt;strong&gt;InternetConnect&lt;/strong&gt;/&lt;strong&gt;HttpOpenRequest&lt;/strong&gt; API を使って下記のようなコードを使用すると思うが、このコードは IE6 以前では問題なく動作するが、IE7 以降では失敗する。&lt;/p&gt;
&lt;DIV style="BORDER-RIGHT: blue 1px solid; PADDING-RIGHT: 1em; BORDER-TOP: blue 1px solid; PADDING-LEFT: 1em; PADDING-BOTTOM: 0.5em; BORDER-LEFT: blue 1px solid; PADDING-TOP: 0.5em; BORDER-BOTTOM: blue 1px solid; BACKGROUND-COLOR: white"&gt;&lt;p&gt;&lt;code&gt;&lt;font color='#ff00ff'&gt;HINTERNET&lt;/font&gt; hSession = ::InternetOpen( &lt;font color='#ff00ff'&gt;_T&lt;/font&gt;( &lt;font color='#ff0000'&gt;&amp;quot;UserAgent&amp;quot;&lt;/font&gt; ), INTERNET_OPEN_TYPE_PRECONFIG, &lt;font color='#ff00ff'&gt;NULL&lt;/font&gt;, &lt;font color='#ff00ff'&gt;NULL&lt;/font&gt;, &lt;font color='#ff0000'&gt;0&lt;/font&gt; );&lt;br&gt;
&lt;font color='#ff00ff'&gt;HINTERNET&lt;/font&gt; hConnect = ::InternetConnect( hSession, &lt;font color='#ff00ff'&gt;_T&lt;/font&gt;( &lt;font color='#ff0000'&gt;&amp;quot;www.example.com&amp;quot;&lt;/font&gt; ), &lt;font color='#ff0000'&gt;80&lt;/font&gt;, &lt;font color='#ff00ff'&gt;NULL&lt;/font&gt;, &lt;font color='#ff00ff'&gt;NULL&lt;/font&gt;, INTERNET_SERVICE_HTTP, &lt;font color='#ff0000'&gt;0&lt;/font&gt;, &lt;font color='#ff0000'&gt;0&lt;/font&gt; );&lt;br&gt;
&lt;font color='#ff00ff'&gt;HINTERNET&lt;/font&gt; hRequest = ::HttpOpenRequest( hConnect, &lt;font color='#ff00ff'&gt;_T&lt;/font&gt;( &lt;font color='#ff0000'&gt;&amp;quot;GET&amp;quot;&lt;/font&gt; ), &lt;font color='#ff00ff'&gt;_T&lt;/font&gt;( &lt;font color='#ff0000'&gt;&amp;quot;/~user/path/file.txt&amp;quot;&lt;/font&gt; ), &lt;font color='#ff00ff'&gt;NULL&lt;/font&gt;, &lt;font color='#ff00ff'&gt;_T&lt;/font&gt;( &lt;font color='#ff0000'&gt;&amp;quot;Referrer&amp;quot;&lt;/font&gt; ), &lt;font color='#ff00ff'&gt;NULL&lt;/font&gt;, INTERNET_FLAG_DONT_CACHE, &lt;font color='#ff0000'&gt;0&lt;/font&gt; );&lt;br&gt;
&lt;font color='#0000ff'&gt;if&lt;/font&gt; ( hRequest == &lt;font color='#ff00ff'&gt;NULL&lt;/font&gt; ) {&lt;br&gt;
&amp;nbsp; &amp;nbsp; &lt;font color='#ff00ff'&gt;DWORD&lt;/font&gt; dwError = ::GetLastError();&lt;br&gt;
&amp;nbsp; &amp;nbsp; &lt;font color='#0000ff'&gt;if&lt;/font&gt; ( dwError == ERROR_INTERNET_UNRECOGNIZED_SCHEME &lt;font color='#008000'&gt;/*12006*/&lt;/font&gt; ) {&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color='#ff00ff'&gt;ATLTRACE&lt;/font&gt;( &lt;font color='#ff00ff'&gt;_T&lt;/font&gt;( &lt;font color='#ff0000'&gt;&amp;quot;スキームが認識できないエラー\n&amp;quot;&lt;/font&gt; ) );&lt;br&gt;
&amp;nbsp; &amp;nbsp; }&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;font color='#008000'&gt;// (snip)&lt;/font&gt;&lt;br&gt;
&lt;br&gt;
::InternetCloseHandle( hRequest );&lt;br&gt;
::InternetCloseHandle( hConnect );&lt;br&gt;
::InternetCloseHandle( hSession );&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;原因は、&lt;strong&gt;HttpOpenRequest&lt;/strong&gt;() でリファラに「Referrer」と記述しているがこの形式が「スキーム:識別子」の形式になっていないことによるものらしい。これをたとえば「myscheme:Referrer」に変更することで上記コードは IE7 以降でも正常に動作する。&lt;/p&gt;
&lt;p&gt;なぜ IE7 以降で動作しなくなったかは不明だが、これにはかなりハマったので記事にして残しておくことにした。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/rapt/aggbug/166330.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>RAPT</dc:creator><title>IE8 Beta2 で User-Agent が変更できない問題</title><link>http://blogs.wankuma.com/rapt/archive/2009/01/14/166328.aspx</link><pubDate>Wed, 14 Jan 2009 02:21:00 GMT</pubDate><guid>http://blogs.wankuma.com/rapt/archive/2009/01/14/166328.aspx</guid><wfw:comment>http://blogs.wankuma.com/rapt/comments/166328.aspx</wfw:comment><comments>http://blogs.wankuma.com/rapt/archive/2009/01/14/166328.aspx#Feedback</comments><slash:comments>32</slash:comments><wfw:commentRss>http://blogs.wankuma.com/rapt/comments/commentRss/166328.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/rapt/services/trackbacks/166328.aspx</trackback:ping><description>&lt;p&gt;IE8 Beta2 で User-Agent が変更できない問題&lt;/p&gt;
&lt;p&gt;今更ネタにするものでもないけど、去年の夏に IEβニュースグループに投稿した記事と同じ内容をここにも書いておく。&lt;/p&gt;
&lt;p&gt;VC6/VC2003 で Trident コンポーネントを使ったプログラムを作成しているときの話。&lt;br&gt;
プログラム上で User-Agent を変更して接続するために &lt;strong&gt;UrlMkSetSessionOption&lt;/strong&gt;( URLMON_OPTION_USERAGENT ) API を使用しているが、IE8β2 では正常に動作しない。&lt;/p&gt;
&lt;p&gt;下記のサンプルコードは IE4 以降の環境では正常に動作するが、IE8 では &lt;strong&gt;UrlMkSetSessionOption&lt;/strong&gt; は正常終了(S_OK) を返すものの効果がない。&lt;/p&gt;
&lt;div style="padding: 0.5em 1em; border: 1px solid blue; background-color: white;"&gt;&lt;p&gt;&lt;code&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt; ChangeUserAgentTest()&lt;br&gt;
{&lt;br&gt;
&amp;nbsp; &amp;nbsp; &lt;font color="#0000ff"&gt;char&lt;/font&gt; lpaUserAgent[ &lt;font color="#ff0000"&gt;1024&lt;/font&gt; ] = &lt;font color="#ff0000"&gt;"test user-agent"&lt;/font&gt;;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &lt;font color="#ff00ff"&gt;DWORD&lt;/font&gt; dwLength = lstrlenA( lpaUserAgent );&lt;br&gt;
&amp;nbsp; &amp;nbsp; &lt;font color="#ff00ff"&gt;HRESULT&lt;/font&gt; hr = ::UrlMkSetSessionOption( URLMON_OPTION_USERAGENT, lpaUserAgent, dwLength, &lt;font color="#ff0000"&gt;0&lt;/font&gt; );&lt;br&gt;
&amp;nbsp; &amp;nbsp; &lt;font color="#ff00ff"&gt;CString&lt;/font&gt; strMsg;&lt;br&gt;
&amp;nbsp; &amp;nbsp; strMsg.Format( &lt;font color="#ff00ff"&gt;_T&lt;/font&gt;( &lt;font color="#ff0000"&gt;"UrlMkSetSessionOption: 0x%08x"&lt;/font&gt; ), hr );&lt;br&gt;
&amp;nbsp; &amp;nbsp; ::MessageBox( &lt;font color="#ff00ff"&gt;NULL&lt;/font&gt;, strMsg, &lt;font color="#ff00ff"&gt;_T&lt;/font&gt;( &lt;font color="#ff0000"&gt;"[debug - 1]"&lt;/font&gt; ), MB_OK );&lt;br&gt;
&amp;nbsp; &amp;nbsp; &lt;font color="#0000ff"&gt;if&lt;/font&gt; ( hr == &lt;font color="#ff00ff"&gt;S_OK&lt;/font&gt; ) {&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color="#ff00ff"&gt;DWORD&lt;/font&gt; dwSize = &lt;font color="#ff0000"&gt;1023&lt;/font&gt;;&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;font color="#0000ff"&gt;char&lt;/font&gt; lpaString[ &lt;font color="#ff0000"&gt;1024&lt;/font&gt; ] = {&lt;font color="#ff0000"&gt;0&lt;/font&gt;};&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hr = ::ObtainUserAgentString( &lt;font color="#ff0000"&gt;0&lt;/font&gt;, lpaString, &amp;amp;dwSize );&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; strMsg.Format( &lt;font color="#ff00ff"&gt;_T&lt;/font&gt;( &lt;font color="#ff0000"&gt;"ObtainUserAgentString: 0x%08x\n%s"&lt;/font&gt; ), hr, &lt;font color="#ff00ff"&gt;CString&lt;/font&gt;( lpaString ) );&lt;br&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ::MessageBox( &lt;font color="#ff00ff"&gt;NULL&lt;/font&gt;, strMsg, &lt;font color="#ff00ff"&gt;_T&lt;/font&gt;( &lt;font color="#ff0000"&gt;"[debug - 2]"&lt;/font&gt; ), MB_OK );&lt;br&gt;
&amp;nbsp; &amp;nbsp; }&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;最初のメッセージは成功を返す。&lt;br&gt;---------------------------&lt;br&gt;[debug - 1]&lt;br&gt;---------------------------&lt;br&gt;UrlMkSetSessionOption: 0x00000000&lt;br&gt;---------------------------&lt;br&gt;OK&lt;br&gt;---------------------------&lt;/p&gt;
&lt;p&gt;二番目ののメッセージも成功を返す。&lt;br&gt;---------------------------&lt;br&gt;[debug - 2]&lt;br&gt;---------------------------&lt;br&gt;ObtainUserAgentString: 0x00000000&lt;br&gt;test user-agent&lt;br&gt;---------------------------&lt;br&gt;OK&lt;br&gt;---------------------------&lt;/p&gt;
&lt;p&gt;しかしながら、ウェブサイトにアクセスすると、サーバー変数は下記の値を返す:&lt;br&gt;&lt;strong&gt;&lt;font color="#006400"&gt;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;IE8 より前では下記の値を返す:&lt;br&gt;&lt;strong&gt;&lt;font color="#006400"&gt;test user-agent&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ひょっとしたら IE8 以降で User-Agent を変更するための手順が変更されたのか、とも思ったがバグの可能性が高い。&lt;/p&gt;
&lt;p&gt;この API は、urlmon.dll に含まれているため、一般プログラマからは何もできなさげ。&lt;br&gt;正式版までに解決してくれていることを願うばかり。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/rapt/aggbug/166328.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>RAPT</dc:creator><title>(2/13) 自動更新による Internet Explorer 7 の配布開始</title><link>http://blogs.wankuma.com/rapt/archive/2008/01/23/118955.aspx</link><pubDate>Wed, 23 Jan 2008 23:59:00 GMT</pubDate><guid>http://blogs.wankuma.com/rapt/archive/2008/01/23/118955.aspx</guid><wfw:comment>http://blogs.wankuma.com/rapt/comments/118955.aspx</wfw:comment><comments>http://blogs.wankuma.com/rapt/archive/2008/01/23/118955.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/rapt/comments/commentRss/118955.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/rapt/services/trackbacks/118955.aspx</trackback:ping><description>&lt;P&gt;来月の Windows Update 月例パッチで遂に IE7 が優先度の高い更新プログラムとして配布されますね。&lt;BR&gt;ref. &lt;A title="Microsoft のサイトへ移動" href="http://www.microsoft.com/japan/technet/updatemanagement/windowsupdate/ie7announcement.mspx"&gt;Internet Explorer 7 の自動更新による配布&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;で、企業などでのシステム要件だとかテスト環境だとかで IE6 環境を保持したい場合には、これを事前にブロックする設定が必要だと Microsoft は述べています。&lt;BR&gt;この情報は大分前から発信されていますが、いよいよ残り 3 週間となったので、メモしておきたいと思います。&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;ブロックする方法として、Microsoft は 4 つの方法を提示しています。&lt;BR&gt;下記のうちの 1 つまたは複数の対応が必要ですが、一番上の方法がベストかと。&lt;BR&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A title="Microsoft のサイトへ移動" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=4C12D92F-808D-4C21-96CA-DC191A0A8E41&amp;amp;displaylang=ja"&gt;自動配布の無効化ツールキット(Blocker Toolkit) をダウンロード&lt;/A&gt;して展開。 
&lt;LI&gt;更新プログラム管理ソリューションを展開。（社内 LAN などで管理している管理者向け） 
&lt;LI&gt;ユーザーが各自のコンピュータでローカル管理者として実行しないようにする。 
&lt;LI&gt;更新プログラムをインストールできることが自動更新から通知されたときに、Internet Explorer 7 のインストールを拒否する。 &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;今回はテスト環境を残したいという理由なので、&lt;A title="Microsoft のサイトへ移動" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=4C12D92F-808D-4C21-96CA-DC191A0A8E41&amp;amp;displaylang=ja"&gt;自動配布の無効化ツールキット(Blocker Toolkit)&lt;/A&gt; を使うのがもっとも適切ですね。&lt;BR&gt;実際にダウンロードして使ってみました。自己解凍型の ZIP 書庫になっていて、実行すると下記のファイルが展開されます。&lt;/P&gt;
&lt;DL&gt;
&lt;DT&gt;IE70Blocker.adm
&lt;DD&gt;グループポリシーで設定を行う場合に使うテンプレート。 
&lt;DT&gt;&lt;FONT color=#006400&gt;&lt;STRONG&gt;IE70Blocker.cmd&lt;/STRONG&gt;&lt;/FONT&gt;
&lt;DD&gt;&lt;FONT color=#006400&gt;&lt;STRONG&gt;コマンドラインから設定を行うためのバッチファイル。&lt;/STRONG&gt;&lt;/FONT&gt; 
&lt;DT&gt;IE70BlockerHelp.htm
&lt;DD&gt;このツールキットの使い方（英語）。 
&lt;DT&gt;IE70BlockerHelp-GPFilteringDialog.jpg
&lt;DD&gt;IE70BlockerHelp.htm 内で使用されている画像ファイル。 &lt;/DD&gt;&lt;/DL&gt;
&lt;P&gt;ここでは、コマンドラインから設定します。なお、IE70Blocker.cmd ファイルをダブルクリックしても何もおこりません。（一瞬コマンドプロンプトが表示され、使い方が表示されますがすぐに消えます。）&lt;BR&gt;使い方は簡単。コマンドプロンプトを開き、IE70Blocker.cmd のあるフォルダで下記のコマンドを入力し、Enter キーを押下するだけ。すぐに成否が画面に表示されます。&lt;BR&gt;&lt;STRONG&gt;&lt;KBD&gt;&lt;FONT color=#ff0000&gt;IE70Blocker.cmd /B&lt;/FONT&gt;&lt;/KBD&gt;&lt;BR&gt;&lt;/STRONG&gt;これを元に戻す（自動更新で IE7 のインストールを許可する）には、下記のコマンドを入力します。&lt;BR&gt;&lt;KBD&gt;&lt;FONT color=#ff0000&gt;IE70Blocker.cmd /U&lt;/FONT&gt;&lt;/KBD&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;ちなみに実行される内容はそれぞれ下記のとおりです。&lt;/P&gt;&lt;PRE&gt;ブロック設定時
&lt;FONT color=#0000ff&gt;REG ADD    "HKLM\SOFTWARE\Microsoft\Internet Explorer\Setup\7.0" /v DoNotAllowIE70 /t REG_DWORD /d 1 /f&lt;/FONT&gt;
ブロック解除時
&lt;FONT color=#0000ff&gt;REG DELETE "HKLM\SOFTWARE\Microsoft\Internet Explorer\Setup\7.0" /v DoNotAllowIE70 /f&lt;/FONT&gt;
&lt;/PRE&gt;
&lt;P&gt;なお、.reg ファイルでやりたい方は下記をコピペして使っても構いません。σ(^^)のところで上記を実際に実行した結果からレジストリキーをエクスポートしたものです(Windows XP sp2)。&lt;BR&gt;この DWORD 値を 0 にするか、このエントリがないときは自動更新で IE7 がインストールされます。&lt;BR&gt;&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#0000ff&gt;Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Setup\7.0]
"DoNotAllowIE70"=dword:00000001&lt;/FONT&gt;
&lt;/PRE&gt;
&lt;P&gt;※上記内容については、Microsoft の情報をまとめたものであり、万が一、この文書が原因で何らかの不利益が発生したとしても、当方は一切の責任をとれませんので予めご了承ください。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/rapt/aggbug/118955.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>