imgctl.dll 1.22 およびヘッダファイルは同梱しています ブラウザでダウンロード バッチ処理支援として昔々作った埋もれたコードが沢山あるので、 ちょっとしたバッチツールに使えるようにしました。 どうやれば実装できるか解っていても、 実際他人の dll を使おうとするとそれなりに時間を費やします。 そのへんのサンプルになれば良いと思うのですが。 imgctl.dll は、強力な機能が沢山あるので、 真剣にやりだすと大変なのでまずはこの程度です。 // ********************************************************* // imgctl.dll 1.22 // ( http://www.vector.co.jp/soft/win95/prog/se222453.html ) // を使用してデスクトップをビットマップとして保存します // // ※ imgctl.dll は同梱してあります // // 引数を指定しないと、カレントに desktop.bmp を作成します // 引数を指定すると、それをファイル名として使用します // ↑パスにスペースを含む場合は、" で囲って下さい // ********************************************************* #include <windows.h> #include <stdlib.h> #include <malloc.h> #include <memory.h> #include <tchar.h> #include <stdio.h> #define IMGCTL_RUNTIME #define WINAPI __stdcall #include "imgctl.h" #define LOAD_DLL(STRPATH) \ lib = LoadLibrary( STRPATH ); \ if ( lib == NULL ) { \ MessageBox( hWnd, "dllをロードできません", "", MB_OK ); \ return 0; \ } #define LOAD_FUNC(TYPE,FUNC) \ TYPE FUNC; \ FUNC = (TYPE)GetProcAddress( lib, #FUNC ); \ if ( FUNC == NULL ) { \ FreeLibrary( lib ); \ MessageBox( hWnd, #FUNC " をロードできません", "", MB_OK ); \ return 0; \ } // ********************************************************* // Windows アプリケーションとしてのエントリポイント // Link.exe で /SUBSYSTEM:WINDOWS がデフォルトで // 指定される事になります // ********************************************************* int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow ) { // ******************************************* // デスクトップ // ******************************************* HWND hWnd; hWnd = GetDesktopWindow(); // ******************************************* // ファイル名 // ******************************************* char filename[512]; if ( lpCmdLine[0] == 0x00 ) { lstrcpy( filename, "desktop.bmp" ); } else { if ( lpCmdLine[0] == '"' ) { lpCmdLine[lstrlen(lpCmdLine)-1] = 0x00; lstrcpy( filename, lpCmdLine+1 ); } else { lstrcpy( filename, lpCmdLine ); } } // ******************************************* // 変数 // ******************************************* HINSTANCE lib; HDIB hDib; hDib = NULL; DWORD ret; // ******************************************* // DLL 準備 // ******************************************* LOAD_DLL("imgctl.dll") LOAD_FUNC(DELETEDIB,DeleteDIB) LOAD_FUNC(DIBTOBMP,DIBtoBMP) LOAD_FUNC(DCTODIB,DCtoDIB) LOAD_FUNC(IMGCTLERRORCLEAR,ImgctlErrorClear) LOAD_FUNC(IMGCTLERROR,ImgctlError) RECT rt; HDC hDc; // ******************************************* // ハンドル取得 // ******************************************* GetWindowRect( GetDesktopWindow(), &rt ); hDc = GetDC( hWnd ); // ******************************************* // 処理 // ******************************************* ImgctlErrorClear(); hDib = DCtoDIB( hDc, rt.left, rt.top, rt.right-rt.left, rt.bottom-rt.top ); ret = ImgctlError(); if ( ret == ICERR_PARAM_NULL || ret == ICERR_API_STRETCH ) { ReleaseDC( hWnd, hDc ); FreeLibrary( lib ); MessageBox( hWnd, "メモリデバイスコンテキストよりDIBを作成できませんでした", "", MB_OK ); return 0; } if ( !DIBtoBMP( filename, hDib ) ) { ReleaseDC( hWnd, hDc ); DeleteDIB( hDib ); FreeLibrary( lib ); MessageBox( hWnd, "ビットマップファイルを作成できませんでした", "", MB_OK ); return 0; } // ******************************************* // 終了 // ******************************************* ReleaseDC( hWnd, hDc ); DeleteDIB( hDib ); FreeLibrary( lib ); return 0; } |