プロが教える店舗&オフィスのセキュリティ対策術

ノートパソコン(1280×768)に、外部ディスプレー(1280×1024以上の物)を、取り付けて、外部ディスプレー側に表示しようとしています。
外部ディスプレーで、ウインドウを最大にした時に、画面の縦横のドット数を知りたいのですが、どうすればいいのでしょうか?
GetSystemMetrics関数で、SM_CXSCREEN では、ノートのディスプレーの縦横ドット数しか、得られなかったのですが。どなたかご存じの方、ご教授下さい。

A 回答 (3件)

#1です。


下のコードに関して補足ですが、以下のような情報もありますので、LoadLibraryを使う場合は起動時終了時に1回だけ行うようにしたほうがよさそうです。

Win32 アプリケーションでシステム DLL (例 USER32.DLL、ADVAPI32.DLL、GDI32.DLL )をロード、フリーを繰り返すような処理を行うと Windows NT ではリソースのリークが発生します。

http://support.microsoft.com/default.aspx?scid=k …

あと、よくみるとprintfのとこ間違ってますね。。幅、幅になってしまってます。。
    • good
    • 0
この回答へのお礼

ありがとうございました。
色々調べたつもりだったのですが、分からなくて困っていました。
また、お願いいたします。

お礼日時:2005/07/31 15:16

LoadLibraryでのリソースリークの件は、かわりにGetModuleHandleを使用すれば回避できるかと思います。



それから、Windows 2000より古いWindows NTやWindows 95への対応が必要でない場合は、GetProcAddressを使用せず直接EnumDisplayDevicesやEnumDisplaySettingsを呼び出して差し支えないかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。
教えて頂いたことを、調べて色々とわかり助かりました。
また、よろしくお願いします。

お礼日時:2005/07/31 15:18

EnumDisplayDevicesでデバイスを列挙して、EnumDisplaySettingsで情報取得すればよいようです。



以下かなりいいかげんなコードですが、いちおう動くということで、、

--------------------------
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
typedef BOOL (WINAPI *pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD);
typedef BOOL (WINAPI *pEnumDisplaySettings)(LPCTSTR,DWORD,LPDEVMODE);

DISPLAY_DEVICE dd;
ZeroMemory( &dd, sizeof(DISPLAY_DEVICE) );
dd.cb = sizeof(dd);

HMODULE hm = LoadLibrary( "USER32" );

pEnumDisplayDevices pfnEnumDispDevices = (pEnumDisplayDevices)GetProcAddress( hm, "EnumDisplayDevicesA" );
pEnumDisplaySettings pfnEnumDisplaySettings = (pEnumDisplaySettings)GetProcAddress( hm, "EnumDisplaySettingsA" );


DWORD devnum = 0;
while ( pfnEnumDispDevices( NULL, devnum, &dd, 0 ) ) {
DEVMODE dvmode;
ZeroMemory( &dvmode, sizeof(DEVMODE) );

pfnEnumDisplaySettings( (const char*)dd.DeviceName , ENUM_CURRENT_SETTINGS, &dvmode);

printf( "%d, %d\n", dvmode.dmPelsWidth , dvmode.dmPelsWidth );

devnum++;
}
FreeLibrary( hm );

/*キーを押すまで止る*/
printf( "Finished\n" );
getchar();
return 0;
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!