Win32 API Tips

最終更新日:2022/01/04

KERNEL

DLLのバージョンを取得したい

GetFileVersionInfoSize() 
GetFileVersionInfo()
VerQueryValue()
SDK のサンプルの about.c で使っている

TLS のサンプル

Q&A\samples\tls

VBより TerminateProcess( )がFALSEを返す。

Shell 関数は ProcessID を返すので OpenProcess() を使ってハンドルに変換して、TerminateProcess( )に渡して下さい。

1つのサブディレクトリ内の最大ディレクトリ、ファイル数とそのディレクトリのネットワークからのアクセス速度について。

FAT の平均アクセス時間は 1/2, NTFS の平均アクセス時間は Log N になります。 NTFS ボリュームのファイル数には制限はありません。

独立した2つのアプリケーションで、COMポートのハンドルを共有する方法。

// Program 1. ////////////////////////////////////////////////////////
#include 
#include 

void main(void){

	HANDLE hFile = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

	///////////////////////////////////
	//	Program 2. のプロセス識別子を取得してください
	DWORD IDProces;
	///////////////////////////////////

	HANDLE hTargetProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, IDProces);
	HANDLE hTarget;

	DuplicateHandle(GetCurrentProcess(), hFile, hTargetProcess, &hTarget, GENERIC_READ | GENERIC_WRITE, FALSE, DUPLICATE_CLOSE_SOURCE );

	///////////////////////////////////
	//	Program 2. に hTarget を渡してください。
	///////////////////////////////////

	CloseHandle(hFile);

	CloseHandle(hTargetProcess);
	CloseHandle(hTarget);

	return;
}


// Program 2. ////////////////////////////////////////////////////////
#include 
#include 

void main(void){
	char sendBuf[256];

	///////////////////////////////////
	//	プロセス間通信を使って hTarget を取得してください。
	HANDLE hFile;
	///////////////////////////////////

	DWORD dwNum;
	WriteFile(hFile, sendBuf, strlen(sendBuf), &dwNum, NULL);
	
	CloseHandle(hFile);

	return;
}
/////////////////////////////////////////////////////////////////////

ディレクトリのアクセス権情報を取得する API

GetFileSecurity()

他の人が read only で開いている

CreateFile()の後の GetLastError()で 32L(ERROR_SHARING_VIOLATION)が帰ってきた場合他のプロセスで使用されています。

APIによるフォルダの作成日付の変更がWIndows95でできない

NT:CreateFile() でディレクトリのhFileを取得、SetFileTime()を使う。 Win95:Win32 APIではできません。 int 21 7143hを使って行うしかありません。

削除したフィルがごみ箱へ移動

SHFileOperation() でSHFILEOPSTRUCT の fFlagsで FOF_ALLOWUNDO を指定

GetShortPathName() short file name が正しく取得できない

BUG: NT3.51のバグです。 FindFirstFile(), FindNextFile()を使って回避して下さい。

FindExecutable関数で、実行可能ファイルのフルパスが取得出来ない。

スペースを含むロングファイルネームでは、スペースの前までしか取得出来ないという仕様が確認されている。

Win95 同じアプリケーションのインスタンス数を取得するAPIは?

FindWindow()

現在のプロセスが起動されたファイルのフルパスをしりたい

GetModuleFileName()

実行したアプリケーションが終了するまで待ちたい

rtn = CreateProcess(0, cmdline, 0, 0, 0, NORMAL_PRIORITY, 0, 0, &start, &proc);
if ( rtn ) {
	WaitForSingleObject(proc.hProcess, INFINITE)
}
KB Q129796 (VBのサンプル)

プログラムでアプリケーションを終了させる方法

TerminateProcess()

CreateMailslot() で MAILSLOT_WAIT_FOREVER を指定しても WtireFileで err番号 #121 ERROR_SEM_TIMEOUT が出る

メールスロットが一杯になった場合に エラー番号 121 (ERROR_SEM_TIMEOUT) が返される。

メールスロットでブロードキャストする方法を教えてほしい。

サーバー側(データ受信側)
CreateMailslot("\\\\.\\mailslot\\名前", , , )
クライアント側(データ送信側)
CreateFile("\\\\*\\mailslot\\名前", , , , , , )
 又は
CreateFile("\\\\domain\\mailslot\\名前", , , , , , )

フック

[資料]
Microsoft debeloper Network Library Edition - July 1997
 Technical Articles
  Platform Articles
   User Interface Articles
    Window Management
     Win32 Hooks
[sample]
\mstools\samples\framwork\hooks
\mstools\samples\mstools\spy
\msdev\samples\win32\mstools\spy

UnhookWindowsHookExだとDLLが残ったままになっている。

バグです。 再立ち上げ以外方法はありません。 KB Q149862

プロセスのハンドルからウィンドウのハンドルを取得する方法

EnumWindows()でウィンドウの一覧を取得し、GetWindowThreadProcessId()でプロセスハンドルと比較して下さい。

別スレッドを作成し、PostMessage()したが、PeekMessage()で取得できない。

スレッドの Message Que がまだ作成されていない可能性がある。 スレッド作成直後にPeekMessage()を呼び出すことで強制的に作成して下さい。

サービスでデスクトップの会話(CreateProcess())を行うためには

CreateProcess()でlpsiStartInfoのlpDesktopに"winsta0\\default"を指定して下さい。
KB Q115825 Accessing the Application Desktop from a Service
   Q165194 INFO: CreateProcessAsUser, Windowstations and Desktops
   Q173687 HOWTO: Access the Application Desktop from a Service

ExitWindowEx(EWX_SHUTDOWN, 0)でシャットダウンできない

停止権利を Enable にしなければなりません。 AdjustTokenPrivileges() 関数でTOKEN_PRIVILEGES配列のLUID_AND_ATTRIBUTESのAttributesにSE_PRIVILEGE_ENABLEDを指定して下さい。 Knowledge Base Q161136 (VBのサンプル) [参考文献] Win32システムサービスプログラミング 13.5章システム停止の方法

NT4.0 コンソールを起動するとメモリーリークがおきる。

