読者です 読者をやめる 読者になる 読者になる

ファイルに対する画像を取得する(WPF)

WPFで、単にファイルに対する画像を取得しようとしたのですが、たったこれだけのことにも関わらず、 意外と、どこにもソースが落ちていない。もちろん、 WindowsAPICodePack を使えば、簡単にできるんですが、大なた過ぎて、ちょっと・・・っていう感じだっ…

Aero-Snap による Window サイズの変更を検出する

GetWindowPlacement では、ウィンドウが通常の状態でのウィンドウ座標と、実際にウィンドウが、最大化されている(SW_MAXIMIZE)のか、最小化されている(SW_MINIMIZE)のか、あるいは、通常の状態(SW_SHOWNORMAL)なのかが取得できます。従って、普通なら、この…

C#からネイティブDLLを呼び出す場合のVSからのデバッグのジレンマを解決する

「C#を使う最大のメリットって、やっぱり、Visual Studioですよね!」って自信を持って言いたいですね。という心境ではあるんですが、私の仕事はどっちかというとC++よりなので、どうしても、DllImportはお友達という側面があります。そうすると、プログラム…

特定のプロセスが開いているファイルの一覧を取得する

そんなん、下の奴を見れば終わり:HOWTO: Enumerate handlesっていう訳にもいきませぬ。 上の奴からたどれる範囲のコードでは、 32bit PID値に未対応 SYSTEM_HANDLE ではなく、SYSTEM_EXTENDED_HANDLE を使う。 ネットワーク共有上のファイルに未対応 \Devic…

XAMLでウィンドウの最大化・最小化・閉じるボタン群を制御する Attached Property

Attached Property の便利さに目覚めたので、最近はこういうのは全部、Attached Properyです。

vsjitdebugger

vsjitdebugger.exeというプログラムはコマンドラインからデバッガーを起動する。 vsjitdebuggger /?ってやると、ダイアログに、 --------------------------- Visual Studio Just-In-Time Debugger --------------------------- Microsoft (R) Visual Studio…

バッチファイルが管理者で起動されているかどうかを確認する

管理者のコマンドプロンプトでしか動かないバッチファイルの先頭で、ユーザーが管理者かどうかを確認する方法。コマンドとしては、 whoami /groupsで十分で、中に、BUILTIN\Administratorsとか、Mandatory Label\High Mandatory Levelがあることを確認すれば…

MUI

Windows Vista以降、Windowsのローカライズの方法に多少の修正が加わって、いわゆる、今までの各国語版というのがなくなった。パッケージとしては残ってはいるものの、システムとしては、ニュートラルなWindowsに対して、言語パックを足せば、何語版にでもな…

効率的なメモリブロックサイズ

