エクスポート転送 DLL にはエクスポート関数やエクスポート変数に実態をもたせないで、別の DLL に転送する機能があります。以下は dumpbin.exe で XP の KERNEL32.DLL の転送されているエクスポート一覧を表示したものです。 C:\>dumpbin.exe /exports c:\windows\system32\kernel32.dll | grep forwarded 9 8 AddVectoredExceptionHandler (forwarded to NTDLL.RtlAddVectoredExceptionHandler) 122 79 DecodePointer (forwarded to NTDLL.RtlDecodePointer) 123 7A DecodeSystemPointer (forwarded to NTDLL.RtlDecode
Windows Vistaで追加されたスレッドプールの特徴のひとつとして、従来のQueueUserWorkItem関数ではコールバック関数が終了したことを、スレッド起動側が知ることができなかったのが、新しいスレッドプールでは、コールバック関数の終了を知ることができるようになった、ということがある。 新しいスレッドプールの使い方の手順としたは、おおよそ以下のようになる。 1.CreateThreadpoolWork関数で、スレッドプールの作業アイテムを作成 2.SubmitThreadpoolWork関数で、作業アイテムを割り当てる 3.WaitForThreadpoolWorkCallbacks関数で、作業アイテムの完了を待機する 4.CloseThreadpoolWork関数で、作業アイテムを解放する CreateThreadpoolWork関数のプロトタイプ PTP_WORK WINA
前回の記事では、主に相手がファイルの場合を扱った。今回は、 Windows のコンソールに対して MSVCRT の入出力関数を使う場合を考える。 目次: Windows のコンソールについて I/O 関数の種類と各モードの関係 ストリームの各モードにおけるコンソール入出力 おまけ:ストリームの指す先がコンソールかどうかを確かめる方法(?) 例1:コンソールのコードページによらず、 Unicode 文字を出力したい 例2:UTF-8 の文字列をマルチバイトの関数で出力したい 例3:悪用例:UTF-8 のコード値をワイド文字版の関数で出力する 例4:自分でコンソールデバイスを開いた場合 おまけ:リダイレクトした場合 Windows のコンソールについて ファイルの場合は、プログラムが C のライブラリ関数を通してワイド文字を読み書きしたと思っていても、最終的にファイルに読み書きされるのはバイト
他のプログラムの実行の終了を非同期で待つコードを紹介します。 概要 こちらの方法で、他のアプリの終了を待つことができますが、終了を待つあいだメインのアプリケーションはロックされたままとなります。 この記事では非同期でアプリの終了を待つ方法を紹介します。 非同期でアプリケーションの終了を待つにはProcessクラスのインスタンスを作成し、EnableRaisingEvents プロパティをTrueに設定し、Exited イベントにイベントハンドラを割り当てることでプロセス終了時にExitedイベントハンドラが呼び出されます。 呼び出されたExitedイベントハンドラはメインスレッドでの実行ではない(システムのスレッド プールのスレッドで呼び出される)ため、メインフォームのコントロールにアクセスする場合はInvokeメソッドを使い同期をとる必要があります。詳細はこちらの記事を参照してください。
「ウェブリブログ」は 2023年1月31日 をもちましてサービス提供を終了いたしました。 2004年3月のサービス開始より19年近くもの間、沢山の皆さまにご愛用いただきましたことを心よりお礼申し上げます。今後とも、BIGLOBEをご愛顧賜りますよう、よろしくお願い申し上げます。 ※引っ越し先ブログへのリダイレクトサービスは2024年1月31日で終了いたしました。 BIGLOBEのサービス一覧
POSIX環境またはWindows環境にて、2つのパス文字列が同一ファイルを指すか否かを判定する方法。(ファイルが存在していることが前提) POSIX デバイスIDとinode番号*1を用いて同一性判定を行う。 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int is_identical_file(const char* path1, const char* path2) { struct stat fs1, fs2; if (stat(path1, &fs1) == 0 && stat(path2, &fs2) == 0) { if (fs1.st_dev == fs2.st_dev && fs1.st_ino == fs2.st_ino) { return 1; } } return 0; } Win
以前、PhotoCollectorについてちょっと書いた時に、RemovableStorageMonitor.csに少し触れた。これについて、もうちょっと技術的な話を書いておこうと思う。 ※注この話はWindowsプラットフォーム限定である。あと、WindowsでもOSが違うと挙動が違う可能性がある。私はWindows XP HomeとWindows XP Professionalでしか確認していない。 .NET Framework 3.5で(USBメモリ等の)リムーバブルストレージの一覧を取得したかったら、DriveInfo.GetDrivesを使ってドライブの一覧を取得して、その中からDriveTypeがRemovableなものを選べば良い。 var drives = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.R
ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font styling, and other options on video text terminals and terminal emulators. Certain sequences of bytes, most starting with an ASCII escape character and a bracket character, are embedded into text. The terminal interprets these sequences as commands, rather than text to display verbatim. ANSI sequence
あるWindows7のPCで、クリップボードに文字列を保存するSystem.Windows.Clipboard.SetText() を実行すると、ほぼ必ずSystem.Runtime.InteropServices.COMException が発生するということがあった。 調べてみると、クリップボードを監視するアプリが別に存在する場合、遅延レンダリングでコピーしたデータをすぐにレンダリングすることを要求され、この様な事態になるらしい。 (なぜすぐにレンダリング要求するとイカンのか、疑問が残る説明ではあるが、ここではそれは置いておく。) 遅延レンダリングとは、大きいデータなどをクリップボードにコピーした場合などを想定した機能で、その場でクリップボード側へのデータコピーを行わず、リンクをコピーする様な仕組みだ。 実際にペーストする時には、要求メッセージに応じてデータを提供する義務が、コピーを行
まず、ソフトウェアキーボードのウィンドウは他ウィンドウからフォーカスを奪わないようにしなければなりません。 ソフトウェアキーボードのデザインは多種多様にあるけど、 私が想定している動作は、自作ソフトウェアキーボードからフォーカス(キャレット)を持つコントロールへ仮想キーコード、もしくは文字コードを送信するパターンになります。 これらを前提としてブログを書き進めていきますので、ご了承下さい。 私が調べたところ、上記を実装する手段は大まかに次の通り。 ウィンドウがアクティブにならないようにする フォーカス遷移を記録しておいて、コード送信時にフォーカスを以前のウィンドウに戻す フォーカスメッセージをフックして、受け取らない(元フォーカスがあったウィンドウに再送) 何通りか試してみたけど、やはり一番上手く想定通りの動作をするのは1.のやり方でした。 2.も「ソフトウェアキーボード上で操作して情報を
P/Invoke で Windows API を呼び出す際、引数に構造体を渡すには、割と色々な方法があります。 最近ちょっと混乱したので、改めてまとめてみました。 これまで知らなかった便利な方法も紹介しています。 新機能でも何でもありませんが、よく P/Invoke を使われる方にはご一読頂いて損はない内容だと思います。 ちなみに、本記事では、C# で言う struct と class を総称して「構造体」と呼ぶこととします。 struct と class の区別が必要な場合は「struct」と「class」または「値型」と「参照型」と呼び分けます。 本文中では「struct ≠ 構造体」ということにご留意ください。 なお、本記事の内容は、Windows API の呼び出しに限定した内容になっています。 COM の場合はまた事情が違うのですが、そちらは割愛させて頂きます。 struct と
The header files for the Windows API enable you to create 32- and 64-bit applications. They include declarations for both Unicode and ANSI versions of the API. For more information, see Unicode in the Windows API. They use data types that enable you to build both 32- and 64-bit versions of your application from a single source code base. For more information, see Getting Ready for 64-bit Windows.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く