コマンドプロンプトには、状に起動されているコンソール IME (CONIME.EXE) が存在しており、この CONIME.EXE が、コマンドプロンプトの起動/終了が行われるたびにメモリを若干リークし続けます。そのため、コンソールアプリケーションを CreateProcess() を使用して起動/終了を連続的に行うと、この CONIME.EXE でメモリリークが発生いたします。 回避方法と致しましては、CONIME.EXE をコンソールアプリケーションを起動するたびに、または、ある一定期間が経ったら、強制終了する方法が考えられます。CONIME.EXE は、強制終了されても、コマンドプロンプトが起動する時に、存在していなければ自動的に起動されるため、動作上では問題はありません。 CONIME.EXE を強制終了させる方法としては、パフォーマンスデータから、CONIME.EXE のプロセス ID を取得し、そのプロセス ID から TerminateProcess() をコールする方法が考えられます。 パフォーマンスデータの取得方法につきましては、MSDN Library() で "HKEY_PERFORMANCE_DATA" をキーワードにクエリーするとドキュメント等を入手することが出来ます。 また、プロセスビューアのソースが、Win32SDK ! MSTOOLS\SAMPLES\SDKTOOLS\WINNT\PVIEWER にパフォーマンスモニターのソースが、Win32SDK ! MSTOOLS\SAMPLES\SDKTOOLS\WINNT\PERFMON に存在しております。

起動中のアプリケーションのハンドルをとりたい

MSDN Library() で "HKEY_PERFORMANCE_DATA" をキーワードに検索する Win32SDK ! MSTOOLS\SAMPLES\SDKTOOLS\WINNT\PVIEWER

プロセス ID よりモジュール名を取得する方法

WinNT レジストリーより取得することになります。 MSDN Library() で "HKEY_PERFORMANCE_DATA" をキーワードにクエリーするとドキュメント等を入手することが出来ます。 また、プロセスビューアのソースが、MSTOOLS\SAMPLES\SDKTOOLS\WINNT\PVIEWER に パフォーマンスモニターのソースが、MSTOOLS\SAMPLES\SDKTOOLS\WINNT\PERFMON に存在しております。 Win95 ToolHelp

メモリのスワップを抑制するような(できないような)領域確保を行うAPI

VirtualUnlock()
SetProcessWorkingSetSize()
ページをメモリ内にロックすると、 利用できるRAMの量が減少するためにかえってシステムの性能が低下することもあるので注意してお使い下さい。

16BitFATと32BitFATを識別するAPI
GetVersionEx() でOSR2か区別できる
GetDiskFreeSpaceEx() で2G以上ならばFAT32
GetDiskFreeSpace() でクラスタサイズを取得して判定
クラスタのサイズについては KB Q67321

CreateProcessで16Bitアプリを呼び出す

LPCTSTR lpApplicationName に NULLを指定して LPTSTR lpCommandLine にアプリケーション名を指定して下さい

起動前に16bitアプリと32bitアプリを区別するAPI

ありません。実行ファイルをバイナリで開いてヘッダーのフラグを見て下さい。 VBのサンプル Microsoft Developer Network Technical Articles Technologies and Languagea Articles Visual Basic Visual Basic Tips Tips 131: Determing Whether a DLL File Is 16-Bit or 32-Bit

Windows95のディスクトップ画面が立ちあがる前にアプリを起動させたい。

システムポリシーを変更して下さい。 [参考文献] Windows95リソースキットVol.1 p.533 15.10 システムポリシーの設定の概要 ・コンピュータ固有のシステム設定へのアクセス制限 MSDN Library Microsoft Developer Network Library Windows Resource Kits Window95 Resource Kit Window95 Resource Kit Chapter15 User Profiles and System Policies System Policy Settings Summary Restricting Access to Computer-Specific Settings Windows95 レジストリ管理 p.231  6.3 Windows起動の途中でプログラムを起動する。

一度作成したミューテックスを他のプロセスからCreateできない

OpenMutex()を使って下さい。

USER

メインウィンドウに表示しているコントロール等のフォントを任意に変更したい。

EnumChildWidnows(m_hWnd, SetFontProc, hfont);

BOOL CALLBACK SetFontProc(HWND hwnd, LPARAM lParam){
  SendMessage(hwnd, WM_SETFONT, (WPARM)hfont, (LPARAM)MAKELONG((WORD), TRUE, 0));
}

KB: Q74737 Changing the Font Used by Dialog Controls in Windows

ファイルの選択が出来るダイアログ

GetOpenFileName( ) [sample] devstudio\vc\samples\sdk\win32\comdlg32

ディレクトリの選択が出来るダイアログ

SHBrowseForFolder()

ツリービューコントロールでツールヒントを無効にするAPIはありますか?

TVS_NOTOOLTIPSのフラグを指定してください。

ウィンドウの配色の変更は

SetSysColors()

マウスの変更は

SetSystemCursor()

ウィンドウの中で3Dのコントロールを使いたい

CreateWindowEx()でWS_EX_CLIENTEDGE を指定して作成して下さい KB Q130763

コンボボックスへツリー構造を表示させるAPIを

オーナードロウコンボボックスを使用して下さい。

リストボックス内で、Windowsのエクスプローラで使われているようなドライブのアイコンを使った物を作成したい。

MSDN Library の Owner-Drawn List Box を参照してくださればリストボックスへのアイコンの表示の仕方のサンプルがあります。

作成したウィンドウ内へファイルのアイコンを表示させたい。

SHGetFileInfo( ) 関数でドライブのアイコンは取得できます。 [sample] mstool\sample\win32\cabview

ダイアログにマルチラインエディットボックスを40個確保すると立ち上がらなくなる。

エディットラインテキストボックスを作成した場合、ダイアログのリソース領域とは別のセグメントにテキストデータ領域を確保します。 その確保する領域の初期値がシングルラインエディットボックスとマルチラインエディットボックスでは違います。

エディットコントロールのバッファを変更、取得するには

GetWindowText() SetWindowText()

エディットコントロールのバッファのサイズを変更するには

EM_GETLIMITTEXT EM_SETLIMITTEXT

エディットコントロールのフォントの大きさや色を変更したい。

WM_SETFONT

Microsoft Developer Network Library Edition
 SDK Documentation
  Platform SDK
   User Interface Services
    Controls
     Edit Controls
      About Edit Controls
       Text Operator
        font

リターン時に実行されるデフォルトボタンを変更したい。

KB Q67655

ダイアログのボタンの WM_LBUTTONDOWN を取得したい

コントロールをサブクラスかして下さい。 sample msdev\samples\crossdev\sabclass

Createした任意のウィンドウのタイトルバーを非表示にする方法

WS_CAPTIONを変更するサンプル MSJ No42 One Point Lesson C/C++ P153

Win95 で タスクバーを隠してしまいたい。

hWnd = FindWindowEx(NULL, NULL, "Shell_TrayWnd", NULL); ShowWindow(hWnd, SW_HIDE); で隠すことができる。また表示は ShowWindow(hWnd, SW_SHOW);

ファイルのプロパティで概要、統計、内容、カスタムなどのタブと情報

