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);でアニメーション動作しなくなります。
戻る