今さら聞けない、教えてもらえない!! Unicode /マルチバイト文字対応 国際化VC ++ プログラミングの基礎!!

皆様、こんにちは。PlatformSDK (Windows SDK) サポートの shfujita です。 ついに今年も残すところあとわずかとなりました。 2011 年の締めくくりに「Unicode とマルチバイト文字」についてお話したいと思います。 本題に入る前に、”Unicode 文字セット” と “マルチバイト文字セット” とは何かご存知でしょうか。 まずは “Unicode” と”マルチバイト” とは何ぞや!?ということからお話したいと思います。 Unicode 文字セットとは、1993 年に ISO の 1 つとして定められた文字コード規格で、当初は 2 バイト文字で世界中の文字を表そうとしたのですが、現在は 4 バイト文字まで対応するようにしています。規格当初の 2 バイト文字は UCS-2、4 バイトまで拡張したものは UCS-4 と呼ばれています。プログラム上で Unicode はワイド文字として扱われています。 マルチバイト文字セット (Multi-Byte Charcter Sets : MBCS) とは、「多バイト文字」と表現されて「2 バイト以上の文字」を指すこともありますが、MSDN の規定では「1 バイトおよび 2 バイト文字」となっております。シングルバイト文字もダブルバイト文字もマルチバイト文字に含まれます。Shift-JIS はここに含まれます。 ここからいよいよ本題です。 Unicode として文字を扱う場合とマルチバイトとして文字を扱う場合は文字の ”型”…


WinSock (Windows Sockets)ってOS毎に挙動が異なる場合がありますが、決して不具合(バグ)ではありません。。。。

こんにちは小泉です。 季節がらクリスマスの話題といきたいのですが、今回もいつもの如くクリスマスのような時事ネタは全く無視して、WinSock API  について記載させていただきますね。 WinSock API を利用して通信プログラムを開発する場合、下層部で利用する通信プロトコルはTCP や UDP を利用するシナリオが多いかと思います。このため、OS の TCP/IP のプロトコル スタックの仕様変更や機能向上に合わせて、WinSock API の動作にも OS 毎に違いが発生するわけです。もちろん、この違いは WinSock API の不具合(バグ)ではなく、れっきとした仕様動作となります。というわけで、そろそろ Windows 8 の足音も聞こえてきたので、ここで少し既存の OS に関して WinSock API の挙動の違いをおさらいしてみましょう。 ( なお、本件は WinSock  API  について記載していますが、.NET Framework の System.Net.Sockets 名前空間で提供している Socket、TcpClient、NetworkStream クラスでも同じ動作となります。)   SYN 攻撃保護(Syn Attack Protect) Windows Server 2003 SP1 以降では、Dos 攻撃の一種である SYN 攻撃に対する保護機能が既定で有効となっております。このため、Windows Server 2003 SP…


Windows サービスあれこれ (2)

こんにちは、Platform SDK (Windows SDK) サポートの tomoshi です。前回の「Windows サービスあれこれ」から、随分間が空いてしまいました・・・皆様、このシリーズ覚えておいででしょうか? 今回は、ちょっと便利な・・・そう、「知っ得★」な simple サービス サンプルのカスタマイズ方法がテーマ!ということで、前回と同様、Windows SDK から提供されている simple サービス サンプルをベースに「あれこれ」ご紹介させていただければと思います。   simple サービス サンプルをインストールすると、コントロール パネルの [管理ツール] – [サービス] から ”Simple Service” サービスを選択して、各種プロパティを参照することが可能です。     このプロパティ ダイアログ上には、[全般]、[ログオン]、[回復]、[依存関係] という 4 つのタブが用意されています。各タブから、この Windows サービスに対する詳しい設定を参照し、手動で編集することが可能です。 ただし・・・中には、編集できない設定もございます。たとえば [全般] タブでは、[サービス名] や [表示名] が編集できませんよね。「SimpleService」というサービス名も「Simple Service」という表示名も、それはそれはシンプルで素敵なのですが・・・たまには変更してみたいと思うこと、ございませんでしょうか。ご自身で開発中の Windows サービスと同じサービス名・表示名にしてテストしたい・・・と思うこと、ございませんでしょうか。   そんな時、この simple サービス サンプルが本領を発揮いたします!   simple サービス…


