C# ヒープソート

using System; using System.Collections.Generic; public static class Program { public static void Swap<T>(ref T a, ref T b) { T temp = a; a = b; b = temp; } public static void DownHeap<T>(T[] a, Int32 left, Int32 right, Comparison<T> comparison) { T</t></t></t>…

C# マージソート

using System; using System.Collections.Generic; public static class MergeSortAlgorithm<T> { private static void Merge(T[] a, T[] b, T[] c, Comparison<T> comparison) { Int32 pa = 0; Int32 pb = 0; Int32 pc = 0; while (pa < a.Length && pb < b.Lengt</t></t>…

C# コームソート

using System; using System.Collections.Generic; public static class Program { enum Flag { Continue, Break }; public static void CombSort<T>(T[] arr, Comparison<T> comparison) { Int32 gap = arr.Length; Flag flag = Flag.Continue; while (flag == Fl</t></t>…

C# シェーカーソート

using System; using System.Collections.Generic; public static class Program { public static void ShakerSort<T>(T[] arr, Comparison<T> comparison) { Int32 i, k, head, tail; T hold; head = 0; tail = arr.Length - 1; k = head; while (head < tail) { </t></t>…

C# 二分挿入ソート

using System; using System.Collections.Generic; public static class Program { public static void BinaryInsertionSort<T>(T[] arr, Comparison<T> comparison) { for (Int32 i = 1; i < arr.Length; i++) { T n = arr[i]; Int32 left = 0; Int32 right = i; </t></t>…

Win32API エラーコードの説明を取得する FormatMessage

Win32APIの関数呼び出し後に、GetLastError関数を呼び出してエラーコードを取得する際に、エラーコードの説明を取得したい場合もある。このときには、FormatMessage関数を用いる。 DWORD FormatMessage( DWORD dwFlags, // 入力元と処理方法のオプション LPC…

WIn32API 便利なシェルAPI

StrFormatByteSize64この関数は、整数を書式化する際に、KB, MB, GBなどの単位を自動的につけてくれます。 #include <windows.h> #include <stdio.h> #include <locale.h> #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") int main() { LONGLONG qdwNumber; TCHAR szBuf[32]; UINT uiSize =</shlwapi.h></locale.h></stdio.h></windows.h>…

WIn32API ファイルに関連付けられている実行ファイル名を取得する

ファイルに関連付けられている実行ファイル名を取得するためには、Shell APIのFindExecutable関数を用いる HINSTANCE FindExecutable( LPCTSTR lpFile, // ファイル名文字列へのポインタ LPCTSTR lpDirectory, // 既定ディレクトリ文字列へのポインタ LPTSTR…

WIn32API Shell APIでUnicode-Ansiの文字列を相互に変換する

SHAnsiToUnicode関数と SHUnicodeToAnsi関数を用いる。 #include <windows.h> #include <stdio.h> #include <locale.h> #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") int main() { WCHAR wcs[32]; char mbs[32]; //Unicode文字列をコンソールに表示させるため setlocale(LC_ALL, setloca</shlwapi.h></locale.h></stdio.h></windows.h>…

WIn32API マウスカーソルの物理的な位置をセットする

マウスカーソルの位置を設定するためには、SetPhysicalCursorPos関数を用いる BOOL WINAPI SetPhysicalCursorPos( __in int X, __in int Y ); マウスカーソルをデスクトップの左上に移動するサンプルプログラム #include <windows.h> int main() { //デスクトップの左上</windows.h>…

WIn32API SwapMouseButton

左右のマウスボタンを交換するには、SwapMouseButton関数を用いる BOOL SwapMouseButton( BOOL fSwap // ボタンの交換または復元 );fSwapにTRUEを指定すると、左右のマウスボタンが入れ替わる。FALSEを指定すると元に戻る。サンプルプログラム #include <windows.h> int</windows.h>…

Win32API プリンタの構成要素を列挙する EnumPrinterData

プリンタの構成要素を列挙するためには、EnumePrinterData関数を用いる。 DWORD EnumPrinterData( HANDLE hPrinter, // 操作対象のプリンタを識別するハンドル DWORD dwIndex, // 取得する値のインデックス LPTSTR pValueName, // 値の名前を受け取るバッフ…

Win32API プリンタドライバを列挙する

インストールされているプリンタドライバ情報を列挙するためには、EnumPrinterDrivers関数を用いる。 BOOL EnumPrinterDrivers( LPTSTR pName, // サーバー名へのポインタ LPTSTR pEnvironment, // 環境名へのポインタ DWORD Level, // 構造体のレベル LPBYT…

Win32API プリンタの変更を監視する

プリンタの変更を監視するためには、FindFirstPrinterChangeNotification, FindNextPrinterChangeNotificationを用いる。 HANDLE FindFirstPrinterChangeNotification( HANDLE hPrinter, // 変更を監視するプリンタまたはプリンタサーバーを識別する // ハン…

Win32API 利用可能なプリンタを列挙する

利用可な可能なプリンタ、プリントサーバー、プリントプロバイダを列挙するためには、EnumPrinters関数を使用する。 BOOL EnumPrinters( DWORD Flags, // プリンタオブジェクトのタイプ LPTSTR Name, // プリンタオブジェクトの名前 DWORD Level, // 情報レ…

Win32API プリンタ情報を取得する

プリンタ情報を取得するためには、GetPrinter関数を用いる。GetPrinter関数でプリンタ情報を取得するためには、以下の3つの手順が必要となる1.OpenPrinter関数で取得したいプリンタのハンドルを取得する 2.GetPrinter関数に 1で取得したハンドルを指定して…

Win32API 指定されたプリンタのプリンタドライバ情報を取得する

プリンタドライバ情報を取得するためには、GetPrinterDriver関数を用いる。 プリンタドライバ情報を取得する手順としては、1.まずOpenPrinter関数でプリンタオブジェクトのハンドルを取得する2.次に、取得したプリンタオブジェクトのハンドルを用いてGetPrin…

Win32API 印刷に利用可能なポートを列挙する

Win32API 印刷に利用可能なポートを列挙するためには、EnumPorts関数を用いる。EnumPorts関数は以下のように定義されている。 BOOL EnumPorts( LPTSTR pName, // サーバー名へのポインタ(NULLを指定した場合は、ローカルコンピュータのプリンタポートが列挙…

Win32API 利用可能なモニター情報を列挙する EnumMonitors

利用可能なモニター情報を列挙するには、EnumMonitors関数を用いる。EnumMonitors関数は、以下のように定義されている BOOL EnumMonitors( LPTSTR pName, // サーバー名へのポインタ(NULLを指定した場合、ローカルモニターが列挙される) DWORD Level, // 構…

Visual C++ 2010 でshared_ptr

この度、Visual Studio 2010からC++0xのshared_ptrを使うことができるようになったということで試してみました。 まず、2つのshared_ptrで整数型の配列を参照する例(ソースコードについて、コメントを頂きましたため、修正いたしました。) #include <stdio.h> #includ</stdio.h>…

Win32API Compress.exeで圧縮されたファイルを解凍する LZCopy

Compress.exeは、16bitの時代にはよく使われていたようで、今となってはあまり使われていないかもしれないが、Compress.exeで圧縮されたファイルを解凍するプログラムを実装してみる。Compress.exeとは、マイクロソフトから提供されているLZ77を使用した圧縮…

Win32API ファイルにアクセス拒否ACEを設定する AddAccessDeniedAce

ファイルにアクセス拒否ACEを設定するためには、AddAccessDeniedAce関数を用いる。手順は、以下のとおり No項目 1InitializeAclでDACLを初期化する 2LookupAccountName関数で、アカウントに対するSIDを取得する 3AddAccessDeniedAce関数で、アクセス拒否ACE…

C言語 整数型の変数を2進数で表示するプログラム

整数型(char, short, int, long, __int64(Windows環境))を2進数で表示するプログラム #include <stdio.h> #include <limits.h> #define INT64_BIT 64 #define LONG_BIT 32 #define INT_BIT 32 #define SHRT_BIT 16 void print_binary_int64(__int64 n) { for (long i = INT64</limits.h></stdio.h>…

Win32API システム時刻を設定する

システムの時刻を設定するためには、SetSystemTime関数を用いる。SetSystemTime関数を用いるためには、SE_SYSTEMTIME_NAME特権を有効にしておく必要がある。SetSystemTimeでシステム時刻を設定する例 システム時刻を「今日」の零時に設定する手順としては、…

Win32 API ウィンドウズをシャットダウンする

ウィンドウズをシャットダウンやログオフ、再起動するためには、ExitWindowsEx関数を用いる。ExitWindowsEx関数は以下のように定義されている。 BOOL ExitWindowsEx( UINT uFlags, // シャットダウン操作 DWORD dwReserved // 予約済み ); ExitWindowsExで、…

Win32API プロセストークンに割り当てられている特権を有効にする AdjustTokenPrivileges

プロセストークンに割り当てられている特権を有効にするためには、AdjustTokenPrivileges関数を用いる。手順は以下のとおり No項目 1OpenProcessToken関数で、プロセストークンを取得する 2LookupPrivilegeValue関数で、特権に対応するLUID(ローカル一意識別…

Win32API プロセストークンに割り当てられている特権情報を取得する

プロセストークンに割り当てられている特権情報を取得するためには、手順で処理を実行する。 No項目 1OpenProcessToken関数でプロセストークンを取得する 2GetTokenInformation関数で、「1」で取得したプロセストークンの特権情報を取得する 3「2」で取得…

Win32API ファイルにセキュリティ情報を設定する SetNamedSecurityInfo

ファイルにセキュリティ情報を設定するためには、SetFileSecurity関数を用いるが、SetNamedSecurityInfo関数を用いることもできる。 手順は、以下のとおり No項目 1InitializeAcl関数で、DACLを初期化する 2LookupAccountName関数で、アカウントに対するSID…

Win32API ファイルやディレクトリのACEを列挙する GetNamedSecurityInfo

ファイルやディレクトリのセキュリティ情報(セキュリティ記述子やACL)は、GetFileSecurity関数で取得可能であるが、GetNamedSecurityInfo関数でも取得可能である。 GetNamedSecurityInfo関数で、セキュリティ情報(セキュリティ記述子)を取得し、ACEを列挙…

Win32API プロセストークンのグループ情報を取得する

プロセストークンのグループ情報を取得するには、OpenProcessToken関数、GetTokenInformation関数、LookupAccountSidA関数を用いる手順は、以下のとおり No項目 1OpenProcessToken関数で、プロセストークンを取得する 2GetTokenInformation関数で、トークン…