シェルの拡張機能を使って作成しています。 [参考資料] Microsoft Windowsd 95 プログラマーズガイド 第12章 [サンプル] \msdev\samples\sdk\win95\shellext

マイコンピュータ、ごみ箱等はスペシャルフォルダーを開きたい

SHGetSpecialFolderLocation() ShellExecuteEx() を使って下さい。

ダイアログエディタで作ったリソースを使ってMDIの子ウィンドウを作るには

MFCでは CFormView を使って実装されています。 API では モードレスダイアログ をもとにプログラムで子ウィンドウらしく実装して下さい。 APIパワフルテクニック

タスクバーサイズを取得したい

SHAppBarMessage()関数を使ってdwMessageにABM_GETTASKBARPOSを指定して下さい。

子ウィンドウにWS_CAPTIONを指定したときに、エディットコントロールをクリックしてもメッセージが来ない。

この現象は子ウィンドウにWS_CAPTIONを指定したときに、Win95とNT4.0のみに起こります。 MDIのバグがFIXされたために起こっています。回避方法としては、Edit Control に WM_LBUTTONDOWN が入ってきたときに、この子Window に対して SendMessage() によって WM_NCACTIVATE を送信することによって回避できます。 SendMessage( hwndChild, WM_NCACTIVATE, (WPARAM)TRUE, 0);

使用中のファイルを上書きする方法

Windows95 wininit.ini WindowsNT MoveFileEx() [参照] Knowledge Base: Q172456 How to Automatically Replace Files In Use by Windows 95 Knowledge Base: Q140570 HOWTO: Moving Files That Are Currently in Use

ツールバーコントロールを移動する方法

MFCのように自由に動かすことはできません。 自動的にクライアントエリアの上または下に固定されます。

ツールバー上にコンボボックスを表示するAPIがないだろうか。

CreateWindowEx()でツールバー上に直接作成してください。 [参考文献] Windows95 ユーザーインターフェイスプログラミング P147 第1部 第5章 リッチエディットコントロール 5.1RICHEDサンプル    5.1.1 ツールバーとコンボボックスの作成

アイコンをダイアログに貼り付けるAPIを教えてください

WM_PAINT で DrawIcon( ) をすることによって描画できます

コントロールの背景色を変更したい

WM_CTLCOLOREDITで SetBkColor( )

実行ファイルリソースを書き換えたい

[NTのみ] BeginUpdateResource(), UpdateResource(), EditUpdateResource(). など、詳しくはHelpを参照下さい

メッセージボックスのフォントの取得

SystemParametersInfo(SPI_GETNONCLIENTMETRICS, , , );

GDI

画面をキャプチャーする方法

CreateDC("DISPLAY") を指定する方法と、 [サンプル] devstudio\vc\samples\win32WinCap32

利用可能なフォントを取得するAPI

EnumFontFamilies() を使って下さい [サンプル] msdev\samples\sdk\win32\cdtest

文字の高さと幅を取得したい。

文字のサイズ GetTextMetrics() タイプツルーファイルより取得 GetOutlineTextMetrics() 文字列のサイズ GetTextExtentPoint32

フォントを90度傾けて表示できないか

CreateFontIndirect() nEscapement = angle を使って、傾けた Font を作り TextOut() を使って1文字筒表示して下さい。

CreateFontIndirect()で作った FONT とダイアログで設定した FONT のサイズが違うのはなぜか?

CreateFontIndirect()は画面の解像度を元にMM_TEXTで表示するが、ダイアログはSYSTEM FONTを元にしたPOINTで表示している KB Q74300

CreateFontIndirect()が文字化けしてしまう。

ChooseFont(), or EnumFontFamiy()を使ってフォントの設定を取得して使って下さい。

作成したTrueType Fontの登録。

APIを使ってください。 CreateScalableFontResource(), AddFontResource()後、WM_FONTCHANGEをBROADCASTで SendMessage()をCALLしてください。 レジストリの変更が必要です。
HKeyLocalMachine\Software\Microsoft\Windows\CurrentVersion\Fonts 
Microsoft Developer Network Library
 SDK Documentation
  Platform SDK
   Building Applications
    Programing Techniques
     Installing Applications
      Installation Program
       Installing Fonts

GetGlyphOutline() の関数

下記を参照してください。 KB:Q87115: GetGlyphOutline() Native Buffer Format KB:Q97340: SAMPLE: GetGlyphOutline() Function Demonstration

VB付属のメタファイルをGetMetaFile()で開けない

VB4.0は 'Aldus Placeable Format' を使っている為、APIの CreateMeraFile()、GetMetaFile() 等とは交換性がありません。 KB Q147667 PRB: 'Invalid Picture' Error When Setting Metafile (WMF) KB Q129658 SAMPLE: Reading and Writing Aldus Placeable Metafiles を参照して下さい。読み込み方法、変換方法へもリンクがはってあります。

メタファイルを90度回転さるためのAPI

NT:SetWorldTransform()と、PlgBlt() 95:プログラムで行う。

SetWinMetaFileBitsでメモリーリークが起きる

SRWINPRO SRX971106600776 win95 で SetWinMetaFileBits でメモリリークが起きるとの報告があります。 NTではおきません。

表示した画像データを取り込みたい。

CreateDC("DISPLAY", ) mstools\samples\win32\wincap32

Bitmapをファイルに保存する

MSDN Storing an Image

大きなビットマップで CreateDIBitmap() でエラーになる

Win95:DIBの制限値は8MByteです。

ビットマップを90度反転させるには?

APIではありません。転置行列を作るような形になります。 KB: Q77127 Rotating a Bitmap by 90 Degrees

ディスプレイに依存しない BITMAP を作りたい。

CreateDIBsection() を使用してください。

BITMAPINFOについて

Bitmapなどから取得するか bmiColors[1]の配列に全てセットすることになります。 Windows95APIバイブル1

ImageList_ExtractIconでメモリが足りません

DestroyIcon()でハンドルをクローズして下さい KB Q131500(ちょこっとだけ書いてある)

Windowのマッピングモードを取得するAPIは

GetMapMode()

FloodFill()で塗りつぶしを行うとディザリングで塗りつぶされてしまう。

ブラシを作成するときにディザ処理されています。 GetNearestColor(COLORREF) で指定した色に最も近い純色が取得できますので、それを使ってブラシを作成してください。

SHELL

ファイルの拡張子に対応したアプリを起動する方法

FindExecutable() で指定されたファイル名に関連付けられている実行可能 (.EXE) ファイルの名前とハンドルを取得できます。 ShellExecute()