とっても環境依存で実装依存な事なんですが、一方で、メモリ効率っていうのは非常に大事なファクターです。 特に小さな構造体をメモリにたくさん配置するような場合、メモリのアラインメント(データをCPUが効率的にアクセスできるきりの良いアドレスに配置す…

Qt を試したけど玉砕した。

注意 下の作業をしたけど、あんまりうまくいきませんでした。玉砕です。 ただいま、いろいろ試行錯誤中ですが、自分用にメモとして書いておきます。 Qt のダウンロード 今回は、 http://qt.nokia.com/ から、Qt 4.7.0 (qt-sdk-win-opensource-2010.05.exe) …

C++とC# unsafeで速度差を計測してみる

何となく、unsafeコードの速度が気になったので、.NET Framework 4.0上でのC#コードと、Visual C++ 2010のコードの速度差を計測してみました。 ちなみに、このコードは、いわゆる画像処理の速度差を計測することを前提とするものなので、w/h/strideといった…

Win32のバージョンリソース

EXEファイルにバージョンリソースを書き込むコードを書こうとググって見たところ、意外にもあまりまともな記事が見つからなかったので、自分で書いてみた。基本的には、VERSIONINFO ResourceからMSDNの記事をたどって、全体構造を把握するだけなんだけれども…

WICでEXIFを考慮したプロファイル読み込みを行う

JPEGやTIFFから画像を読み込むにあたって、プロファイルが付与されている場合の処理は、カラーマネジメントや、既存のIWICBitmapSourceからの構築のように処理すれば良い部分はあるのだが、一方で、EXIFでは、プロファイルを付与せずにカラースペース指定を…

Low Integrity Processでのテンポラリディレクトリ

Windows Vistaで導入されたLow Integrity Process(低整合性プロセス)は、主に、Internet Explorerなどで使われていますが、それ以外にも、prevhost.exe (エクスプローラのプレビューアを隔離するプロセス)で利用されていたり、Designing Applications to Run…

Internet Explorer 9 Test Drive

Internet Explorer 9 Test Driveとりあえず、エンジンだけテクノロジープレビューという感じですね。GUIは全然できてなくて、レンダリングエンジンとしてのIE9を評価してくれみたいな。レンダリングが、Direct2Dや、DirectWriteになってたり、JavaScriptのエ…

Visual Studio 2010 RC

待ってましたよ。RC。 唯一の問題は、vcprojとvcxprojの互換性の問題のみ。手持ちのシステムが、vcprojの仕様に依存しているので、それをアップデートする必要があるなぁ・・・という。Visual Studio 2010 Beta1でのスクリーンショットと比較すると、フォン…

プレビューハンドラで検索されている単語の一覧を取得する

Windows Vista/7では、IPreviewHandlerを実装することによってエクスプローラの右ペインにファイルのプレビューを表示することが出来る。 ところで、Windows 7では、ファイル検索時に、ファイル一覧では、検索された単語がハイライトされる機能まで実装され…

Windows Vista+KB971644は、Windows 7とほとんど一緒なんじゃない?

WIC一覧の取得に関しては、WIC一覧の取得がWindows 7で動かないで書いたとおり、Windows 7では動かなかったんですが、どうやら、KB971644を適用したWindows Vistaでも動かないみたいです。面白いのは、WindowsCodecs.dllが、Windows 7では、6.1.7600.16385な…

ボリュームがマウントされているパスの一覧を取得する

FileSystemWatcherとか、ReadDirectoryChangesWは、ファイルの更新とかを監視するには便利な関数ですが、これらでサブディレクトリを監視するようにしても、サブディレクトリがマウントポイントで、他のボリュームが接ぎ木されているような場合にはそのマウ…

OACR Warnings

DDKというか、Windows Driver Kitでビルドしていたら、警告が表示された。 OACRっていうのが動いているなぁとは思っていたけど、こういう風に警告が表示されるんだと初めて知る。内容は、vsprintfなんて危険なAPI使うなよというもの。事前に_vscprintfでバッ…

WIC一覧の取得がWindows 7で動かない

WIC一覧の取得に書いた、 CLSID\{7ED96837-96F0-4812-B211-F13C24117ED3}\Instanceの下のエントリからWICでデコードできるファイルの種類の一覧を作成する方法だが、どうやら、Windows 7では動かないらしい。標準のコーデックはここに列記する以外の方法で設…

extern "C++"

Windows Driver Kit for Windows 7 and Windows Server 2008 R2をよく見ると、 extern "C++" というのがある。これは何ですか・・・。理屈から言うと、 extern "C" { // ここはC extern "C++" { // ここはC++ } } という感じで、入れ子にして、Cのコードの中…

Windows Driver Kit for Windows 7 and Windows Server 2008 R2

RTMのはずなんだけど、 c:\winddk\7600.16385.0\inc\api\propkeydef.h(32) : error C2664: 'memcmp' : cannot convert parameter 1 from 'const GUID' to 'const void *' No user-defined-conversion operator available that can perform this conversion, …

LNK1103: debugging information corrupt; recompile module

Windows 7関連のコードを書こうとすると、必然的にWindows SDKのベータバージョンをインストールすることになるんですが、インストール後に迂闊に、Windows SDK Configuration Toolで、VS2005までチェックをしたりしてしまい、VS2005でなんやかんやをコンパ…

Software Update

ITMediaの記事、Google、自動更新ツール「Google Update」の仕様を変更によると、Google Software Updateが将来的に(?)、タスクスケジューラを使ったソフトウェアアップデートに移行するようだ。 と、タスクマネージャを開いてみたけど、既にGoogle関連のプ…

メイリオの罠

まぁ、自分のコードがあんまりちゃんとテストされていなかったと言えばそれまでなんですが、自分の作っている仮想プリンタドライバでは、OEMTextOutをフックして、印刷されたテキストをテキストデータとして出力するような処理をしています。 一般的に、OEMT…

Visual Studio 2010 Beta1

Visual Studo 2010 Beta1をMSDNからダウンロードしてきて、とりあえず、Vista x64にインストールしてみました。WPFで実装されているっぽく、テキストエディタのフォントレンダリングには、見慣れない感じがある。テキスト選択なんて、もろにWPFっぽい。ただ…

x64で動かないAnyCPUな.NETアプリ

64-bitなWindowsを使っていると悲しくなるのが、特定のプログラムが、作者の不注意によって64-bitで動かなくなっていることが良くあること。 .NETのアプリだとありがちなのが、本体は、Pure .NETで作られていて、ライブラリとして、32-bitのDLLを利用してい…

Internet Explorer 8 beta 2

いろんなところで既に記事があるので書くべきことはあんまりないんですが、ドロップダウンリストやコンボボックスの外見が変わっていました。IE7 IE8 beta 2 あとなんか、全体的にコントラストがあがったような感じ。IE7のようなGUIの薄さというか、ほんわか…

_BIND_TO_CURRENT_VCLIBS_VERSIONについてまじめに調べてみる

時間ができたというか、眠くて仕事ができないので(???)、現実逃避気味に、調べてみることにした。まず、_BIND_TO_CURRENT_VCLIBS_VERSIONマクロは、誰が見ているのかというと、これは、crtassem.h (Libraries Assembly information)というヘッダ。基本的に、…

再考:Visual C++ 9.0 SP1のランタイム問題

先日、「Visual C++ 9.0 SP1のランタイム問題」で書いた問題は、本当は問題なのかどうなのか。仕様といわれればそれまでっぽい。難しいのは、いままで、VS2003, VS2005は、SP1が当たったバージョンと当たってないバージョンでランタイムが異なっていたことだ…

Visual C++ 9.0 SP1のランタイム問題

問題と言うほどでもないのだけれども、VC++9.0SP1でプログラムをリンク(/MD)すると、次のようなmanifest(これは64-bit版)が埋め込まれる。 <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> </requestedprivileges></security></trustinfo></assembly>

Visual Studio 2008 SP1

やっと、Visual Studio 2008 SP1がリリースされました。いろいろな修正がなされていますが、個人的に気になるのは、前回書いた、「Visual C++ 9.0のランタイム問題」について。そのまえに、一応、コンパイラバージョンについて調べておくと、VC++ 9.0では、 …

ユーザーに「サービスとしてログオン」権限を付与する

特定のサービスをユーザーアカウントで起動しようとすると、ユーザーにサービス権限がないことが問題になることがある。特にVistaでは、Administratorsに所属していてもこの権限がないので、いろいろとやっかいだ。これを解決するために、 // espresso3389と…

C#でUACに対応する

Windows Vistaで一部の処理で管理者権限が必要だが、起動時に管理者権限を要求するまでもないようなアプリがある。タスクマネージャやProcess Explorerはその典型例だが、こういうアプリにはシールドアイコンが付加されたボタンやメニューがある。このアイコ…

リモートプロセスのコマンドラインパラメータを取得する

自分のプロセスのコマンドラインを取得するのは非常に簡単だ。main関数が存在するならargc, argvで取得できるし、そうでなければ、__argv, __argv, (__wargv/__targv)で取得することもできる。また、APIとしては、GetCommandLineというものもある。好んで使…

JScriptのevalを使う

JScriptのevalを簡単なパーサーとして使うぐらいは、探せば腐るぐらい見つかるけど、戻り値の型についての記述は意外と少ない。 とりあえず、JScriptからの戻り値をstringにせずに返してもらって、その型を調べてみるコード。 using System; using System.Te…

ShellExecuteExで起動したアプリの制御

アプリを無理矢理動作させて、無理矢理印刷させるという、ある意味使い古されたスキームなんだけど、ウェブを探してもShellExecuteExを使った例は少ない。理由は簡単で、つい最近まで、プロセスハンドルから、プロセスIDを取得できなかったという簡単なこと…

AssocCreate on C#

P/Invoke.netにもなかったので作ってみた。COM関連のマーシャリングは意外と難しい。というか、しばらくやっていないと完全に忘れてしまう。 class Assoc { public static string GetAssociatedCommandLine(string ext, string verb) { try { object obj; As…

WOW64下での印刷

すっかり忘れていたので備忘録として書いておきます。WOW64の下で動作するアプリケーションが印刷を行う場合、その処理は、WOW64(32-bit)のプロセスから起動されたsplwow64.exeという代理プロセスによって行われます。詳しくはわかりませんが、プリンタドラ…

WIC一覧の取得

上記の方法で、いろいろなファイルが読み込めることがわかったが、一方で、WIC経由で開くことのできる(はずの)ファイル形式の一覧がほしいことがある。端的に言えば、「ファイルを開く」ダイアログのフィルターを作ったりするときに、*.*では格好悪すぎる。 …

画像を保存

処理が完了した画像を保存するには、IWICBitmapEncoderを利用する。 IWICBitmapEncoderのインスタンス作成時には、WIC GUIDs and CLSIDsにあるGUID_ContainerFormat*の中から、自分が使いたいフォーマットのエンコーダを選択する。 // TIFFエンコーダを作成 …

カラーマネジメント

WICでは、カラーマネジメントシステム(CMS)の利用もかなり簡単になっており、これらは、IWICColorTransformを利用して行う。また、上記のサンプルで、IWICBitmapFrameDecodeがIWICBitmapSourceにキャスト(QueryInterface)可能だったように、IWICColorTransfo…

Windows Imaging Componentで画像を読み込む

Windows Imaging Component (WIC)は、.NET Framework 3.0でも利用されている画像処理のフレームワークで、Vistaでは標準インストールされており、Windows フォトギャラリーなどでも利用されているほか、Windows XPでも、.NET Framework 3.5をインストールし…

low-fragmentation heap

会社で開発しているアプリケーションで、プログラムの[閉じる]ボタンを押しても数秒間固まったままになるものがあった。別に、WaitForXXXObject(s)しているわけでもないし、そんなに重い処理をしている訳でもない。理由がわからないまましばらく放置していた…

Visual C++ 9.0のランタイム問題

Visual C++ 9.0を使って共有DLL(/MD)でビルドしたコードを配布しようとすると(C++/CLIを利用すると必然的にこの状況になる)、CRTのDLLを配布する羽目になるんですが、これには、3つの方法があることになっています。 vcredist_x86.exeを利用する この方法は…

WOW64のファイルシステムのリダイレクトをOFFにする

会社で、WiXを使って、とあるプロジェクトのインストーラを作っているのですが、ほとんどは.NETなものの、一部のコードだけ、ドライバに依存するため、64bit対応するに当たって、system32(system64ではないんだなこれが。)にファイルをコピーしないといけま…

The remote procedure call failed

IDataObjectとIDropSourceを作って、エクスプローラ側にIStream経由でファイルをドロップする処理を作っているのだが、特定の環境(というか、家のWindows Vista x64環境)で、というダイアログが出て、アプリケーションが死んでしまう。アプリケーション側は…

IIS FTPで一時的にフォルダを公開する

ユーザー認証はしない(anonymous)けど、接続元IPを限定することによって、ある程度のセキュリティは維持でき、一定時間が過ぎると仮想ディレクトリごと削除する。そんな機能が必要になったので、適当に作ってみました。やってみると、意外と難しくない。とい…

Win32 File-ID APIs

Windows Vista/2008からは、File IDによるファイル処理が標準で実装されている。これは、NTFSとかでGetFileInformationByHandleを使って取得できるBY_HANDLE_FILE_INFORMATION::nFileIndex*と同じもの。ファイルIDがわかっていれば、IDとドライブ識別のため…