約 6,305,210 件
https://w.atwiki.jp/abwiki/pages/348.html
Win32API(ういんさんじゅうにえーぴーあい)とは32ビットウインドウズの提供するAPI(≒関数)。 でも同じ32ビットウインドウズでも過去の互換性のために存在する子や、新しく追加されたものなど一貫性がなかったりするので注意。 例えばメモリ割り当てには4つも関数が存在する。 GlobalAlloc LocalAlloc HeapAlloc VirtualAlloc
https://w.atwiki.jp/amunk/pages/5.html
Win32API Win32APIネットリソースの検出WNet系APIを用いた検出 ネットリソースの検出 WNet系APIを用いた検出 以下の3つのAPIを用いてネットリソースの検出を行う。 WNetOpenEnum() WNetEnumResource() WNetCloseEnum() APIで使用される構造体のポインタも定義しておく。 type PNetResources = ^TNetResources; TNetResources = array [0..MaxInt div sizeof(TNetResource) - 1] of TNetResource; API用の作業領域を確保する。 crdBufsize = Sizeof(TNetResource) * 50; crdEntries = $FFFFFFFF; GetMem(recNetResources, crdBufsize); 検索情報を設定する。 with recNetResource do begin dwScope = RESOURCE_GLOBALNET; dwType = RESOURCETYPE_DISK; dwDisplayType = RESOURCEDISPLAYTYPE_GENERIC; dwUsage = RESOURCEUSAGE_CONNECTABLE; lpLocalName = ; lpRemoteName = 検索するネットリソース(\\hogehoge); lpComment = ; lpProvider = ; end; 検索開始~検索終了まで。 // ネットリソース検索開始 if WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @recNetResource, hdlEnum) NO_ERROR then begin WNetCloseEnum(hdlEnum); Exit; end; // ネットリソース検索 if WNetEnumResource(hdlEnum, crdEntries, recNetResources, crdBufsize) NO_ERROR then begin WNetCloseEnum(hdlEnum); FreeMem(recNetResources, crdBufsize); Exit; end; // ネットリソース検索完了 WNetCloseEnum(hdlEnum); ネットワーク上のコンピュータを発見した後、それらに目的のフォルダがあるかどうかを確認する処理。コンピュータを発見する事だけが目的ならこの処理はいらない。 // 画面ステータス更新 for i = 0 to crdEntries - 1 do if StrPas(recNetResources^[i].lpRemoteName) = \\hogehoge\hagehage then 見つかった時の処理 最後は忘れず作業領域を開放しておく。 // 作業領域開放 FreeMem(recNetResources, crdBufsize);
https://w.atwiki.jp/abwiki/pages/43.html
Win32APIとはなんですか? 一言で言えば、関数です Windows側の提供する、様々な機能はWin32APIに結晶されております。 例えばウインドウやシェル操作。 例えばファイルやレギストリ、プロセスレッドといったシステムに関わるもの。 こう言った類のものを扱うのがWin32APIです。 Win32APIはDLLという形で提供されています。 多くの言語には、Win32APIを使いやすくした独自のライブラリがあったりしますが、ABには無いような気がします。 #N88BASIC で出てくる黒窓、各種命令も内部でWin32APIを使っていますがライブラリと呼ぶにはレベルが低いかと思います。 実はよくあるAPIはすでに宣言されていますが、完全ではないため、自分で宣言することもあろうかと思います。 Declareを使う方法と関数ポインタでやる方法とがあります。 Declare Sub/Function 関数名 [CDECL]Lib"DLLの名称" [Alias 別名] (引数リスト) As 戻り値の型 これは、VBからパクったやり方で、簡単なのですが、起動時に対象DLLがないと起動すらしないというパターンになります。 関ポ Dim 関数名 As *Function(引数リスト) As 戻り値の型 Dim hDLL As HINSTANCE hDLL = LoadLibrary(DLLの名前) 関数名 = GetProcAddress(hDLL, "関数名") 宣言した関ポにLoadModuleとGetProcAddressを使う方法です。 起動時にDLLは必要なく、必要なときに読み込めるので柔軟です。 ただしCDECL呼び出し規約は使えません。
https://w.atwiki.jp/cplusplus/pages/15.html
API timeSetEvent マルチメディアタイマ。 MMRESULT timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD dwUser, UINT fuEvent ); ヘッダー:mmsystem.h 内で宣言 インポートライブラリ:winmm.lib を使用 猫でも [http //hp.vector.co.jp/authors/VA016117/]
https://w.atwiki.jp/urokun/pages/5.html
メモリ領域の初期化ZeroMemory sprintfの使い方 固定幅フォントを用意するGetStockObject フォントのサイズを調べるGetTextMetrics 新しいブラシを作成する WM_PAINT以外のメッセージ処理中に描画を行う 矩形を描画する RGB COLORREF ファイルの読み書きCreateFile メモリ領域の初期化 ZeroMemory void ZeroMemory( PVOID ポインタ , SIZE_T サイズ ) sprintfの使い方 int _stprintf_s( 出力の格納場所, 格納する最大文字数, 書式指定文字列, ... ) 固定幅フォントを用意する SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT)); 上の処理を2行に分割したもの↓ HFONT hFont = GetStockObject(SYSTEM_FIXED_FONT); SelectObject(hdc,hFont); GetStockObject HGDIOBJ GetStockObject( int 定数 ) GetStockObject フォントのサイズを調べる TEXTMETRIC tm; LONG textHeight; GetTextMetrics(hdc, tm); textHeight = tm.tmHeight; GetTextMetrics BOOL GetTextMetrics( HDC hdc, LPTEXTMETRIC lptm) 新しいブラシを作成する LOGBRUSH logbrush; logbrush.lbColor = RGB(255,0,0); logbrush.lbHatch = HS_CROSS; logbrush.lbStyle = BS_SOLID; HBRUSH hBrush = CreateBrushIndirect( logbrush); LOGBRUSH CreateBrushIndirect WM_PAINT以外のメッセージ処理中に描画を行う GetDC()でクライアント領域のデバイスコンテキストハンドルを取得する HDC GetDC( HWND hWnd; ); GetDC 描画する ReleaseDC()で開放する 矩形を描画する BOOL Rectangle( HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect ); Rectangle RGB RGB COLORREF COLORREF ファイルの読み書き CreateFile HANDLE CreateFile( LPCTSTR lpFileName, // ファイル名 DWORD dwDesiredAccess, // アクセスモード DWORD dwShareMode, // 共有モード LPSECURITY_ATTRIBUTES lpSecurityAttributes, // セキュリティ記述子 DWORD dwCreationDisposition, // 作成方法 DWORD dwFlagsAndAttributes, // ファイル属性 HANDLE hTemplateFile // テンプレートファイルのハンドル ); CreateFile
https://w.atwiki.jp/memoprogram/pages/19.html
Tips/ウィンドウの作成 構造体/WNDCLASS 関数/CreateWindow() 関数/LoadCursor() 関数/LoadIcon() 関数/MessageBox() 関数/RegisterClass() 関数/ShowWindow() 関数/UpdateWindow() 関数/WinMain()
https://w.atwiki.jp/memoprogram/pages/18.html
ウインドウの作成 ウインドウの作成は以下の順で行われる。 WNDCLASS構造体の初期化 WNDCLASS構造体の登録 ウィンドウの生成 ウィンドウの表示 サンプルプログラム #pragma comment(lib, "winmm.lib") // Win32API拡張に必要#include Windows.h // Win32APIの呼出しに必要 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstace,LPSTR lpCmdLine,int nCmdShow){//-----------------------------------------------------------------------------// WNDCLASS構造体の初期化//-----------------------------------------------------------------------------WNDCLASS windowclass; //WNDCLASS構造体の宣言 // ウィンドウクラス設定windowclass.style= CS_HREDRAW | CS_VREDRAW;// ウィンドウのスタイルwindowclass.lpfnWndProc= DefWindowProc;//ウィンドウプロージャの関数windowclass.cbClsExtra= 0;// 使わないので0windowclass.cbWndExtra= 0;// 使わないので0windowclass.hInstance= NULL;// ウィンドウを登録するアプリケーションのインハンスハンドルwindowclass.hIcon= NULL;// ウィンドウのアイコン。NULLの場合には標準のアイコンが表示windowclass.hCursor= NULL;// カーソル。NULLの場合には標準のアイコンが表示windowclass.hbrBackground= (HBRUSH)COLOR_BACKGROUND + 1;// ブラシ情報windowclass.lpszMenuName= NULL;// メニューの名前windowclass.lpszClassName= "ウィンドウの名前";// この構造体に割り当てるクラス名 //-----------------------------------------------------------------------------// WNDCLASS構造体の登録//-----------------------------------------------------------------------------if (!RegisterClass( windowclass)){// エラー処理retren 0;} //-----------------------------------------------------------------------------// ウィンドウの生成//-----------------------------------------------------------------------------HWND hWnd; //ウインドウハンドル構造体の宣言 hWnd = CreateWindow(windowclass.lpszClassName,// ウィンドウクラスの登録で割り当てたクラス名"Title",// ウィンドウのタイトルWS_OVERLAPPEDWINDOW, // ウィンドウの種類、状態の設定CW_USEDEFAULT,// ウィンドウのX座標CW_USEDEFAULT,// ウィンドウのY座標CW_USEDEFAULT,// ウィンドウの横幅CW_USEDEFAULT,// ウィンドウの縦幅NULL,// 子ウィンドウ使用の際に設定NULL,// 子ウィンドウ使用の際に設定windowclass.hInstance,// 登録するウィンドウインスタンスNULL);// ウィンドウが生成されようとしたときに実行する関数 // ウィンドウクラスの作成に失敗したら例外処理を飛ばすif (hWnd == NULL){// エラー処理retren 0;} //-----------------------------------------------------------------------------// ウィンドウの表示//-----------------------------------------------------------------------------ShowWindow(hWnd, SW_SHOW);}
https://w.atwiki.jp/opengl/pages/122.html
Win32API の joyGetPosEx を使ってジョイパッドの状態を取得します。 認識できるコントローラーは管理人が試した所、4つまで出来ました。 JOYSTICKID2+1で3つめのコントローラー、JOYSTICKID2+2で4つめのコントローラーとなります。 今回のプログラムは、オレンジの四角形をジョイパッドの方向キーで移動させます。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, winmm.lib ) #include windows.h #include mmsystem.h #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 int x=150,y=80; void SquareFill2D(int x1,int y1,int x2, int y2){ glBegin(GL_QUADS); glVertex2i(x1,y1); glVertex2i(x2,y1); glVertex2i(x2,y2); glVertex2i(x1,y2); glEnd(); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor4f(1.0f,0.5f,0.0f,1.0f); SquareFill2D(x,y,x+50,y+50); glutSwapBuffers(); } void idle(void) { JOYINFOEX JOYPAD; JOYPAD.dwSize = sizeof(JOYINFOEX); JOYPAD.dwFlags = JOY_RETURNALL; // 全ての情報を取得 if(joyGetPosEx(JOYSTICKID1, JOYPAD) == JOYERR_NOERROR){ // 成功 if(JOYPAD.dwXpos 0x7FFF + 0x4000) x+=2; if(JOYPAD.dwXpos 0x7FFF - 0x4000) x-=2; if(JOYPAD.dwYpos 0x7FFF + 0x4000) y+=2; if(JOYPAD.dwYpos 0x7FFF - 0x4000) y-=2; //ボタン32個まで 空制御 コピペ用 if(JOYPAD.dwButtons JOY_BUTTON1); if(JOYPAD.dwButtons JOY_BUTTON2); } Sleep(1); glutPostRedisplay(); } void Init(){ glClearColor(1.0, 1.0, 1.0, 1.0); glOrtho(0, WIDTH, HEIGHT, 0, -1, 1); } int main(int argc, char *argv[]) { glutInitWindowPosition(100, 100); glutInitWindowSize(WIDTH, HEIGHT); glutInit( argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow( ジョイパッド ); glutDisplayFunc(display); glutIdleFunc(idle); Init(); glutMainLoop(); return 0; }
https://w.atwiki.jp/opengl/pages/123.html
Win32API の PlaySound を使用して .wav を再生します。 glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS); を 指定すると freeglut の場合、 glutMainLoop(); から戻ってくる事が可能です。 いつも解放はOSまかせにしている管理人ですが、今回は解放コードも記述しました。 ファイル main.cpp sample.wav (自分で用意して下さい) main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, winmm.lib ) #include windows.h #include mmsystem.h #include GL/freeglut/freeglut.h #include stdio.h #define WIDTH 320 #define HEIGHT 240 LPCWSTR Sound; class GLFONT { public HFONT Hfont; HDC Hdc; GLFONT(wchar_t *fontname, int size); void DrawStringW(int x,int y,wchar_t *format, ...); }; //コンストラクタ フォント作成 GLFONT GLFONT(wchar_t *fontname, int size) { Hfont = CreateFontW( size, //フォント高さ 0, //文字幅 0, //テキストの角度 0, //ベースラインとx軸との角度 FW_REGULAR, //フォントの太さ FALSE, //イタリック体 FALSE, //アンダーライン FALSE, //打ち消し線 SHIFTJIS_CHARSET, //文字セット OUT_DEFAULT_PRECIS, //出力精度 CLIP_DEFAULT_PRECIS, //クリッピング精度 ANTIALIASED_QUALITY, //出力品質 FIXED_PITCH | FF_MODERN, //ピッチとファミリー fontname); //書体名 Hdc = wglGetCurrentDC(); SelectObject(Hdc, Hfont); } //ワイド文字列の描画 void GLFONT DrawStringW(int x,int y,wchar_t *format, ...) { wchar_t buf[256]; va_list ap; int Length=0; int list=0; //ポインタがNULLの場合は終了 if ( format == NULL ) return; //文字列変換 va_start(ap, format); vswprintf_s(buf, format, ap); va_end(ap); Length = wcslen(buf); list = glGenLists(Length); for( int i=0; i Length; i++ ){ wglUseFontBitmapsW(Hdc, buf[i], 1, list + (DWORD)i); } glDisable(GL_LIGHTING); glRasterPos2i(x, y); //ディスプレイリストで描画 for( int i=0; i Length; i++ ) { glCallList(list + i); } glEnable(GL_LIGHTING); //ディスプレイリスト破棄 glDeleteLists(list, Length); list = 0; Length = 0; } GLFONT *font; void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor4f(0.0f, 0.0f, 1.0f, 1.0f); font- DrawStringW(10,120,L PlaySoundで再生しています。 ); glutSwapBuffers(); } void idle(void) { glutPostRedisplay(); } void Init(){ glClearColor(1.0, 1.0, 1.0, 1.0); glOrtho(0, WIDTH, HEIGHT, 0, -1, 1); font = new GLFONT(L MS明朝 , 24); DWORD dwReadSize; HANDLE FileHandle=CreateFile(L sample.wav ,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(FileHandle==INVALID_HANDLE_VALUE){ MessageBox(NULL,L ファイルが開けません ,L ERROR!! ,MB_OK); } DWORD dwFileSize=GetFileSize(FileHandle,NULL); Sound=(LPCWSTR)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,dwFileSize); ReadFile(FileHandle,(LPVOID)Sound,dwFileSize, dwReadSize,NULL); CloseHandle(FileHandle); PlaySound(Sound,NULL,SND_MEMORY | SND_ASYNC | SND_LOOP); } void Release(){ PlaySound(NULL,NULL,0); HeapFree(GetProcessHeap(),0,(LPVOID)Sound); MessageBox(NULL,L 解放して終了します。 ,L END ,MB_OK); PostQuitMessage(0); } int main(int argc, char *argv[]) { glutInitWindowPosition(100, 100); glutInitWindowSize(WIDTH, HEIGHT); glutInit( argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutCreateWindow( wavを再生 ); glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS);//メインループから戻ってくる設定 glutDisplayFunc(display); glutIdleFunc(idle); Init(); glutMainLoop(); Release(); return 0; }
https://w.atwiki.jp/gameprogramming/pages/29.html
ここではWIn32APIを学ぶというかメモして行きたいと思います。 ちなみに使用言語はC言語やC++じゃなくて、D言語ですっ! 工事中- 自作ゲームの開発記録「シロンス」に戻る