エクスプローラのファイルを右クリックした時に表示されるポップアップメニューに項目を追加したい。

Microsoft Windows95 プログラマーズガイド ファイルクラスのコンテキストメニューを修正する P222 コンテキストメニューハンドラ P228 MSDN Library SDK Documentation Platform SDK User Interface Service Shell and Common Controls Shell Namespace \mstools\samples\win32\shellext

SHBrowseForFolderのダイアログをカスタマイズしたい。

できません。 自分で作って下さい。 W_WIN32SDK SRX971219600862 (作成してもそのディレクトリを選択できない?)

その他

Windowsをインストールした時点での言語情報を取得したい。

GetSystemDefaultLCID() or GetFileVersionInfo()

全角文字を半角文字へ変換するAPI

LCMapString( )

システム環境設定の Path を変更する方法

下記のレジストリを変更してください HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\path 変更後、 SendMessage( HWND_BROADCAST, WM_SETINGCHANGE, NULL, "レジストリキー" ) を行ってシステムに変更を反映してください。;

DLL 中の DialogBox()でエラー

DLLの Instance を使って DialogBox() を呼んで下さい。 ps. DLLMAIN() の Instance MFCの _USER DLL の場合、AfxGetInstanceHandle() を使って取得した

CDROMのAuto Runを無効にする方法

レジストリを書き換える NT4.0:KB Q155217 Win95:KB Q136214 ps.リブートせずに無効にすることはできません。

PCMCIAのフラッシュカードを挿したときに、そのことを知らせるイベントはないか?

WM_DEVICECHANGE イベント

レジストリ キーから、 名前付きの値を削除したい

RegDeleteValue()

レジストリを変更するAPIを教えて下さい。

Reg〜() を使って下さい。 [参考文献] Microsoft Windows95 プログラマーズガイド Windows95レジストリ管理

コントロールパネルの地域プロパティの時間の形式の情報を取得する API

GetLocaleInfo() lci = LOCALE_ITIME

NT3.51で 32bitDLLから16bitDLLを呼び出す方法

できません 参考文献 Microsoft Windows95 プログラマーズガイド 32章 ps.Generic Thunks は16bit -> 32bit

ジェネリックサンクのLoadLibraryEx32WでNULLが返ってくる

32bitDLLがリンクするDLLは存在していますか?

16bitDLLから32bitDLLを呼びたい。

KB Q104009、Q114341 ftp://ftp:microsoft.com/softlib/msfiles/genthunk.exe ftp://ftp:microsoft.com/softlib/msfiles/gthunks.exe mstool\q_a\samples\interop

ディスクのシリアル番号を変更できないか?

できません。 boot sector を直接書き換えるしかありません。 <参照> knowledge Base Q69223

フラットサンクからのスレッド生成でエラーになる

16ビットプロセスからサンクを使ってWin32関数を実行する場合に 「16ビットプロセスは新しいスレッドを生成できない。」という制限がございます。 そして、プロセスのビット属性は、そのプロセスを起動した実行可能ファイルの形式によって永久的に決まります。 この場合、16ビットプロセスからフラットサンクを実装した32ビットDLLを経由して別の32ビットDLLで実装したとしても、プロセスのビット属性は16ビットであることに変わりありません。 したがって、新しいスレッドを生成する CreateThread() はエラーになります。 また、16ビットAPからスレッドを生成する32ビットDLLの関数を呼び出す方法はございません。

プロセスの状態を取得するAPIを教えてほしい。

タスクマネージャのように、現在実行中のアプリケーションが、実行中か応答無しの状態にあるのかを判断する方法として、下記のような手順を踏むことで確認できます。 1.EnumWindows() を使用し、現在存在する Window 全てのハンドルを取得する。 2.GetWindowText() を使用し、タイトルバー文字列から応答なし状態のコンソールアプリが存在するか確認する。 3.SendMessageTimeout() に SMTO_ABORTIFHUNG を指定する事で応答なし状態の Window アプリケーションが存在するか確認する。 [参照] [SRWINPRO] ID: SRF970723605049 [SRWINPRO] ID: SRR970828000002 NTは内部関数を使って処理をしている。

16Bit APIは、32Bit APIでどのようなAPIに置き換わっているのか

VC++5.0 Books OnLine
 プログラマーズガイド
  移植とアップグレード
   詳細
    16ビットコードの32ビットWindowsへの移植
     Win32でサポートされなくなったAPIとメッセージ

システム情報の取得

Windowsバージョンを確認するには

GetVersionEx( )
[例]
void WinVersion(void)
{
	char buffer[80];
	char szosname[11];
	OSVERSIONINFO osinfo;

	// バージョン情報を得る
	osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	GetVersionEx(&osinfo);
	
	// Windowの名前と、メジャー番号、マイナー番号を得る
	swithc(osinfo.dwPlatformId){
		case VER_PLATFORM_WIN32_WINDOWS:	// 1
			strcpy(szosname, "Windows 95");
			break;
		case VER_PLATFORM_WIN32_NT:			// 2
			strcpy(szosname, "Windows NT");
			break;
		case VER_PLATFORM_WIN32s:
			strcpy(szosname, "Win32s");
			break;
		default:
			strcpy(szosname, "Unknown OS");
			break;
	}
	sprintf(buffer, "%s Version %ld.%ld", szosname, osinfo.dwMajorVersion,
osinfo.dwMinorVersion);
	MessageBox(buffer, "Windows", MB_ICONINFORMATION | MB_OK) 
}
[参考文献]
Windows95API パワフルテクニック大全集 1-1
ps. win16:GetVersion( )

ドライブとその種類を確認するには

GetDiviceType( )
[例]
void DriveInfo(void)
{
	char buffer[10];
	WORD ret;
	
	for( int i = 0; i < 26; ++i ){
		sprintf(buffer, "%c:\\", 'A' + i);
		ret = GetDriveType(buffer);
		switch(ret){
			case 1:		//	定義されている最後のドライブを越えた場合
				break;
			case 0:		//	不明のドライブ
				printf("%s is Undetermined", buffer);
				break;
			case DRIVE_REMOVABLE:		//	フロッピードライブ
				printf("%s is Removable Drive", buffer);
				break;
			case DRIVE_FIXED:		//	ハードディスクドライブ
									//	ハードディスクにマッピングされたドライブ
				printf("%s is Fixed Drivw", buffer);
				break;
			case DRIVE_REMOVE:		//	ネットワークドライブ
				printf("%s is Network or CD_ROM", buffer);
				break;
			case DRIVE_CD_ROM:		//	CD_ROMドライブ
				printf("%s is CD_ROM", buffer);
				break;
			case DRIVE_RAMDISK:		//	RAMディスク
				printf("%s is RAMDISK", buffer);
				break;
			case default:
				break;
		}
	}
	return;
}
[参考文献]
Windows95API パワフルテクニック大全集 1-2
ps.フロッピーディスクのサイズを取得する場合は
KB Q163920 HOWTO:Getting Floppy Drive Type Information

