C/C++でWindowsプログラミングをやり始めたとき、誰もが一度は嫌になるあの謎のデータ型。 "LPCTSTR"なんてのはその典型例です。 しかし、これが何かを知らぬまま放っておいてる、ということが意外とありがちなんですよね。 というわけで、一応簡単に解説しておくことにしよう、と思ったまでです。 ※ 開発環境は、Microsoft Visual C++ 2005 を想定しています。 1.UNICODE 文字コードとはつまり、数値と文字の関係を示したものです。 文字'a'は128で表し、文字'b'は129で表し・・・と文字と数値が一対一で対応して定められています。(数値は適当です) UNICODEも、その文字コードの一種で、古い文字コードのASCIIに比べて新しいものです。 NT系のWindowsには全て対応しているので、現在のほとんどの環境がUNICODE対応となっています。 だったら
大手コンピュータ・メーカー勤務。入社以来10数年をソフトウェア開発の現場で過ごし,その後ソフトウェア品質部へ異動。現場への技術支援や品質教育開発などを主に行っている。「APIで学ぶWindows徹底理解」(日経BP社)などを執筆。 2007年1月末の一般向け出荷を控え,Windowsの世界では新バージョンVistaが注目を集めている。開発者にとってWindows Vistaの一番のポイントはと言えば, .NET Framework 3.0を標準で搭載する点を挙げる人が多いだろう。雑誌にせよWebにせよ,最近のWindowsプログラミングの記事のほとんどは .NET向けだ。マイクロソフトも,これまでネイティブ・コードでの開発が主流だったC/C++開発まで, .NETへの移行を促そうとしている。実際,マイクロソフトが無償で配布しているC/C++統合開発環境Visual C++ 2005 Exp
UsefullCode.net Visual Studio 2005/2008/2010やandroid SDK/NDKでの開発者向けに便利なソースコードを提供 This site provide you with useful source codes under 'USEFULLCODE license'. 前回までにウインドウにJPEG画像を表示する処理を作成した。しかし表示される画像は縦横比に関係なく拡大縮小されてしまっている。そのため今回は縦横比を保ったまま拡大縮小させる。 ImageViewerView.hを開く。ここで赤枠内を修正する。この部分は画像表示をするクライアント領域の取得と画像の描画をしている。 DraiImage()は第一引数にImage、それ以降の4引数はそれぞれ描画開始XY位置と描画サイズを示している。 赤枠のように変更した。かなり長いソースコードになってしま
はじめに システムファイルのリバースエンジニアリングを行っていると、Windows File Protection(WFP)の存在がとても面倒に感じます。セキュリティ的観点から見ると、WFPはとても重要なシステムですが、プログラマや解析者からすると少しやっかいな存在です。よって私は、どうにかしてこのWFPを制御できないか、と考えました。このテキストは、その方法を模索した結果を書き記したものです。 私の環境は「WindowsXP SP2」であるため、このテキストは基本的にその環境に従って書かれています。WFPはWindowsのバージョンによって多少の違いがあるため、もしかしたら他の環境では勝手が違うかもしれません。あらかじめご了承ください。 ./wfp.zip なお、今回作成したサンプルプログラム(./wfp.zip)をまとめてアップしました。ソースコードはこのテキスト内にも書かれてあります
Windows-API による文字列比較オブジェクト やっかいな文字列処理 コンピュータが扱う文字がASCIIだけであった旧き良き時代には、プログラマはとても幸せでした。ふたつの文字列の大小を比較するには標準関数 strcmp を呼び出すだけでよかったのですから。 ところがコンピュータが日本語と言うものを扱わねばならなくなってからというもの、strcmpだけでは済まなくなってしまったのです。 まず、ASCIIだけでなく、JIS,Shift-JIS,EUCなどの様々な文字セットに対して正しく処理しなければなりません。 幸いにもこれら文字セットについては内部的にはUnicode(wchar_t)に変換しておくことで文字セットによる扱いの違いを吸収することができます。 日本語処理の大きな問題のひとつは文字列の比較です。 すなわち、文字列の比較の条件として、 全角/半角を区別する/しない ひらがな
SQLite Vesion 3 DLL版 を呼び出すC/C++アプリケーションの構築 SQLite Version 3 の DLL の導入と、C/C++アプリケーションからそれを使う方法を解説します。 使用する開発ツールは Visual C++ 6.0 です。 開発ターゲットは簡単なコンソールアプリケーションとします。 ビルドはコマンドライン環境で行います。統合環境上のプロジェクトで行う場合にはビルド手順を適当に読み替えてください。 Back to index Download sample-codes-using-sqliet3-dll.zip Step1. 必要なファイルをダウンロードする SQLite本家サイトのダウンロードページから、次の2つのzipファイルを入手します。 ファイル名末尾の数字はリリースバージョンであり、その数字は頻繁に変わります。 3_3 以降の適切なものを選んで
今回は様々なシステム情報の取得方法を説明します。 GetVersionEx GetVersionEx()でOSのバージョンが取得できます。 OSVERSIONINFO osvi; memset(&osvi,0, sizeof(OSVERSIONINFO)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx( &osvi ); OSVERSIONINFOは次のように定義された構造体です。 typedef struct _OSVERSIONINFO{ DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; TCHAR szCSDVersion[128]
戻る ○困った! printf() で直接出力できない Windows のプログラミングを初めて行ったころに、困ったのは printf() で、 直接出力することができないということでした。 また、動作のよく分からないAPIを使うとき、サンプルプログラムを手に入れて ソースを見ても、見慣れないイベント駆動の動作を解析するのに大変苦労 しました。 このようなとき、手軽に動作をトレースでき、不要になってもコメントアウトする 必要のないデバッグログがあると便利です。 ここでは、そのようなデバッグルーチンについて考えてましょう。 7-1 動作のトレースとデバッグログ出力機能について ○動作のトレース デバッグや動作のトレースは、作成したアプリケーションがトラブルを起こしたとき だけとは限りません。モジュールを単体テストを行うときにも利用できます。 Windows アプリケーションは、メッセージによ
目次 はじめに 1. Windowsフックのテクニック 2. CreateRemoteThread+LoadLibraryのテクニック プロセス間通信 3. CreateRemoteThread+WriteProcessMemoryのテクニック このテクニックを使ってリモートコントロールをサブクラス化する方法 CreateRemoteThread+WriteProcessMemoryのテクニックはどこで使用すべきか おわりに 付録 References はじめに CodeGuruのサイトにはパスワードスパイのチュートリアルがいくつか投稿されていますが、それらはいずれもWindowsフックを利用しています。このようなユーティリティを作成するには、他に方法はないのでしょうか? 実はあります。しかし別の方法を説明する前に、この問題について簡単に復習しておきましょう。 コントロールのコンテンツを
パスワード閲覧ソフトというものがあります。例えば、有名なもので「パスみえ2000 1.00」があります。vectorなどで検索するとざっと4つほどみつかりますが、キーワードを変えるともっとあるかもしれません。しかし、それらはすべてソースコードが公開されてなかったので、仕組みを調べようにも、どうやっているのか分かりません。多分、この仕組みを知りたいと思ってる人は少なからずいるのではないか、と思い、今回の記事を書いてみました。 実際、ものすごく簡単な仕組みなので、どこかのサイトに紹介されててもよいと思ったのですが、検索してみると無いのですよね(もし見つけたらkenji@ruffnex.oc.toへ教えてください^^;)。なので自分で書いてみました。 ということで、今回はこのツールを実際に作ってみます。環境はWindowsXP + VC++.NETですが、Borland C++ 5.5.1でも確
IE4.0からIEコンポーネントを使えるようになりました。IEコンポーネントは、Donutなどの国産タブブラウザのほか、色々なアプリケーションで利用されています。 IEコンポーネントは、MFCのCHTMLViewを使えば簡単に作ることができますが、MFCを使いたくない場合もあります。この場合、ATLを選択するのが通常ですが、世の中のドキュメントの大半は ATL と AppWizard を組み合わせた使い方しか載っていません。ここでは、SDK的にIEコンポーネントを使う方法を取り上げます。 サンプルコードはこちら(35.9KB)(2002.12.15、プリコンパイル済みヘッダが見つからないエラーが出ないようにしました)。これをDLして解凍してください。詳細は、ソースファイルの中のコメント参照と言うことでお願いします。100行ほどのソースですので、ぜひ読んでみてください。 このサンプルでは、ダ
文字列を扱う型としてよく知られているchar型はsizeof(char)=1バイトの型だ。 charに代入できるのは半角文字1文字で、漢字など2バイトからなる全角文字を代入したいとき は(微妙な表現だが)2つのcharが必要になる。 ユニコードを扱うための型として用意されたのがこのwchar_tだ。sizeof(wchar_t)=2バイトの 型でありchar型よりも使用バイト数が多い。 wchar_tに代入できるのはユニコードでの1文字で、半角や全角文字などの区別はない。 ヘッダーの中では以下のように宣言されている。 typedef unsigned short wchar_t; typedef unsigned short WCHAR; // wc, 16-bit UNICODE character つまりwchar_tとWCHARのどちらもunsigned short型として定義されて
解説 COMインターフェースは結果をHRESULT型で返すことが多い。しかしその戻り値を単純にFAILEDやSUCCEEDED マクロを使って判定すると実行時に例外などのエラーが発生することがある。 それは失敗時にS_FALSEを返す関数があるためだ。この値はSUCCEEDEDマクロでTRUE、FAILEDマクロでFALSE となる「成功」タイプの値だ。成功とは言うもののFALSEという微妙な値になっている。 BOOL型でも同じような問題がある。BOOLの場合はif(ret == TRUE)は正常に判定できないことがあるので if(ret != FALSE)やif(ret)のように成功判定をする。しかしHRESULT型の場合は単純にif(!FAILED(hr))の ようには解決できない。 HRESULT関連の実装 HRESULT型でよく使われるS_OKやSUCCEEDEDマクロなどはヘッダ
Windows Win32 C/C++ プログラム実行環境指定マクロ値について( ..)φメモメモ ----- WINVER, _WIN32_WINNT, _WIN32_WINDOWS ----- Windows 95 WINVER=0x0400 _WIN32_WINDOWS=0x0400 Windows 98 WINVER=0x0410 _WIN32_WINDOWS=0x0410 Windows Me WINVER=0x0500 _WIN32_WINDOWS=0x0500 Windows NT 4.0 WINVER=0x0400 _WIN32_WINNT=0x0400 Windows 2000 WINVER=0x0500 _WIN32_WINNT=0x0500 Windows XP WINVER=0x0501 _WIN32_WINNT=0x0501 Windows Server 2003
すべての Microsoft 製品 Microsoft 365 Office Windows Surface Xbox セール サポート ソフトウェア Windows アプリ OneDrive Outlook Skype OneNote Microsoft Teams PC とデバイス Xbox を購入する アクセサリ VR & 複合現実 エンタメ Xbox Game Pass Ultimate Xbox Live Gold Xbox とゲーム PC ゲーム Windows ゲーム 映画とテレビ番組 法人向け Microsoft Azure Microsoft Dynamics 365 Microsoft 365 Microsoft Industry データ プラットフォーム Power Platform 法人向けを購入する Developer & IT .NET Visual Studi
パスまわりの規準は怪しい。私が知らないだけかもしれないが、資料も集まらないし、 一貫した定義はどこに置いてあるのだろうか。 とりあえず、Path* APIやその他のMS製ルーチンでどのように判定されるかを調べてみた。 注意。これらの関数はどれも/(スラッシュ)は区切り文字だと認識しない。 PathIsUNC 先頭の2文字が\かどうかのみで判断しているようだ。長さが2文字未満だとFALSE。 よって、\\\などでもTRUEになる。 PathIsUNCServer これも\\でTRUEになる。 けどこちらはその後に1つでも\が表れるかどうかも判断しているみたい。なので\\\はFALSE。 それ以外に条件はないようなので、どんな文字が含まれていても(\\C:とかでも)OK。 そして\\?\はアウト。 PathIsUNCServerShare \\に続く文字の中に\が1つだけ表れればTRUEになる
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く