カスタム Credential Provider で自動ログオンを行う方法

PlatformSDK( Windows SDK) サポートの mitsuruwです。 今年の夏もいよいよクライマックスにさしかかりましたが、皆様いかがお過ごしでしょうか。我が家は今年一度もクーラーをつけていません。去年も一年通して 3 回しかつけなかったのですが、案外扇風機でもなんとかなるものです。しかし、クーラーを使用していないため、この季節、アイロンだけは本当に大変です。なんと驚くべきことに我が家では洗濯とアイロンは私の仕事なのです!洗濯機は全自動なんだからアイロンも全自動があれば良いのに、といつも思います。 さて、アイロンは自動でかけてもらえませんが、Windows のログオンに使用される Credential Providerでは自動でログオンさせる仕組みが用意されています。今回はカスタムの Credential Provider を使用して自動でログオンを行う方法をご紹介したいと思います。 Credential Provider による自動ログオン すでにログオン アカウントとパスワードが事前に判明しているとき、カスタム Credential Providerを使用して自動でログオンを行いたい場合があります。これを実現するためのインターフェースとして、Credential Provider には以下の 2 つが用意されています。  1) GetCredentialCount() メソッドを使用した自動ログオン  Title : ICredentialProvider::GetCredentialCount Method (Windows)  URL   : <http://msdn.microsoft.com/en-us/library/bb776039.aspx>  2) SetSelected() メソッドを使用した自動ログオン  Title : ICredentialProviderCredential::SetSelected Method (Windows)  URL   : <http://msdn.microsoft.com/en-us/library/bb776034.aspx>  それぞれのインターフェースについて、もう少し詳しく見てみましょう。 1) GetCredentialCount() メソッドを使用した自動ログオンCredntial Provider は、その中に複数の資格情報タイルを持つことが可能です。例えば、前回ご紹介した SampleCredentialProvider も “Administrator” 用と “Guest”…


Windows SDK ツール: TcpAnalyzer のご紹介

~~~TCP通信のボトルネックを調査する~~~ こんにちは、ソケット通信、デジタル署名、証明書、暗号化プログラミングのサポートをさせていただいている小泉です。  普段、TCP通信のアプリケーション開発や、トラブルシューティングをされているみなさまは、自身の構築したシステムのパフォーマンス チェックはどのようにされておりますでしょうか。パフォーマンス チェックというと高価な解析ツールが必要なイメージがあり、開発の初期段階、特にプロトタイプ開発では、おざなりにされてしまいがちですよね。今回はそんな時に簡単便利な Windows SDK ツールに付属の TcpAnalyzer のご紹介をさせていただきます。  TcpAnalyzer  は、TCP の接続単位で送信側アプリケーション、受信側アプリケーション、ネットワークのいずれにパフォーマンス のボトルネックがあるかを判断できる便利な無償ツールでございます。これもまた無償ツールである 「Microsoft Network Monitor」と組み合わせることにより、どのようなデータを送受信した際にボトルネックが発生したかが具体的に確認できますので、併せてご利用ください。「Microsoft Network Monitor」 については、下記をご参照願います。ご存じですか、Microsoft Network Monitor はコマンドラインでも操作できます  1.     TcpAnalyzer でできることTcpAnalyzer は TCP の接続単位で下記の値をチェックすることができます。つまりソケット単位やコネクション単位でのパフォーマンスのチェックが可能です。  接続の状態(LISTEN,ESTABLISH,CLOSE_WAITE 等) RTO(再転送タイムアウト)値 1秒間あたりの平均送信データ量 Duplicate ACK の送受信数 未送信データ量 送信データのうち、通信相手から ACK が返されていないデータ量 受信データのうち、アプリケーションが未取得となっているデータ量 再転送率  2.     TcpAnalyzer の利用方法TcpAnalyzer の起動から、データの収集、ログの保存までの一連の手順を下記にご紹介させていただきます。操作自体は非常にシンプルですので、是非お試しください。 ①      TcpAnalyzerを起動します。「C:\Program Files」 に Windows SDK をインストールした場合、 「C:\Program Files\Microsoft…


Windows SDK ツール:Application Verifier のご紹介