モニタ、マウス、システムに関する機器の情報を取得するには

GetSystemMetrics(SM_CXSCREEN); // 1 GetSystemMetrics(SM_CYSCREEN); // 2 GetSystemMetrics(SM_MOUSEPRESENT); // 19 [参考文献] Windows95API パワフルテクニック大全集 1-2

コンピュータに搭載されているプロセッサの種類を取得するには

GetSystemInfo( ) [例] void FindProcessor(void) { SYSTEM_INFO sinfo; GetSystemInfo( &sinfo ); if ( sinfo.dwProcessorType == PROCESSOR_INTEL_386 ) printf("i386 Processor\n"); if ( sinfo.dwProcessorType == PROCESSOR_INTEL_486 ) printf("i486 Processor\n"); if ( sinfo.dwProcessorType == PROCESSOR_INTEL_PENTIUM ) printf("Pentium Processor\n"); return; } [参考文献] Windows95API パワフルテクニック大全集 1-3

CPUの種類(名称、クロック周波数)

NT HKEY_LOCAL_MACHINE HARDWARE DESCRIPTION System CentralProcesor 0

システム環境設定のPathを変更する方法

下記のレジストリを変更してください HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\path 変更後、 SendMessage( HWND_BROADCAST, WM_SETINGCHANGE, NULL, "レジストリキー" ) を行ってシステムに変更を反映してください。

システムメモリの空き容量をみるには

