<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>digital matter &#187; Windows</title>
	<atom:link href="http://blog.loadlimits.info/tag/windows/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.loadlimits.info</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 29 Jan 2012 07:43:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Windows版のPHP5.3がc0000005で強制終了する</title>
		<link>http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 05:44:13 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/</guid>
		<description><![CDATA[Symfony 1.4.16をWindowsのPHP 5.3.9で実行したときに、特定の条件で強制終了する現象に悩まされていました。 主にSymfonyタスクでdoctrine:data-dumpなどを実行するときに落ちていました。 色々調べた結果、Symfonyに問題があるわけではなく、/lib/vendor/symfony/lib/config/sfDefineEnvironmentConfigHandler.class.phpがきっちり4096バイトだったということが原因でした。 つまり、PHP5.3.9では、4096バイトのファイルをrequireもしくはincludeするとc0000005(Access Violation)で強制終了します。CLIに限らず、Apache経由でも同じです。 試しに4096バイトの一切コードが書かれていないテキストファイルを作ってrequireしてみると、再現しました。 強制終了時のウィンドウと、内容は以下のとおり。 ちなみにモジュール名はnts(Non Thread Safe)版ならphp5.dll、ts(Thread Safe)版ならphp5ts.dllです。 どちらも確認しましたが、どちらも同じ現象です。モジュールは入っていても入っていなくても同じです。 問題の署名: &#160; 問題イベント名:&#160;&#160;&#160; APPCRASH &#160; アプリケーション名:&#160;&#160;&#160; php.exe &#160; アプリケーションのバージョン:&#160;&#160;&#160; 5.3.9.0 &#160; アプリケーションのタイムスタンプ:&#160;&#160;&#160; 4f0c5cd0 &#160; 障害モジュールの名前:&#160;&#160;&#160; php5.dll &#160; 障害モジュールのバージョン:&#160;&#160;&#160; 5.3.9.0 &#160; 障害モジュールのタイムスタンプ:&#160;&#160;&#160; 4f0c5dfb &#160; 例外コード:&#160;&#160;&#160; c0000005 &#160; 例外オフセット:&#160;&#160;&#160; 00090f5b &#160; OS バージョン:&#160;&#160;&#160; 6.1.7601.2.1.0.256.48 &#160; ロケール ID:&#160;&#160;&#160; 1041 &#160; 追加情報 1:&#160;&#160;&#160; 0a9e &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Symfony 1.4.16をWindowsのPHP 5.3.9で実行したときに、特定の条件で強制終了する現象に悩まされていました。   <br />主にSymfonyタスクでdoctrine:data-dumpなどを実行するときに落ちていました。</p>
<p>色々調べた結果、Symfonyに問題があるわけではなく、/lib/vendor/symfony/lib/config/sfDefineEnvironmentConfigHandler.class.phpがきっちり4096バイトだったということが原因でした。</p>
<p>つまり、PHP5.3.9では、4096バイトのファイルをrequireもしくはincludeするとc0000005(Access Violation)で強制終了します。CLIに限らず、Apache経由でも同じです。</p>
<p>試しに4096バイトの一切コードが書かれていないテキストファイルを作ってrequireしてみると、再現しました。</p>
<p>強制終了時のウィンドウと、内容は以下のとおり。   </p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/01/image.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="image" src="http://blog.loadlimits.info/wp-content/uploads/2012/01/image_thumb.png" width="500" height="252" /></a></p>
<p>ちなみにモジュール名はnts(Non Thread Safe)版ならphp5.dll、ts(Thread Safe)版ならphp5ts.dllです。   <br />どちらも確認しましたが、どちらも同じ現象です。モジュールは入っていても入っていなくても同じです。</p>
<p>問題の署名:   <br />&#160; 問題イベント名:&#160;&#160;&#160; APPCRASH    <br />&#160; アプリケーション名:&#160;&#160;&#160; php.exe    <br />&#160; アプリケーションのバージョン:&#160;&#160;&#160; 5.3.9.0    <br />&#160; アプリケーションのタイムスタンプ:&#160;&#160;&#160; 4f0c5cd0    <br />&#160; 障害モジュールの名前:&#160;&#160;&#160; php5.dll    <br />&#160; 障害モジュールのバージョン:&#160;&#160;&#160; 5.3.9.0    <br />&#160; 障害モジュールのタイムスタンプ:&#160;&#160;&#160; 4f0c5dfb    <br />&#160; 例外コード:&#160;&#160;&#160; c0000005    <br />&#160; 例外オフセット:&#160;&#160;&#160; 00090f5b    <br />&#160; OS バージョン:&#160;&#160;&#160; 6.1.7601.2.1.0.256.48    <br />&#160; ロケール ID:&#160;&#160;&#160; 1041    <br />&#160; 追加情報 1:&#160;&#160;&#160; 0a9e    <br />&#160; 追加情報 2:&#160;&#160;&#160; 0a9e372d3b4ad19135b953a78882e789    <br />&#160; 追加情報 3:&#160;&#160;&#160; 0a9e    <br />&#160; 追加情報 4:&#160;&#160;&#160; 0a9e372d3b4ad19135b953a78882e789</p>
<p>多分現象はこのバグ報告と同じだと思います。   <br /><a href="https://bugs.php.net/bug.php?id=60758" target="_blank">PHP :: Bug #60758 :: require() crashes Apache</a></p>
<p>5.4.0RC5でも解決してないみたいですね。報告とほぼ同じですが、これで再現できます。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>&lt;?php
file_put_contents('test.txt', str_pad('', 4096));
include('./test.txt');
</pre>
</div>
<p>とりあえず対処法としては改行１文字でも増やしておけばいいってことですか…
  </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginxのWindows版バイナリをビルドする</title>
		<link>http://blog.loadlimits.info/2011/12/nginx%e3%81%aewindows%e7%89%88%e3%83%90%e3%82%a4%e3%83%8a%e3%83%aa%e3%82%92%e3%83%93%e3%83%ab%e3%83%89%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2011/12/nginx%e3%81%aewindows%e7%89%88%e3%83%90%e3%82%a4%e3%83%8a%e3%83%aa%e3%82%92%e3%83%93%e3%83%ab%e3%83%89%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 16:47:07 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[解決]]></category>
		<category><![CDATA[MinGW]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/12/nginx%e3%81%aewindows%e7%89%88%e3%83%90%e3%82%a4%e3%83%8a%e3%83%aa%e3%82%92%e3%83%93%e3%83%ab%e3%83%89%e3%81%99%e3%82%8b/</guid>
		<description><![CDATA[nginxのWindows版バイナリは公式で配布されていますが、nginxに追加のモジュールを入れたい場合、どうしても自分でビルドする必要がでてきます。 ビルド方法は公式のドキュメントに書かれています。 How to build nginx on the Win32 Platform with Visual C が、色々ハマるのでメモしておきます。ビルド環境はWindows7 Professional x64です。 必要なのは以下。 Microsoft Visual C++ Compiler Microsoft Windows SDK MinGW/MSYS ActivePerl PCRE zlib OpenSSL まず、VCコンパイラが必要なので、Microsoft Visual C++ Expressをインストールします。 Microsoft Visual Studio Express 上記ページのVisual C++ 2010 ExpressのWebインストールをクリックすればvc_web.exeがダウンロードできるので、それを実行してあとは言われるままにインストールすればOKです。 続いてMicrosoft Windows SDK（旧Platform SDK）をインストールします。 Windows SDK: Download the Windows SDK for Windows 7 and [...]]]></description>
			<content:encoded><![CDATA[<p>nginxのWindows版バイナリは公式で配布されていますが、nginxに追加のモジュールを入れたい場合、どうしても自分でビルドする必要がでてきます。</p>
<p>ビルド方法は公式のドキュメントに書かれています。</p>
<p><a href="http://nginx.org/en/docs/howto_build_on_win32.html" target="_blank">How to build nginx on the Win32 Platform with Visual C</a></p>
<p>が、色々ハマるのでメモしておきます。ビルド環境はWindows7 Professional x64です。</p>
<p>必要なのは以下。</p>
<ul>
<li>Microsoft Visual C++ Compiler</li>
<li>Microsoft Windows SDK</li>
<li>MinGW/MSYS</li>
<li>ActivePerl</li>
<li>PCRE</li>
<li>zlib</li>
<li>OpenSSL</li>
</ul>
<p>まず、VCコンパイラが必要なので、Microsoft Visual C++ Expressをインストールします。</p>
<p><a href="http://www.microsoft.com/japan/msdn/vstudio/express/" target="_blank">Microsoft Visual Studio Express</a></p>
<p>上記ページのVisual C++ 2010 ExpressのWebインストールをクリックすればvc_web.exeがダウンロードできるので、それを実行してあとは言われるままにインストールすればOKです。</p>
<p>続いてMicrosoft Windows SDK（旧Platform SDK）をインストールします。</p>
<p><a href="http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx" target="_blank">Windows SDK: Download the Windows SDK for Windows 7 and More | MSDN</a></p>
<p>「Install Now」を押せばインストールできます。こちらもそのままインストールすればOK。</p>
<p>OpenSSLのコンパイルにPerlが必要なので、ActivePerlをインストールします。32bit版と64bit版がありますが、僕は64bit版をインストールしました。</p>
<p><a href="http://www.activestate.com/activeperl/downloads" target="_blank">ActivePerl Downloads &#8211; Perl Binaries for Windows, Linux and Mac | ActiveState</a></p>
<p>続けてMinGW/MSYSのインストールをします。</p>
<p><a href="http://sourceforge.net/projects/mingw/files/" target="_blank">MinGW &#8211; Minimalist GNU for Windows &#8211; Browse Files at SourceForge.net</a></p>
<p>「Looking for the latest version?」と書かれている隣のファイルをダウンロードします。</p>
<p>インストールが終わったら環境変数の設定をします。</p>
<p>MinGW Shellを起動して、パスを設定します。</p>
<p>$ export LIB=&quot;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\lib;C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Lib&quot;   <br />$ export INCLUDE=&quot;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\include;C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Include&quot;    <br />$ export PATH=&quot;$PATH:/c/Perl64/bin:/c/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin:/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE:/c/Program Files/Microsoft SDKs/Windows/v7.1/Bin&quot;    </p>
<p>nginxのソースコードをダウンロードしましょう。tarボールで提供されているものには、Windows用のConfigureが入っていないらしいので、svnから取得します。</p>
<p>svnコマンドが使えるのであれば、   <br />svn co svn://svn.nginx.org/tags/release-(バージョン番号)    <br />でチェックアウトできます。僕はrelease-1.0.10を使いました。</p>
<p>なぜかTortoiseSVNではtags/release-1.0.10が表示できませんでした。</p>
<p>ダウンロードしたソースコードはMSYSのHOMEディレクトリに置きます。</p>
<p>C:\MinGW\msys\1.0\home\(ユーザー名)\nginx   <br />としました。</p>
<p>PCRE、zlib、OpenSSLをダウンロードします。</p>
<p><a href="http://sourceforge.net/projects/pcre/files/pcre/" target="_blank">PCRE &#8211; Browse /pcre at SourceForge.net</a></p>
<p><a href="http://zlib.net/" target="_blank">zlib Home Site</a></p>
<p><a href="http://www.openssl.org/source/" target="_blank">OpenSSL: Source, Tarballs</a></p>
<p>pcre-8.20.zip、zlib-1.2.5.tar.gz、openssl-1.0.0e.tar.gzをダウンロードしました。</p>
<p>nginxディレクトリの下にobjs/libディレクトリを作成します。ここに、先ほどダウンロードした３ファイルを解凍したものを設置します。</p>
<p>これで準備はできたので、ビルドします。</p>
<p>公式のビルド方法に載っているConfigureを実行します。が、PCREのバージョンは8.20になっていたので、&#8211;with-pcreの引数は変更します。あとは適宜合わせてください。</p>
<p>$ auto/configure &#8211;with-cc=cl &#8211;builddir=objs &#8211;prefix= \   <br />&#8211;conf-path=conf/nginx.conf &#8211;pid-path=logs/nginx.pid \    <br />&#8211;http-log-path=logs/access.log &#8211;error-log-path=logs/error.log \    <br />&#8211;sbin-path=nginx.exe &#8211;http-client-body-temp-path=temp/client_body_temp \    <br />&#8211;http-proxy-temp-path=temp/proxy_temp \    <br />&#8211;http-fastcgi-temp-path=temp/fastcgi_temp \    <br />&#8211;with-cc-opt=-DFD_SETSIZE=1024 &#8211;with-pcre=objs/lib/pcre-8.20 \    <br />&#8211;with-zlib=objs/lib/zlib-1.2.5 &#8211;with-openssl=objs/lib/openssl-1.0.0e \    <br />&#8211;with-select_module &#8211;with-http_ssl_module &#8211;with-ipv6</p>
<p>Configureが成功したら、nmakeでビルドします。</p>
<p>$ nmake -f objs/Makefile</p>
<p>これで、何も問題がなければnginx/objsディレクトリにnginx.exeファイルが出来上がっているはずです。</p>
<p>このnginx.exeファイルを、ひとつ上のディレクトリ(nginx)に設置して、</p>
<p>$ mkdir logs   <br />$ mkdir temp</p>
<p>として、</p>
<p>$ start nginx.exe</p>
<p>で起動できます。</p>
<p>これでやっと追加モジュールをインストールできるというもの。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/12/nginx%e3%81%aewindows%e7%89%88%e3%83%90%e3%82%a4%e3%83%8a%e3%83%aa%e3%82%92%e3%83%93%e3%83%ab%e3%83%89%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今日の微妙エラー</title>
		<link>http://blog.loadlimits.info/2010/01/%e4%bb%8a%e6%97%a5%e3%81%ae%e5%be%ae%e5%a6%99%e3%82%a8%e3%83%a9%e3%83%bc/</link>
		<comments>http://blog.loadlimits.info/2010/01/%e4%bb%8a%e6%97%a5%e3%81%ae%e5%be%ae%e5%a6%99%e3%82%a8%e3%83%a9%e3%83%bc/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 07:52:06 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2010/01/%e4%bb%8a%e6%97%a5%e3%81%ae%e5%be%ae%e5%a6%99%e3%82%a8%e3%83%a9%e3%83%bc/</guid>
		<description><![CDATA[コントロールはひとつの case ラベル (&#8216;default:&#8217;) から別のラベルへ流れ落ちることはできません。 switch (message) { case "hoge": funcA(); break; default: funcB(); break; // これがないとエラー } 他の言語のクセでbreak書かなかったら起きた。 「フォールスルー」ってことなんですね。 ちなみにcaseのあとのブロックにコードを書かなければフォールスルーはできるという話。]]></description>
			<content:encoded><![CDATA[<blockquote><p>コントロールはひとつの case ラベル (&#8216;default:&#8217;) から別のラベルへ流れ落ちることはできません。</p>
</blockquote>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>switch (message)
{
    case "hoge":
        funcA();
        break;
    default:
        funcB();
        break; // これがないとエラー
}
</pre>
</div>
<p>他の言語のクセでbreak書かなかったら起きた。</p>
<p>「フォールスルー」ってことなんですね。</p>
<p>ちなみにcaseのあとのブロックにコードを書かなければフォールスルーはできるという話。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2010/01/%e4%bb%8a%e6%97%a5%e3%81%ae%e5%be%ae%e5%a6%99%e3%82%a8%e3%83%a9%e3%83%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pythonのwin32comからSilverlightを使おうと試みる</title>
		<link>http://blog.loadlimits.info/2009/10/python%e3%81%aewin32com%e3%81%8b%e3%82%89silverlight%e3%82%92%e4%bd%bf%e3%81%8a%e3%81%86%e3%81%a8%e8%a9%a6%e3%81%bf%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2009/10/python%e3%81%aewin32com%e3%81%8b%e3%82%89silverlight%e3%82%92%e4%bd%bf%e3%81%8a%e3%81%86%e3%81%a8%e8%a9%a6%e3%81%bf%e3%82%8b/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 06:56:25 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[疑問]]></category>
		<category><![CDATA[ActiveX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2009/10/python%e3%81%aewin32com%e3%81%8b%e3%82%89silverlight%e3%82%92%e4%bd%bf%e3%81%8a%e3%81%86%e3%81%a8%e8%a9%a6%e3%81%bf%e3%82%8b/</guid>
		<description><![CDATA[最終的にはPythonで書かれたWindowsアプリケーションで、Silverlightのコンテンツをロードしたいという目的なのですが、とりあえずSilverlightのActiveXコントロールを読み込んで動作を確認してみたいので色々実験。 まず、インストールされているSilverlightのバージョンを調べてみる。 Javascriptで書かれたコードがいくつか見つかったのでそれを書き直す。 以下はJS版。 var control = new ActiveXObject('AgControl.AgControl'); alert(control.IsVersionSupported('3.0')); これをPythonで書いてみる。 import win32com.client control = win32com.client.Dispatch("AgControl.AgControl") print control.IsVersionSupported('3.0') Silverlight 3がインストールされていればTrueが表示されます。 他にどんなメソッドが定義されているのかを調べるために、Visual StudioからAgControlを参照して、オブジェクトブラウザで調査。 というか、Silverlightのプラグインのリファレンスがあった。 Silverlight プラグインのオブジェクト リファレンス が…Sourceを指定してもIsLoadedプロパティがTrueにならない…うーん…もう少し調べてみる。]]></description>
			<content:encoded><![CDATA[<p>最終的にはPythonで書かれたWindowsアプリケーションで、Silverlightのコンテンツをロードしたいという目的なのですが、とりあえずSilverlightのActiveXコントロールを読み込んで動作を確認してみたいので色々実験。</p>
<p>まず、インストールされているSilverlightのバージョンを調べてみる。</p>
<p>Javascriptで書かれたコードがいくつか見つかったのでそれを書き直す。</p>
<p>以下はJS版。</p>
<p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1fad3344-c133-4716-b122-991f00b3f96e" class="wlWriterEditableSmartContent">
<pre name="code" class="js">var control = new ActiveXObject('AgControl.AgControl');
alert(control.IsVersionSupported('3.0'));
</pre>
</div>
<p>これをPythonで書いてみる。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2ef33f5a-557a-48de-85a2-d2d00e450645" class="wlWriterEditableSmartContent">
<pre name="code" class="py">import win32com.client
control = win32com.client.Dispatch("AgControl.AgControl")
print control.IsVersionSupported('3.0')</pre>
</div>
<p>Silverlight 3がインストールされていればTrueが表示されます。</p>
<p>他にどんなメソッドが定義されているのかを調べるために、Visual StudioからAgControlを参照して、オブジェクトブラウザで調査。</p>
<p>というか、Silverlightのプラグインのリファレンスがあった。</p>
<p><a href="http://msdn.microsoft.com/ja-jp/library/cc838259(VS.95).aspx" target="_blank">Silverlight プラグインのオブジェクト リファレンス</a></p>
<p>が…Sourceを指定してもIsLoadedプロパティがTrueにならない…うーん…もう少し調べてみる。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/10/python%e3%81%aewin32com%e3%81%8b%e3%82%89silverlight%e3%82%92%e4%bd%bf%e3%81%8a%e3%81%86%e3%81%a8%e8%a9%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PythonでMIDI出力をしてみる</title>
		<link>http://blog.loadlimits.info/2009/10/python%e3%81%a7midi%e5%87%ba%e5%8a%9b%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2009/10/python%e3%81%a7midi%e5%87%ba%e5%8a%9b%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 03:15:53 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[MIDI]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2009/10/python%e3%81%a7midi%e5%87%ba%e5%8a%9b%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/</guid>
		<description><![CDATA[既存のPythonで作ったWindowsアプリケーションにMIDI出力を組み込む用事があったので、実験してみました。 参考サイトはこちら。 sulume blog» ブログアーカイブ » python で MIDI を使う MIDIIO.dllというのはおーぷんMIDIぷろじぇくとで公開されているMIDIメッセージ入出力用ライブラリです。 これもダウンロードして、pyファイルと同じ場所に置いておきます。 で、ソースコードはこちら。 import ctypes import time midiiolib = ctypes.windll.LoadLibrary(r".\MIDIIO.dll") c_deviceName = ctypes.create_string_buffer(32) midiiolib.MIDIOut_GetDeviceName(0, c_deviceName, 32) midiout = midiiolib.MIDIOut_Open(c_deviceName.value) c_mess = ctypes.create_string_buffer(3) c_mess.value = '\x90\x3C\x64' midiiolib.MIDIOut_PutMIDIMessage(midiout, c_mess.value, 3) time.sleep(3) midiiolib.MIDIOut_Close(midiout) 説明することもあまりないですが、8行目のMIDIOut_GetDeviceNameで、MIDI出力の先頭のデバイスの名前を先に取得します。 で、その名前を使ってMIDIOut_Openで出力デバイスを開きます。 11～12行目ではノートを作成します。とりあえずドの音でも鳴らしておきます。この辺もMIDIIO.dllに入っていたドキュメントのサンプルと同じ。 あとはMIDIOut_PutMIDIMessageで出力するだけです。 ちゃんと閉じておかないと、次回音が鳴らなかったりする（オープンに失敗します）ので、MIDIOut_Closeで閉じておきましょう。 実験として、ちょっと長いデータを指定してみる。 import ctypes import time midiiolib = ctypes.windll.LoadLibrary(r".\MIDIIO.dll") c_deviceName = [...]]]></description>
			<content:encoded><![CDATA[<p>既存のPythonで作ったWindowsアプリケーションにMIDI出力を組み込む用事があったので、実験してみました。</p>
<p>参考サイトはこちら。</p>
<p><a href="http://sulume.com/blog/2009/09/26/midi-for-python/" target="_blank">sulume blog» ブログアーカイブ » python で MIDI を使う</a></p>
<p>MIDIIO.dllというのは<a href="http://openmidiproject.sourceforge.jp/" target="_blank">おーぷんMIDIぷろじぇくと</a>で公開されているMIDIメッセージ入出力用ライブラリです。</p>
<p>これもダウンロードして、pyファイルと同じ場所に置いておきます。</p>
<p>で、ソースコードはこちら。</p>
<p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2fa1f3e8-7c3e-41fb-a2b6-dd8d92243198" class="wlWriterEditableSmartContent">
<pre name="code" class="py">import ctypes
import time

midiiolib = ctypes.windll.LoadLibrary(r".\MIDIIO.dll")

c_deviceName = ctypes.create_string_buffer(32)

midiiolib.MIDIOut_GetDeviceName(0, c_deviceName, 32)
midiout = midiiolib.MIDIOut_Open(c_deviceName.value)

c_mess = ctypes.create_string_buffer(3)
c_mess.value = '\x90\x3C\x64'

midiiolib.MIDIOut_PutMIDIMessage(midiout, c_mess.value, 3)

time.sleep(3)

midiiolib.MIDIOut_Close(midiout)
</pre>
</div>
<p>説明することもあまりないですが、8行目のMIDIOut_GetDeviceNameで、MIDI出力の先頭のデバイスの名前を先に取得します。</p>
<p>で、その名前を使ってMIDIOut_Openで出力デバイスを開きます。</p>
<p>11～12行目ではノートを作成します。とりあえずドの音でも鳴らしておきます。この辺もMIDIIO.dllに入っていたドキュメントのサンプルと同じ。</p>
<p>あとはMIDIOut_PutMIDIMessageで出力するだけです。</p>
<p>ちゃんと閉じておかないと、次回音が鳴らなかったりする（オープンに失敗します）ので、MIDIOut_Closeで閉じておきましょう。</p>
<p>実験として、ちょっと長いデータを指定してみる。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:15aded9d-7788-453b-bed8-2cb716e5ff49" class="wlWriterEditableSmartContent">
<pre name="code" class="py">import ctypes
import time

midiiolib = ctypes.windll.LoadLibrary(r".\MIDIIO.dll")

c_deviceName = ctypes.create_string_buffer(32)

midiiolib.MIDIOut_GetDeviceName(0, c_deviceName, 32)
midiout = midiiolib.MIDIOut_Open(c_deviceName.value)

notes = ['\x90\x3C\x64',
         '\x90\x3E\x64',
         '\x90\x40\x64',
         '\x90\x41\x64',
         '\x90\x43\x64',
         '\x90\x45\x64',
         '\x90\x47\x64',
         '\x90\x48\x64']

c_mess = ctypes.create_string_buffer(3)

for note in notes:
    c_mess.value = note

    midiiolib.MIDIOut_PutMIDIMessage(midiout, c_mess.value, 3)
    time.sleep(0.5)

time.sleep(1.0)

midiiolib.MIDIOut_Close(midiout)
</pre>
</div>
<p>和音を鳴らしてみるテスト。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ba211cd2-3e06-4c92-b11b-773b63841952" class="wlWriterEditableSmartContent">
<pre name="code" class="py">import ctypes
import time

midiiolib = ctypes.windll.LoadLibrary(r".\MIDIIO.dll")

c_deviceName = ctypes.create_string_buffer(32)

midiiolib.MIDIOut_GetDeviceName(0, c_deviceName, 32)
midiout = midiiolib.MIDIOut_Open(c_deviceName.value)

notes = ['\x90\x3C\x64',
         '\x90\x40\x64',
         '\x90\x43\x64']

c_mess = ctypes.create_string_buffer(3)

for note in notes:
    c_mess.value = note

    midiiolib.MIDIOut_PutMIDIMessage(midiout, c_mess.value, 3)

time.sleep(3.0)

midiiolib.MIDIOut_Close(midiout)
</pre>
</div>
<p>とりあえずこれだけできれば満足なので終了。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/10/python%e3%81%a7midi%e5%87%ba%e5%8a%9b%e3%82%92%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ネットワークドライブからデータを全部バックアップする</title>
		<link>http://blog.loadlimits.info/2009/10/%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af%e3%83%89%e3%83%a9%e3%82%a4%e3%83%96%e3%81%8b%e3%82%89%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%85%a8%e9%83%a8%e3%83%90%e3%83%83%e3%82%af%e3%82%a2/</link>
		<comments>http://blog.loadlimits.info/2009/10/%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af%e3%83%89%e3%83%a9%e3%82%a4%e3%83%96%e3%81%8b%e3%82%89%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%85%a8%e9%83%a8%e3%83%90%e3%83%83%e3%82%af%e3%82%a2/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 09:45:02 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[解決]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2009/10/%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af%e3%83%89%e3%83%a9%e3%82%a4%e3%83%96%e3%81%8b%e3%82%89%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%85%a8%e9%83%a8%e3%83%90%e3%83%83%e3%82%af%e3%82%a2/</guid>
		<description><![CDATA[TeraStationのHDDが１台故障したので、交換を前に中身を全部バックアップする必要がありました。 ちなみに以前同じような症状でRAID崩壊させたことがあるので今回は慎重に… 共有フォルダのルートがたくさんあるので、それをいかに簡単にコピーするかがキモ。 共有フォルダ自体はコピーしようとドラッグアンドドロップすると、ショートカットが作られてしまう。 やりたいことは、PCを使ってLAN内のNASからデータを全部コピーして、ローカルに接続してあるUSB HDDにバックアップすること。 で、robocopyコマンドというのが便利っぽいので使ってみた。使ったOSはWindows Vista。標準コマンド？ まずは対象のフォルダ名一覧の取得から。 C:\&#62; net view \\NAS みたいにすると、フォルダ一覧が文字情報として取れます。 で、robocopy。 robocopyでフォルダをバックアップ／同期させる － ＠IT どうやらrsyncみたいに使えるよう。 C:\&#62; robocopy /mir \\NAS\dir1 C:\Backup\dir1 という感じで書けば対象ディレクトリの中身をミラーリングコピーしてくれます。 ちなみに受け側ディレクトリは作っておかなくても勝手に作ってくれます。 というわけで、先ほどのnet viewの結果を流し込んだコマンドリストを作ってbatファイルに保存して、実行。 全部きれいにバックアップできました。 今xcopyって推奨されてないんですね。知らなかった。]]></description>
			<content:encoded><![CDATA[<p>TeraStationのHDDが１台故障したので、交換を前に中身を全部バックアップする必要がありました。</p>
<p>ちなみに以前同じような症状でRAID崩壊させたことがあるので今回は慎重に…</p>
<p>共有フォルダのルートがたくさんあるので、それをいかに簡単にコピーするかがキモ。</p>
<p>共有フォルダ自体はコピーしようとドラッグアンドドロップすると、ショートカットが作られてしまう。</p>
<p>やりたいことは、PCを使ってLAN内のNASからデータを全部コピーして、ローカルに接続してあるUSB HDDにバックアップすること。</p>
<p>で、robocopyコマンドというのが便利っぽいので使ってみた。使ったOSはWindows Vista。標準コマンド？</p>
<p>まずは対象のフォルダ名一覧の取得から。</p>
<p>C:\&gt; net view \\NAS</p>
<p>みたいにすると、フォルダ一覧が文字情報として取れます。</p>
<p>で、robocopy。</p>
<p><a href="http://www.atmarkit.co.jp/fwin2k/win2ktips/877robomir/robomir.html" target="_blank">robocopyでフォルダをバックアップ／同期させる － ＠IT</a></p>
<p>どうやらrsyncみたいに使えるよう。</p>
<p>C:\&gt; robocopy /mir \\NAS\dir1 C:\Backup\dir1</p>
<p>という感じで書けば対象ディレクトリの中身をミラーリングコピーしてくれます。</p>
<p>ちなみに受け側ディレクトリは作っておかなくても勝手に作ってくれます。</p>
<p>というわけで、先ほどのnet viewの結果を流し込んだコマンドリストを作ってbatファイルに保存して、実行。</p>
<p>全部きれいにバックアップできました。</p>
<p>今xcopyって推奨されてないんですね。知らなかった。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/10/%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af%e3%83%89%e3%83%a9%e3%82%a4%e3%83%96%e3%81%8b%e3%82%89%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%85%a8%e9%83%a8%e3%83%90%e3%83%83%e3%82%af%e3%82%a2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NSISから使える、起動中のプロセスを削除するプラグイン</title>
		<link>http://blog.loadlimits.info/2009/09/nsis%e3%81%8b%e3%82%89%e4%bd%bf%e3%81%88%e3%82%8b%e3%80%81%e8%b5%b7%e5%8b%95%e4%b8%ad%e3%81%ae%e3%83%97%e3%83%ad%e3%82%bb%e3%82%b9%e3%82%92%e5%89%8a%e9%99%a4%e3%81%99%e3%82%8b%e3%83%97%e3%83%a9/</link>
		<comments>http://blog.loadlimits.info/2009/09/nsis%e3%81%8b%e3%82%89%e4%bd%bf%e3%81%88%e3%82%8b%e3%80%81%e8%b5%b7%e5%8b%95%e4%b8%ad%e3%81%ae%e3%83%97%e3%83%ad%e3%82%bb%e3%82%b9%e3%82%92%e5%89%8a%e9%99%a4%e3%81%99%e3%82%8b%e3%83%97%e3%83%a9/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 07:20:22 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[DLL]]></category>
		<category><![CDATA[NSIS]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2009/09/nsis%e3%81%8b%e3%82%89%e4%bd%bf%e3%81%88%e3%82%8b%e3%80%81%e8%b5%b7%e5%8b%95%e4%b8%ad%e3%81%ae%e3%83%97%e3%83%ad%e3%82%bb%e3%82%b9%e3%82%92%e5%89%8a%e9%99%a4%e3%81%99%e3%82%8b%e3%83%97%e3%83%a9/</guid>
		<description><![CDATA[常駐アプリケーションを作ったはいいが、アンインストールしようとしたときにプロセスが起動していると、削除できなくて困る。 というわけで、プロセスを殺す目的のプラグインDLLを作成。コンパイル済みファイルはエントリの最後に。 taskkillコマンド使えという話ですが、Windows XP Home Editionにはtaskkillコマンドが含まれていないので。 今回もさっくりC#で。C#.NETで作ってしまうと、そのままではNSISで使えないのだけど、.NETで作ったDLLをNSISのプラグインとして使う方法は以下のエントリを参照。 NSISで、C#で書かれた自作のDLLを使う : blog.loadlimit &#8211; digital matter - ソースは以下。C#でクラスライブラリとしてプロジェクトを作成。プロセス名を指定すると、マッチしたプロセスを全部終了してくれます。 using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace TaskKill { public class TaskKill { [DllImport("Psapi.dll", SetLastError = true)] static extern bool EnumProcesses( [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4)] [In][Out] UInt32[] processIds, UInt32 arraySizeBytes, [MarshalAs(UnmanagedType.U4)] out UInt32 bytesCopied ); [DllImport("kernel32.dll")] static extern [...]]]></description>
			<content:encoded><![CDATA[<p>常駐アプリケーションを作ったはいいが、アンインストールしようとしたときにプロセスが起動していると、削除できなくて困る。</p>
<p>というわけで、プロセスを殺す目的のプラグインDLLを作成。コンパイル済みファイルはエントリの最後に。</p>
<p>taskkillコマンド使えという話ですが、Windows XP Home Editionにはtaskkillコマンドが含まれていないので。</p>
<p>今回もさっくりC#で。C#.NETで作ってしまうと、そのままではNSISで使えないのだけど、.NETで作ったDLLをNSISのプラグインとして使う方法は以下のエントリを参照。</p>
<p><a title="http://blog.loadlimits.info/2009/08/nsis%e3%81%a7%e3%80%81c%e3%81%a7%e6%9b%b8%e3%81%8b%e3%82%8c%e3%81%9f%e8%87%aa%e4%bd%9c%e3%81%aedll%e3%82%92%e4%bd%bf%e3%81%86/" href="http://blog.loadlimits.info/2009/08/nsis%e3%81%a7%e3%80%81c%e3%81%a7%e6%9b%b8%e3%81%8b%e3%82%8c%e3%81%9f%e8%87%aa%e4%bd%9c%e3%81%aedll%e3%82%92%e4%bd%bf%e3%81%86/">NSISで、C#で書かれた自作のDLLを使う : blog.loadlimit &#8211; digital matter -</a></p>
<p>ソースは以下。C#でクラスライブラリとしてプロジェクトを作成。プロセス名を指定すると、マッチしたプロセスを全部終了してくれます。</p>
<p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:53c99b17-b530-4e95-997c-35715953896a" class="wlWriterEditableSmartContent">
<pre name="code" class="c#">using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace TaskKill
{
    public class TaskKill
    {
        [DllImport("Psapi.dll", SetLastError = true)]
        static extern bool EnumProcesses(
           [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4)] [In][Out] UInt32[] processIds,
             UInt32 arraySizeBytes,
             [MarshalAs(UnmanagedType.U4)] out UInt32 bytesCopied
          );

        [DllImport("kernel32.dll")]
        static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle,
           uint dwProcessId);

        [Flags]
        public enum ProcessAccessFlags : uint
        {
            All = 0x001F0FFF,
            Terminate = 0x00000001,
            CreateThread = 0x00000002,
            VMOperation = 0x00000008,
            VMRead = 0x00000010,
            VMWrite = 0x00000020,
            DupHandle = 0x00000040,
            SetInformation = 0x00000200,
            QueryInformation = 0x00000400,
            Synchronize = 0x00100000
        }

        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool CloseHandle(IntPtr hObject);

        [StructLayout(LayoutKind.Sequential)]
        public struct StringBuffer
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
            public string text;
        }

        [DllImport("psapi.dll")]
        private static extern bool EnumProcessModules(IntPtr hProcess, out IntPtr lphModule, int cb, out int lpcbNeeded);
        [DllImport("psapi.dll")]
        private static extern int GetModuleBaseName(IntPtr hProcess, IntPtr hModule, out StringBuffer lpBaseName, int nSize);

        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool TerminateProcess(IntPtr hProcess, int uExitCode);

        public static void KillByName(string pname)
        {

            UInt32 arraySize = 1024;
            UInt32 arrayBytesSize = arraySize * sizeof(UInt32);
            UInt32[] processIds = new UInt32[arraySize];
            UInt32 bytesCopied;

            bool success = EnumProcesses(processIds, arrayBytesSize, out bytesCopied);

            if (!success)
            {
                return;
            }
            if (0 == bytesCopied)
            {
                return;
            }

            UInt32 numIdsCopied = bytesCopied &gt;&gt; 2;

            if (0 != (bytesCopied &amp; 3))
            {
                UInt32 partialDwordBytes = bytesCopied &amp; 3;

                return;
            }

            for (UInt32 index = 0; index &lt; numIdsCopied; index++)
            {
                IntPtr hProcess = OpenProcess(
                    ProcessAccessFlags.QueryInformation | ProcessAccessFlags.VMRead | ProcessAccessFlags.Terminate,
                    false,processIds[index]);
                if (hProcess.ToInt32() != 0)
                {
                    IntPtr hMod = IntPtr.Zero;
                    int cbNeeded;
                    StringBuffer szProcessName;
                    szProcessName.text = "&lt;unknown&gt;";

                    if (EnumProcessModules(hProcess, out hMod, Marshal.SizeOf(hMod), out cbNeeded))
                    {
                        GetModuleBaseName(hProcess, hMod, out szProcessName, Marshal.SizeOf(szProcessName));
                    }

                    if (szProcessName.text == pname)
                    {
                        TerminateProcess(hProcess, -1);
                    }

                    CloseHandle(hProcess);
                }
            }

        }

    }
}
</pre>
</div>
<p>で、これをNSISの配布ファイルに含めておいて、</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e9619311-129a-4b77-9c2d-7fd6d50d64c6" class="wlWriterEditableSmartContent">
<pre name="code" class="py">; アンインストーラ
Section "Uninstall"
  ; アンインストールで使用するプラグインの準備
  InitPluginsDir
  SetOutPath $PLUGINSDIR
  File "TaskKill.dll"

  ; hogehoge.exeが起動していたら、それを落とす
  CLR::Call /NOUNLOAD "TaskKill.dll" "TaskKill.TaskKill" "KillByName" 1 "hogehoge.exe"

  ; インストールしたファイル群削除
  Delete $INSTDIR\*.*

  CLR::Destroy
SectionEnd
</pre>
</div>
<p>という感じでnsiファイルを記述。</p>
<p>ファイルは下記リンクからダウンロードしてお使いください。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2009/09/TaskKill.dll" target="_blank">download TaskKill.dll</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/09/nsis%e3%81%8b%e3%82%89%e4%bd%bf%e3%81%88%e3%82%8b%e3%80%81%e8%b5%b7%e5%8b%95%e4%b8%ad%e3%81%ae%e3%83%97%e3%83%ad%e3%82%bb%e3%82%b9%e3%82%92%e5%89%8a%e9%99%a4%e3%81%99%e3%82%8b%e3%83%97%e3%83%a9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>スクリーンキーボード</title>
		<link>http://blog.loadlimits.info/2009/08/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%ad%e3%83%bc%e3%83%9c%e3%83%bc%e3%83%89/</link>
		<comments>http://blog.loadlimits.info/2009/08/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%ad%e3%83%bc%e3%83%9c%e3%83%bc%e3%83%89/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 04:13:08 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2009/08/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%ad%e3%83%bc%e3%83%9c%e3%83%bc%e3%83%89/</guid>
		<description><![CDATA[Vistaでソフトウェアキーボードというか、スクリーンキーボードを作ろうとしてハマったのでメモ。ただし、結局解決には至っていません。アプローチ変えてしまったので。 スクリーンキーボードを作るにあたって検索すると、imm32関連の関数を使ったサンプルが諸々出てくるのだけど、どうやらこの関数がWindows XPまでのもので、Vista以降はTSF(Text Services Framework)というものに置き換わっているらしい。 これに気づかず、 IntPtr hIMC = ImmGetContext(AHwnd); IntPtr hKL = GetKeyboardLayout(0); int dwSize = ImmGetConversionList(hKL, hIMC, AText, IntPtr.Zero, 0, GCL_CONVERSION); とかやっていたのだけど、ImmGetConversionListの結果が必ず0になってしまう。 imm32 を使ったプログラムの互換性について 試してないけど、TSFのドキュメントは以下。 Text Services Framework Reference (Windows) で、ここまでわかったところで、結局Linuxでやることになりました。]]></description>
			<content:encoded><![CDATA[<p>Vistaでソフトウェアキーボードというか、スクリーンキーボードを作ろうとしてハマったのでメモ。ただし、結局解決には至っていません。アプローチ変えてしまったので。</p>
<p>スクリーンキーボードを作るにあたって検索すると、imm32関連の関数を使ったサンプルが諸々出てくるのだけど、どうやらこの関数がWindows XPまでのもので、Vista以降はTSF(Text Services Framework)というものに置き換わっているらしい。</p>
<p>これに気づかず、</p>
<p>IntPtr hIMC = ImmGetContext(AHwnd);    <br />IntPtr hKL = GetKeyboardLayout(0);     <br />int dwSize = ImmGetConversionList(hKL, hIMC, AText, IntPtr.Zero, 0, GCL_CONVERSION);</p>
<p>とかやっていたのだけど、ImmGetConversionListの結果が必ず0になってしまう。</p>
<p><a href="http://social.technet.microsoft.com/forums/ja-JP/windowsvistasoftwareja/thread/973a7407-5ddb-4b34-9aea-0fb36f762cf4/" target="_blank">imm32 を使ったプログラムの互換性について</a></p>
<p>試してないけど、TSFのドキュメントは以下。</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ms629038(VS.85).aspx" target="_blank">Text Services Framework Reference (Windows)</a></p>
<p>で、ここまでわかったところで、結局Linuxでやることになりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/08/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%ad%e3%83%bc%e3%83%9c%e3%83%bc%e3%83%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>マウスを動かしただけでCPU使用率が100%に行く現象</title>
		<link>http://blog.loadlimits.info/2009/08/%e3%83%9e%e3%82%a6%e3%82%b9%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%a0%e3%81%91%e3%81%a7cpu%e4%bd%bf%e7%94%a8%e7%8e%87%e3%81%8c100%e3%81%ab%e8%a1%8c%e3%81%8f%e7%8f%be%e8%b1%a1/</link>
		<comments>http://blog.loadlimits.info/2009/08/%e3%83%9e%e3%82%a6%e3%82%b9%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%a0%e3%81%91%e3%81%a7cpu%e4%bd%bf%e7%94%a8%e7%8e%87%e3%81%8c100%e3%81%ab%e8%a1%8c%e3%81%8f%e7%8f%be%e8%b1%a1/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 02:08:37 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[解決]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2009/08/%e3%83%9e%e3%82%a6%e3%82%b9%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%a0%e3%81%91%e3%81%a7cpu%e4%bd%bf%e7%94%a8%e7%8e%87%e3%81%8c100%e3%81%ab%e8%a1%8c%e3%81%8f%e7%8f%be%e8%b1%a1/</guid>
		<description><![CDATA[Windowsを使っていると、だんだんと重くなってきて、マウスもガクガク飛ぶようになった。うーん？以前はこんなことなかったけどなぁと思って原因究明に乗り出すことに。 使用OSはWindows Vista Ultimate 32bit。半日使ってると重くなってきて、１日経つとまともにブラウザも扱えない。 Core2Quadでメモリ4GBな上、ブラウザしか起動していなくても遅いので、マシンスペック云々ではないことを先に断っておきます。 まぁ、結論から言うとDisplayLink製のUSBモニタが問題でした。というか、それに付随するアプリケーションとサービスか。当該のプロセスは以下の３つ。 DisplayLinkUI.exe DisplayLinkService.exe DisplayLinkManager.exe ServiceとManagerは全ユーザのプロセスを表示で、管理権限にならないと削除できないので注意。 ３つ落としてやったら途端に快適な環境が復活しました。これ単体ではさほどCPU食ったりしないので、意外と気づきにくいかも？ちなみに使ってるUSBモニタはSAMSUNGのSyncMaster U70。 OS起動時に２回に１回ブルースクリーンになったり、色々あやしさは感じていたのだけど、ドライバの出来が良くないなぁ…USBサブモニタ流行ってるから、同じような現象が大量発生しているんじゃないかと不安だわ。 調べてみたら、バージョンは4.6.17952.0。付属のCDから一度バージョンアップしてます。 今見たら新しいメジャーバージョン（5.1）出てたので試してみます。この分野は可能性感じるし、U70自体は結構気に入ってるので、早々に安定してくれることを期待。 ダウンロードはこちらから。 DisplayLink: DisplayLink: Windows Drivers ウィルスバスター2009とか疑ってすまんかった。同じような現象に悩まされている人の一助になれば幸いです。 追記 5.1にしたら遅くなる現象は直った模様。USBモニタ上でのマウスポインタの動作が遅くなったけど、別にクリティカルじゃないのでOK。]]></description>
			<content:encoded><![CDATA[<p>Windowsを使っていると、だんだんと重くなってきて、マウスもガクガク飛ぶようになった。うーん？以前はこんなことなかったけどなぁと思って原因究明に乗り出すことに。</p>
<p>使用OSはWindows Vista Ultimate 32bit。半日使ってると重くなってきて、１日経つとまともにブラウザも扱えない。</p>
<p>Core2Quadでメモリ4GBな上、ブラウザしか起動していなくても遅いので、マシンスペック云々ではないことを先に断っておきます。</p>
<p>まぁ、結論から言うとDisplayLink製のUSBモニタが問題でした。というか、それに付随するアプリケーションとサービスか。当該のプロセスは以下の３つ。</p>
<ul>
<li>DisplayLinkUI.exe </li>
<li>DisplayLinkService.exe </li>
<li>DisplayLinkManager.exe </li>
</ul>
<p>ServiceとManagerは全ユーザのプロセスを表示で、管理権限にならないと削除できないので注意。</p>
<p>３つ落としてやったら途端に快適な環境が復活しました。これ単体ではさほどCPU食ったりしないので、意外と気づきにくいかも？ちなみに使ってるUSBモニタはSAMSUNGのSyncMaster U70。</p>
<p>OS起動時に２回に１回ブルースクリーンになったり、色々あやしさは感じていたのだけど、ドライバの出来が良くないなぁ…USBサブモニタ流行ってるから、同じような現象が大量発生しているんじゃないかと不安だわ。</p>
<p>調べてみたら、バージョンは4.6.17952.0。付属のCDから一度バージョンアップしてます。</p>
<p>今見たら新しいメジャーバージョン（5.1）出てたので試してみます。この分野は可能性感じるし、U70自体は結構気に入ってるので、早々に安定してくれることを期待。</p>
<p>ダウンロードはこちらから。</p>
<p><a href="http://www.displaylink.com/support/downloads.html" target="_blank">DisplayLink: DisplayLink: Windows Drivers</a></p>
<p>ウィルスバスター2009とか疑ってすまんかった。同じような現象に悩まされている人の一助になれば幸いです。</p>
<p>追記</p>
<p>5.1にしたら遅くなる現象は直った模様。USBモニタ上でのマウスポインタの動作が遅くなったけど、別にクリティカルじゃないのでOK。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:7e7f7c9f-02e2-493c-b747-e0b07b3fb06c" class="wlWriterEditableSmartContent"><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=7179AB&amp;IS2=1&amp;nou=1&amp;bg1=7179AB&amp;fc1=FFFFFF&amp;lc1=FFD940&amp;t=hotpi-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=B001T8UDWC" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></div>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:81867AAF-BB02-476b-AE5D-12BDAC2E750D:808bbc56-45a9-40db-babf-b388c5b3cc90" class="wlWriterEditableSmartContent"><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=7179AB&amp;IS2=1&amp;nou=1&amp;bg1=7179AB&amp;fc1=FFFFFF&amp;lc1=FFD940&amp;t=hotpi-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=B001F50L76" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/08/%e3%83%9e%e3%82%a6%e3%82%b9%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%a0%e3%81%91%e3%81%a7cpu%e4%bd%bf%e7%94%a8%e7%8e%87%e3%81%8c100%e3%81%ab%e8%a1%8c%e3%81%8f%e7%8f%be%e8%b1%a1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Photoshopの強制終了と対応</title>
		<link>http://blog.loadlimits.info/2009/07/photoshop%e3%81%ae%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%a8%e5%af%be%e5%bf%9c/</link>
		<comments>http://blog.loadlimits.info/2009/07/photoshop%e3%81%ae%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%a8%e5%af%be%e5%bf%9c/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 13:56:37 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[解決]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2009/07/photoshop%e3%81%ae%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%a8%e5%af%be%e5%bf%9c/</guid>
		<description><![CDATA[Photoshop CS3を起動しようとしたら、起動スプラッシュ表示中に突然強制終了する現象に見舞われた。 同じPCに入っているCS2もダメ。 スプラッシュの文字を追っていくと、どうやら「TWAIN メニュー項目を作成」というところで止まっているようだ。 うーん、最近何か入れた覚えはないけどなぁ… とりあえず検索すると TWAIN プラグインの読み込み中にアプリケーションが終了する（Photoshop Elements 4.0/5.0/Photoshop CS2/CS3） これらしい。 原因となるドライバが不明なので、TWAINプラグイン自体外すことにした。説明の通りにプラグインのファイル名の先頭に「~（チルダ）」をつけるだけでOK。 会社で使ってるPCだからTWAIN経由ではスキャンしないしね。 で、思ったのは、AdobeのTechNoteに大抵の問題は情報があるらしいということ。 Photoshop他Adobe製品で起動しないとかの対応方法を探すには、ちゃんと正確にどこで止まったかを調べないといけないってことですな。基本だけど。「Photoshop 強制終了」とかで探すとハマるよ！]]></description>
			<content:encoded><![CDATA[<p>Photoshop CS3を起動しようとしたら、起動スプラッシュ表示中に突然強制終了する現象に見舞われた。</p>
<p>同じPCに入っているCS2もダメ。</p>
<p>スプラッシュの文字を追っていくと、どうやら「TWAIN メニュー項目を作成」というところで止まっているようだ。</p>
<p>うーん、最近何か入れた覚えはないけどなぁ…</p>
<p>とりあえず検索すると</p>
<p><a href="http://www.adobe.com/jp/support/kb/ts/229/ts_229050_ja-jp.html" target="_blank">TWAIN プラグインの読み込み中にアプリケーションが終了する（Photoshop Elements 4.0/5.0/Photoshop CS2/CS3）</a></p>
<p>これらしい。</p>
<p>原因となるドライバが不明なので、TWAINプラグイン自体外すことにした。説明の通りにプラグインのファイル名の先頭に「~（チルダ）」をつけるだけでOK。</p>
<p>会社で使ってるPCだからTWAIN経由ではスキャンしないしね。</p>
<p>で、思ったのは、AdobeのTechNoteに大抵の問題は情報があるらしいということ。</p>
<p>Photoshop他Adobe製品で起動しないとかの対応方法を探すには、ちゃんと正確にどこで止まったかを調べないといけないってことですな。基本だけど。「Photoshop 強制終了」とかで探すとハマるよ！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2009/07/photoshop%e3%81%ae%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%a8%e5%af%be%e5%bf%9c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