前回は Windows SDK ツールそのものをご案内いたしましたが、今回は、それに同梱されている Application Verifier (アプリケーション ベリファイア) についてご紹介しましょう。 アプリケーション ベリファイアは、アプリケーションが、ある程度完成した段階で、検証のために使用し、内在しているかもしれない問題を検出してくれるツールです。メモリ リークの検出には LeakDiag ツール、ヒープメモリに関する検出には DebugDiag や PageHeap ツールなどがありますが、アプリケーション ベリファイアは、いろいろな検証項目をまとめた便利ツールでもあります。デバイス ドライバーを開発される方なら、ドライバー ベリファイアの名前をご存じかもしれません。今回は、アプリケーション側の検証ツールです。 どこにインストールされているの? Windows SDK を、既定どおりにインストールした場合、スタート ボタンから表示する [すべてのプログラム] に [Application Verifier] が登録されています。また、以下のフォルダーに関連ファイルが登録されています。 C:\Program Files\Application Verifier Application Verifier.lnk ファイルは LNK ファイルで、実体は C:\Windows\System32\AppVerif.exe にあります。つまり、コマンド プロンプトから、AppVerif.exe を指定して起動することもできます 使用方法は簡単 まずは、起動してみましょう。スタート ボタンから、[すべてのプログラム] を選び [Application Verifier] を指定します。(管理者権限が必要です。)以下のようなウィンドウが表示されます。(申し訳ないですが、このツールに日本語版はありません。そんなに複雑なメニュー構成ではありませんし、数個のメニューしか使うことはないので、覚えてしまいましょう。)   アプリケーションを検証するには、以下の手順を実施します。 1. テストしたいアプリケーション名を登録します。[File] メニューの [Add…


UI Automation のススメ

はじめまして!!Platform SDK (Windows SDK) サポート チームでご支援をさせていただいております kazuyuk です。hiroakii さんと同様に ユーザーインターフェース(UI) を担当させていただいています。 さて、初回となります今回、とても便利なのにあまり利用されていないと思われる UI Automation についてご紹介させていただこうと思います。まずは、これを見る皆さんに興味をもっていただいて何が出来るかを知ってもらう事が目的になります。少々お時間を割いていただければ幸いでございます^^   1. UI Automation とは何か アクセシビリティという言葉を聞いたことはありますか。端的に説明すれば、「様々なものの使いやすさ、利用しやすさの度合い」を指し示している概念といった所でしょうか。様々な事情を持つ人が様々なインターフェースを通じてより容易に目的を果たすことがが出来るインターフェースが求められてきています。コンピューター上でこのようなアクセシビリティの向上を支援する事を目的として作られたのが UI Automation です。 では、実際に UI Automation はどんなものかというと、様々な形で提供されているアプリケーションの UI を外部から包括的に操作できる事を目的として作られた API 群で、UI 情報を収集するためのツリー構造や、状態の変化を検知するためのイベントを通じて、様々な UI 情報にアクセスしそれを操作することができます。例えば、教育や障碍を持つコンピュータ ユーザーの補助のために自動操作によりユーザー操作を支援するといった事が考えられますし、また、自動テストのフレームワークとしても活用される事を目指しており、スクリプトからのアクセスも出来るようになっています。   2. UI Automation の利点 UI Automation を利用する事により様々なインターフェースに対して、ほぼ同一のインターフェースでアクセスできることができます。例えば、通常の Win32 ウィンドウアプリケーションでは、テキストボックスやコンボボックス、リストボックスなど様々な UI が全てウィンドウで構成されて、親子関係を構築しながら同期して表示されています。このため、Spy++ (*1) を利用することでその構造を見る事ができたり、ウィンドウを列挙することによりその内部を確認することなどができます。Internet Explore などのブラウザーにも、いろいろな UI を使用して操作することができていますが、ここで表示する HTML の画面はというと、独自にレンダリングが行われており、ウィンドウを利用した内部構造の確認はできません。(Spy++ で確認すると、HTML…


ウィンドウが表示されない

こんにちは。 PlatformSDK( Windows SDK) サポート チームで、ユーザーインタフェース(UI) を担当していますhiroakii です。UI というと漠然としていますが、主には Windows Forms、WPF、Silverlight などの目に見える部分の技術が該当します。もちろん .NET だけでなく Win32API で作成されたウィンドウなどもサポートしています。 本ブログの中では、UIに関連する情報として、開発に役立つツールやプログラム方法などをご紹介していきたいと思います。   ウィンドウが表示されないUI といえば、「ウィンドウ」や、ウィンドウ上に配置されるボタンなどの「コントロール」が中心となりますが、それらが「想定していた通りに表示されない」というご質問をいただきます。しかし、その状況はさまざまで、例えば、 ・そもそもウィンドウが表示されていない。表示の前に処理が止まっている。・表示しているが、他のウィンドウの後ろに表示されてしまっている。・なぜか非表示 (Hide) になっている。・ディスプレイの表領域外に表示されている。 など多くの状況があります。 また、状況が同じでも、それに至った原因はそれぞれで、一概にこれが原因と判断することができません。ということで、見た目だけでは原因を特定することが難しい問題ですが、まずは、どういう状況なのかを判断するため、ツールを使ってウィンドウの状態を確認してみることをお勧めします。 ウィンドウやコントロールの状態を確認するツールとしては、Visual Studio などに含まれる Spy++ (spyxx.exe) が代表的です。Visual Studio 2010 をインストールされている場合、[スタート メニュー] から [すべてのプログラム] – [Microsoft Visual Studio 2010] – [Visual Studio Tools] – [Spy++] より実行できます。 Spy++ は、Win32 API や MFC などで…


Windows サービスあれこれ (1)

こんにちは、Platform SDK (Windows SDK) サポートの tomoshi です。先日、Credential Provider の記事を書かれた mitsuruw さんと同じく、主に Windows のベース テクノロジーに関連したプログラミングのサポートを担当しています。一口に “Windows のベース テクノロジー” と申しましても、間口も奥行きも広大なテクノロジー エリアなのですが、中でも Windows サービスやイベント ログ、タスクスケジューラやパフォーマンス カウンタ関連のプログラミングを担当しています。どうぞよろしくお願いいたします。 今回は、Windows サービスを開発される際に、是非ご活用いただきたいサンプル プログラムについて、ご案内させていただきます。今回は、と申しておきながら、シリーズ物になりそうな予感です・・・!どうぞお付き合いくださいませ。   ご存じのとおり、Windows サービスというプログラムは、様々な言語で開発していただくことが可能です。ATL や .NET Framework のプロジェクトの場合、Visual Studio のプロジェクト ウィザードから ”Windows サービス” という項目を選ぶと、Windows サービスのプロジェクトをすぐに作成することが可能です。  ATL .NET Framework の C# や VB.NET Native の C/C++ ところが・・・Native の C/C++ のプロジェクトの場合は、残念ながら “Windows…


ご存じですか、Microsoft Network Monitor はコマンドラインでも操作できます

こんにちは、ソケット通信、デジタル署名、証明書、暗号化プログラミングのサポートをさせていただいている小泉です。通信プログラムの開発やネットワーク関連のトラブル シューティングを実施されている方は、既にご存じの方も多いかと思いますが、マイクロソフトではネットワーク キャプチャを取得するための「Microsoft Network Monitor」 (通称 NetMon (ネットモン))を無償で提供しています。本日は、このネットワーク キャプチャ ツールの便利な使い方をご紹介いたします。 皆様は、下記の手順にてネットワーク キャプチャ ログを取得されているのではないかと思います。 <ネットワークキャプチャ取得方法>1)     Network Monitor 3.4 を起動します。2)     Network Monitor 3.4 の “Start Page” タブで “Create a new capture tab…“  をクリックし、新規のネットワークキャプチャ タブを起動します。3)     [Capture] メニューから [Start] をクリックし、キャプチャを開始します。 4)     パケットが取得できたら、[Capture] メニューから [Stop] をクリックしキャプチャを停止します。 5)     [File] メニューの [Save As…] をクリックし、任意な名前で保存します。 そんなに難しい操作ではないですね。さてさて、日々ネットワークと格闘されている開発者や運用者の皆様、「こんな操作でさえ面倒だ」、「ネットワーク キャプチャをお客様に取得してもらいたいのだけど、ちゃんと取得いただけるか不安」と感じた事はありませんか。 そんな時!!上記の5つの手順で採取できたネットワーク キャプチャが、下記の1つのコマンドで採取できてしまうとしたらどうでしょう!! コマンド構文:nmcap /network <Network Interface> /capture…