GlobalMemoryStatus() [例] void MemoryStatus(void) { MEMORYSTATUS memStatus; memStatus.dwLength = sizeof(MEMORYSTATUS); GlobalMemoryStatus(&memStatus); // 物理メモリの空き容量 printf("Physical Memory is %ld", memStatus.dwAvailPhys); // 仮想メモリの空き容量 printf(Virtual Memory is %ld", memStatus.dwAvailVirtual); reurn; } [参考文献] Windows95API パワフルテクニック大全集 1-4

システム上でのユーザー登録に関する情報を取得するには

ユーザー名 HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\Windows\\CurrentVersion\\Registered Owner 所属 HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\Windows\\CurrentVersion\\Registered Organization [参考文献] Windows95API パワフルテクニック大全集 1-5

コンピュータのネットワーク名を取得するには

WNetGetConnection() [参考文献] Windows95API パワフルテクニック大全集 1-6

現在ネットワークにログインしているユーザー名を確認するには

WNetGetUser() [参考文献] Windows95API パワフルテクニック大全集 1-7

使用可能なドライブを検索する

GetLogicalDrives()
[例]
void FindDrives(void)
{
	DWORD	drives;
	
	drives = GetLogicalDrives();
	
	for ( i = 0; i < 26; i++)
		if ( drives & (1L << i ))
			printf("%c:\\ is there", i + 'A');;
}
[参考文献]
Windows95API パワフルテクニック大全集 2-3

ドライブにディスクが挿入されているか確認するには

SetErrorMode()エラーメッセージボックスを表示しないようにし、ランタイム関数ac cess()の呼び出し結果を判定する
[例]
void TestDriveReady()
{
	UINT oldErrorMode;
	
	//	エラー処理をオンに設定する
	oldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
	
	if ( access(name, 0) == 0 )
		printf("The drive is ready for use.\n");
	else
		printf("The drive is not ready for use\n");
		
	//	元のエラーモードを復元する
	SetErrorMode(oldErrorMode);
	
	return;
}
SetErrorMode(SEM_FAILCRITICALERRORS)
[参考文献]
KB Q115828 HOWTO:Getting Floppy Drive Information
Windows95API パワフルテクニック大全集 2-3
!プリンタ

印刷後表示される「Messengerサービス」ダイアログをアプリ側で表示させなくしたい

Q122160
Disabling Printing Notification Dialog Boxes in Windows NT

1.Click Start, point to Settings, and then click Printers. 
2.From the File menu, click Server Properties. 
3.On the Advance tab, click "Notify when Remote Documents are Printed" so that it is not selected. 
4.Stop and restart the Spooler service from the Services portion of Control Panel so the new setting will take effect.

プリンターを設定するAPIは?

標準プリンタの変更:iniファイルを書き換える KB:Q135387:How to Get and Set the Default Printer in Windows ps. KB:Q140560:How to Set the Default Printer Programmatically in Windows 95 (Window95 only) 標準プリンタの設定の変更:GetPrinter(), SetPrinter() 一時的な変更:DocumentProperties()

プリンタの用紙切れ等のプリンタステータスを知る方法

Win95:GetPrinter() で PRINTER_INFO_2の status を見て下さい。 NT:プリンタのステータスを取得するためのWin32 APIはありません。

NT4.0でプリンタのステータスを取得するためのWin32 AP

プリンタのステータスを取得するためのWin32 APIはありません。Windows NT 4.0においては,パラレルドライバに対するDeviceIoControl APIを使ってステータスを取得するような関数が用意されています。
  DDK Documentation
    Windows NT 4.0 DDK
      Kernel-Mide Drivers
        Reference
          Part 2: Device-type-specific Requirements
            Chapter 4 I/O Requests for Parallel and Serial Drivers
              4.2 Parallel I/O Control Codes
ただし,Windows NT 4.0では,プリンタドライバ(特にGDI)がカーネル内でインプリメントされ,プリンタポートのアクセスも,プリンタスプーラの制御下にあります。上記の方法でパラレルポートをアクセスするには,プリンタスプーラを外さないと制御できません。

プリンタのトレイを変更するAPI

コモンダイアログである、プリントダイアログを使用してください。 DocumentProperties() が使用できます。 ps.win16APIでは CreateDC() で渡す DEVMODE 構造体の dmDefaultSource に給紙方法毎の値を設定することで実現。

プリンタの用紙情報の設定

DocumentProperties()

プリンタの印字不可能な領域を取得するWIN32API

GetDeviceCap(hdc , PHISICALOFFSETX);
GetDeviceCap(hdc , PHISICALOFFSETY)
で取得して
GetDeviceCap(hdc , HORZSIZE) <- ミリ
GetDeviceCap(hdc , PHYSICALWIDTH) <- Device Unit
の値より変換して下さい。

シリアルプリンターに1行づつ出力したい。

APIを使って1行づつ印刷する例 Q124649

ローカルのマシンに登録されているプリンタを列挙したい。

EnumPrinters() で列挙できます。

IME

IME

MSDN Libraty Imm〜() のドキュメントを参照して下さい。 [samples] mstools\samples\win32\ime [参考文献] Microsoft Windows95 プログラマーズガイド 30章

IMC_GETCONVERSIONMODE

IMC_GETOPENSTATUS
IMC_GETSENTENCEMODE
IMC_SETCONVERSIONMODE
IMC_SETOPENSTATUS
IMC_SETSENTENCEMODE
の定義文字列は、確かにマニュアル上には存在するが、日本語版Windowsプラットフォームでは、使用できるものではない。 つまり、Windows 95以降のプラットフォームでは、IMEの仕様が FarEAST圏にて統合され、他言語圏(中国語、韓国語.)のみにて使用可能であるAPI/文字列定義などが混在されています。ただし、これは、マニュアル上の問題であり、実際上のヘッダファイルでは削除されています。

IMEをON, OFFにする

ImmSetOpenStatus()

IMEを使用不可にするには?

Q155488 How To Stop IME for a Control

IME の 入力モードを設定するAPI

ImmSetConversionStatus()

IME97の情報ウィンドウを移動させたい

ImmGetContext() ImmSetStatusWindowPos() を使って移動させて下さい。

IME未確定の文字をプログラムで確定したい。

ImmNotifyIME( hIMC, NI_COMPOSITIONSTR, CPS_COMPLETE, dwValue) で確定できます。

IMEが変換中かどうかチェックしたい。

現在変換中の文字列があるかは ImmGetCompositionString()

読みがなを取得する方法

ImmGetCompositionString() with GCS_COMPREADSTR(第二パラメータ)で可能

入力文字から変換候補の1番目を表示したい

ImmGetContext();
ImmSetCompositionString( , SCS_SETSTR, ,  );
ImmNotifyIME(, NI_COMPOSITIONSTR, CPS_CONVERT, );
ImmNotifyIME(, NI_SELECTCANDIDATESTR, , ); ←変換候補が出る
ImmNotifyIME(, NI_COMPOSITIONSTR, CPS_COMPLETE, );
sample
msdev\sample\sdk\win32\imm\〜

ImmGetConversionList()

ImmGetConversionList()は、中国語版Platformのみでのサポート

他のプロセスの Input Context を取得するには?

IMM32.DLLはプロセス毎にロードされるので、他のプロセスのhIMCを取得するのは、無理です。

EM_SETIMECOLORメッセージのCOMPCOLOR構造体

EM_SETIMECOLORメッセージのCOMPCOLOR構造体は4つの配列形式になっています。 COMPCOLOR[0] 未確定入力文字列 COMPCOLOR[1] 変換中の文字列 COMPCOLOR[2] 他の未確定文字列 COMPCOLOR[3] 変換する文字列

help

word97のRTFがコンパイルできません

VC4.0に付属のHelp workshop 4.01は word97 の RTFファイルに対応していません。 Word95を使われるか、help workshop 4.02以降を使用して下さい。 hcw 4.02 VC5.0 \DevStudio\VC\Unsupported Tools\HCW hcw 4.03 ftp://ftp.microsoft.com/Softlib/MSLFILES/hcwsetup.exe ps.Warnig 4813は RTF トピックファイル の厳密なフォーマットに合っていない

ネットワーク

マルチドメインで信頼環境を結んでいるかどうか調べる API

LsaEnumerateTrustedDomains() 関数があります。 sample と リファレンス は 97 April の \MSTOOLS\SAMPLES\WIN32\WINNT\SECURITY\LSASAMP の下に在ります。

ネットワーク上にファイルが存在するか確認するには?

WnetOpenEnum() WNetEnumResource() 等で確認して下さい。

ネットワークドライブを動的に接続するには

WNetAddConnection2()

現在有効なネットワーク接続を遮断します。

WNetCancelConnection2

WNetConnectionDialog() の return 値がWin95をNT4.0で違う

win95 1223、 NT4.0 -1で返ってきます。

プログラムでユーザーの登録をする方法

NetAddUser()

ネットワーク上のリソースのセキュリティ情報を取得する方法は有りますか

Windows95はセキュリティ関係のAPIはサポートされていません NT: GetFileSecurity() Microsoft Developer Network Library Edition SDK Documentation Platform SDK Windows Base Service Security mstool\samples\win32\winnt\security\〜

ログオンユーザー以外でログオンしようとすると失敗する。

WNetAddConnection2() にはユーザー名とパスワードを指定する事が出来るが、 Windows95はマルチログオンに対応していないので、他のユーザー名を使ってログオンすることはできません。

Media Access Control (MAC) アドレスを取得する方法

KB Q118623 Getting the MAC Address for an Ethernet Adapter ps.NetBIOSを使用せずにMedia Access Control (MAC) アドレスを取得する方法はありません。

クライアントマシンからサーバマシンのシステム時刻を取得する方法について

SRWINPRO SRX950411000877 CreateProcess() で net use /time を実行してください。 KB:Q131715 How to Set Up And Synchronize with Domain Time Source Servers

FileI/Oで同期を取る場合クライアント側がWindows95の場合、共有制御が上手く行われない

仕様上、キャッシュと取得します。 その他のネットワーク上の同期方法、ソケット、パイプを使って下さい。 [以下の内容は保証外] 本現象を回避するためのネットワークリダイレクタが弊社から Web で提供されております。 このネットワークリダイレクタは、サーバ上に存在しているファイルのオープンを行なった場合にキャッシュされていたデータを無効にし、新たにサーバ側のデータを取得しにいくことが出来るようになっております。 弊社でのテストでは、このネットワークリダイレクタを使用することにより現象が発生しなくなりました。 このネットワークリダイレクタは以下のアドレスからダウンロードすることが出来ます。http://premium.microsoft.com/support/kb/articles/q148/3/67.asp 注意: このネットワークリダイレクタは以下のバイナリの値がレジストリにある場合のみ、サーバ上に存在しているファイルのオープンを行なった際のキャッシュを無効にします。 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Vxd\VREDIR\DiscardCacheOnOpen = 1 もしこの値が存在していなかったり、0 が設定されていた場合、このネットワークリダイレクタは Windows95 バージョンの 4.00.95 もしくはそれ以前の Vredir.exe と同様に動作します。

GetShortPathName()はNetWareはサポートしていません。

there is a bug with the GetShortPathName API when called from a NT 4.0 machine to a Windows 95 machine

共有フォルダがあるクライアントがWindows95の場合 ネットワーク 上の共有フォルダーのデータ書き込み監視をFindFirstChangeNotification()でするとエラーになる。

Windows NT を使用するか、 ・THREAD_PRIORITY_IDLE で作成したスレッドで監視する(トラフィックが増えるので現実的でない) ・リソース提供側のアプリで対応するしかない

イーサトークを通して書き込みしているファイルの終了イベントを取得したい。又はそのファイルが書込み途中ならアクセスを禁止したい。

ReadDirectoryChangesW MSDN LIbrary sample FWatch

winsock

Winsock2.0の入手方法について

http://www.microsoft.com/win32dev/netwrk/winsock2/ws295.html

IPアドレスの取得

gethostbyname() で LPHOSTENT 構造体を取得した後、inet_ntoa() で文字列に変換する

使用されていないポート番号を取得するAPI

取得する方法はありせん。bind() で WSAEADDRINUSE が返ってきた場合使われていると判断する。 WindowsCE:bind() のリファレンスに例が載っています。 SOCKADDR_IN sin; SOCKET s; u_short alport = IPPORT_RESERVED; sin.sin_family = AF_INET; sin.sin_addr.s_addr = 0; for (;;) { sin.sin_port = htons(alport); if (bind(s, (LPSOCKADDR)&sin, sizeof (sin)) == 0) { /* it worked */ } if ( GetLastError != WSAEADDRINUSE) { /* fail */ } alport--; if (alport == IPPORT_RESERVED/2 ) { /* fail--all unassigned reserved ports are */ /* in use. */ } }

Socket通信で Server側でCPUを消費せずに待機する方法

WSAAsyncSelect() でイベントを起こすようにして下さい。 但し非同期通信になります。

ソケットのタイムアウト時間の設定

connect() のタイムアウト時間は HKEY_LOCAL_MACHINES\System\Current\ControlSet\Services\TCPIP\Paramerers\TcpMaxConnextRetransmission で設定されますが、システム全体に与える影響が大きいので、非ブロックモードで select() でタイムアウト時間を制御する方法をお勧めします。

SNMPサービスを使う際にSDKからDLLを持ってきたのですが、それを再配布条件を教えてほしい

\license\redist.txt を参照して下さい。 License.txt を準拠して頂いて再配布可能です。 License.txt を読んで下さい。

gethostbyaddr() で自分の IP アドレスを指定した場合、エラーになる

仕様です。 回避方法] DNS を使用 hosts ファイルにダミーのエントリを追加する などがあります。

accept() で受ける前に設定したオプションは、accept() で返されたソケットハンドルに継承されるのか?

The newly created socket is the socket that will handle the actual the connection and has the same properties as socket s

Internet

InternetOpenとInternetCloseの引数によって使用するポートが変わる

INTERNET_FLAG_PASSIVE をした時、20 番以外のポートを使ってデータ転送をおこないます。 RFC959.txt を参照して下さい。

RAS

Win95 VCからリモートアクセスネットワークを使いたい。

RAS〜() の関数を使って下さい。 サンプル:msdev\sample\sdk\win32\rasberry

RasDial()でDialogを表示しない

必要な情報が全てセットされていればDialogは表示されません。 Ras〜()のことについて詳しい本はありません。 Developers Network の Library に記述があります。

RasDial() でパルス(トーン)でかける。

電話番号の前にT, P を指定する。

RAS でパルス発進できない

asDial()で電話番号のみを指定してダイヤルした場合は、それらの所在地情報は使用されず、モデム自信の設定(不揮発性メモリの内容あるいは標準設定)に依存します。 win32sdk 2150

他のアプリケーションが接続したダイアルアップ接続を切断する方法?

RasEnumConnections関数を用いて切断したいRAS接続のハンドル(HRASCONN)を取得し、RasHangUp関数を実行してください。 win32sdk 1626 参照

RasSetEntryProperties()で設定するモデム名の一覧を取得するAPIを教えてほしい

RasEnumDevices() Windows NT: Use version 4.0 or later. Windows: Use Windows 95 OSR2 or later.

RASでの ダイアルアップ接続の状況を取得したい。

COM ポートは RAS が握っているので直接開くことはできない。 普通にエラー処理をするか、 RasGetConnectStatus() でハンドルの状態を見るぐらい。 タスクトレーは com ドライバが出している。

TAPI

TAPI関数をビルドするとリンクエラー

KB Q151666 PRB: C2065/C2064 Errors when Using Win32 APIs in MFC Program

TAPI: lineGetDevCaps( )の戻り値であるLINEERR_OPERATIONUNAVAILについて

#define TAPI_CURRENT_VERSION 0x00010004 #include して下さい。 [参照文献] KB Q162135 TAPI Calls Return LINEERR_OPERATIONUNAVAIL

TelephonyAPI が NT 3.51 上で使用可能かどうか教えてください。

Windows95 −−−TAPI Version1.4を提供。 WindowsNT3.51−−システムとしては、サポートしていない。 WindowsNT4.0 −−TAPI Version1.4を提供もしくは、それ以降のもの。(2.0)

モデムの機能(COMポート)を取得するAPI

GetcommProperties() ps.COMポートのハンドルを送ればCOMポートの機能を取得できる

モデムのプロパティ情報(現在の設定)を取得するAPI

GetCommConfig() の MODEMSETTINGS の dwSpeakerVolume, dwSpeakerMode, dwPreferredModemOptions で取得できます。 フラグの詳細は MODEMDEVCAPS を参照して下さい。 ps.GetCommProperties()はモデムの機能を返す

モデムの設定の変更

SetCommConfig()

ダイアログを使ったモデム設定の一時的な変更

lineConfigDialog() ps.lineShutDown()を呼ぶまで有効

論理回線に関する情報を取得する

lineGetDevCaps()

モデムハンドルの取得

lineGetID() Windows95通信プログラム P96 ps.LineOpen()の時にdwPriivilegesにLINECALLPRIVILEGE_OWNERを指定しなければならない。

所在地情報の取得

lineGetTranslateCaps( ) パルス、トーンも取得できる [参考文献] Windows95通信プログラミング p.165

国別情報一覧を取得する方法

lineGetCountry() mstools\samples\win32\tapi\tapicom\tapicode.c 3647L

回線やアドレスの状態メッセージの取得

lineSetStatusMessage()

モデムが複数接続されている時、lineNegotiateAPIVersion()のdwDeviceIDはどうしたらいいのか?

lineInitialize()が論理回線デバイス数(numLines)を返すので、0 〜 numLines-1 の範囲で指定する。 GetcommProperties()を使ってモデムの名称をを取得できるので判断して下さい。

ユニモデムではサポートされていない関数

lineGenerateDigits( ) lineMonitorDigits( )

comm:勝手に break 信号を送る事があるのか?また、受けた場合にどうなるのか?

速度が不安定になった時など仕様で breakで送ることがあります KB Q119506 breakが流れている間は通信できません。

MAPI

MAPI の使い方の資料は?

INSIDE MAPI アスキー出版

MSDN
  Microsoft Developer Network Library
    SDK Documentation
      Platform SDK
        Database and Messaging Service
          Win32 Messaging(MAPI)

devstudio\samples\win32\mapi\mapi.hlp

[sample]
mstools\samples\win32\mapi
mstools\samples\mapi\〜

FAX送信したい。具体的なAPIは?

MAPISendMail()のlpRecips の lpszAddress に "FAX:03-0000-0000"のように設定して下さい。 ps.NT では Microsoft FAX が実装されていませんのでできません。

MAPIを使ってFAXを送信しているが、送信先のFAXが切断したときのエラーを取得するAPI

Simple MAPIでは取得できません、拡張された MAPI を使う必要があります。

Maicrosoft Fax を使って送信を行う時に、ダイアログを表示せず、電話番号をソースで設定したい。

MAPI を使って FAX を送ると電話番号を指定できます。 Sample \msdev\samples\sdk\win32\mapi

Mailシステムがセットアップされているかどうかを調べる関数

ソフトがインストールされているか Q141061 Mailのセッションが確立されているか Q128963

MAPILogon() でダイアログを表示しないようにするには?

flFlags MAPI_LOGON_UI を指定しないでください。 プロファイル名、パスワードが正しく設定されていればダイアログは出ません。

MAPISendMail( ),ダイアログ等は出したくない。

MAPISendMail( ) のflFlagにMAPI_DAILOGを指定せず、MapiMessage構造体のnRecipCountとlpRecipsが正しければダイアログは表示されません。

メモリマップドファイルの Create 側のプロセスから open 側の参照を終わらせる方法はないか?

できない。 ERROR_ALREADY_EXISTS が帰ってきても既存のファイル マッピング オブジェクトの有効なハンドルを (新しく指定されたサイズではなく、 現在のサイズで) 返しますので、それを引き続き使用できます。

Exchangeのprofileの情報を取得する関数などあれば紹介して欲しい

ありません。
散在した情報として、
Microsoft Knowledge Base
XCLN: Location of User Profiles
Article ID: Q141984
Microsoft Knowledge Base
HOWTO: Logging on to Active Messaging Session w/ Default Profile
Article ID: Q171422
があります。

ODBC

OpenDatabaseメソッドのヘルプには共有かどうかを指定するところはないのですが、サンプルプログラムを見るとOpenDatabaseメソッドの第二引数で指定できるようだ。

DAO 3.5 よりワークスペース ODBCDirect が追加になりました。 それに関する記述です。 Jet Database ワークスペースを使用する場合は 2番目の引数で共有設定を行います。

SQLBindCol()で可能のようだが、Field が Date型、通貨型のときに、第三引数の fCTypeを何に指定すればわからない

SQL Server Books Online ODBC SQL Server ドライバ に詳しい記述がございます。 そちらを参照下さい。 SQL Server ODBC SQL型 C データ型 datetime SQL_TIMESTAMP SQL_C_TYPE_TIMESTAMP money SQL_DECIMAL SQL_C_CHAR が標準です。

OLE

AppWizard で実行時に不可視をチェックすると、ウィンドウのハンドルが 0 となり、親スレッドへメッセージがポストされない。

Windowless コントロールはメッセージ処理をサポートしていません。 速度を重視した為です。OCX96参照

VC5.0で作成したActiveXコントロールをVBで使う際のエラートラップの方法に関して確認したい。

・例外をメソッドの呼び出しやプロパティへのアクセスの間に送出しなければならないときは、ThrowError を使ってオートメーションエラーを送出する。 ・例外がそれ以外の場合に発生した場合は、標準の Error イベント( FireError )を使って例外を送出する。

uuidgenのコードが欲しい。

以下が UUIDGEN.EXE の GUI 版 \DevStudio\VC\SAMPLES\MFC\UTILITY\GUIDGEN

JAVA

JSDK3.0のサンプルがコンパイルできない。

http://www.microsoft.com/java/download.htm よりたどっていき Microsoft SDK for Java, version 3.0 pre-release 1 Microsoft virtual machine for Java のインストールが必要 http://www.microsoft.com/msdownload/java/sdk/30/sdk-java.asp http://www.microsoft.com/msdownload/java/sdk/30/MSJAVX86.asp よりダウンロード

Direct X

Open GL

Open GL を使って2byte文字列を3D表示する方法はありますか?

wglUseFontOutlines( ) は2バイト文字には対応していません。 Open GL を使って2byte文字列を3D表示するにはビットマップを経由することになります [参照] mstools\samples\opengl\scrsave\text3d

マルチメディア

MCI によるビデオを現在開いているウィンドウに表示したい。

dwFlags に MCI_DGV_OPEN_PARENT を指定して下さい。 サンプル mstools\samples\mm\movplay を参照して下さい

MCI ビデオで 表示サイズの変更をするにはどうしたら良いのか

MCI_WHERE

MCI ビデオで輝度調整の仕方はどうしたら良いのか

MCI_SETVIDEO を使って、フラグMCI_DGV_SETVIDEO_BRIGHTNESSを使って下さい

ビデオキャプチャーのサンプルは?

vc\sample\sdk\mm\vidcap

MIDIのマスターボリュームの調整方法を教えて欲しい。

mixerSetControlDetails() [sample] mstools\mm\mixapp

配布

SDKのサンプルmssetupのDLLを再配布していいか

SDKのCD_ROMの \license\redist.txt に書いてあります。
MSCOMSTF.DLL
MSDETSTF.DLL
MSINSSTF.DLL
MSUTLSTF.DLL
MSSHLSTF.DLL
は再配布可能モジュールです。

DirectXのアンインストールプログラムの作り方がわからない。

KB Q134333 にサンプルがありますのでこれを参照して下さい。

アイコン化するときに一瞬で行いたい

ANIMATIONINFO AnimationInfo;
AnimationInfo.cbSize = sizeof(AnimationInfo);
AnimationInfo.iMinAnimate = 0;
SystemParametersInfo(SPI_SETANIMATION,0,&AnimationInfo,SPIF_SENDWININICH ANGE);でアニメーション動作しなくなります。

戻る