Windows C++アプリケーションで実際の画面解像度(ピクセル単位)を取得しようとしています。 Windowsのdpi設定が変更されると、実際の解像度の代わりに仮想(調整)解像度が得られます。私は、SetProcessDPIAware、SetProcessDpiAwareness(引数として3つの列挙値すべてを使用)とマニフェストの真の設定を使用しようとしました。すべての3つのケースでは、Windows 7のPCではコードが正常に動作します(実際の解像度が表示されます)が、Win 10では表示されません(ここではDPI認識設定は無視され、調整された解像度が返されます)。SetProcessDPIAwareがWindows 10で動作しないようです。
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
#include <winuser.h>
#include <VersionHelpers.h>
#include <ShellScalingAPI.h>
#include <stdlib.h>
#include <stdio.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char *cBuffer2 ;
cBuffer2 = (char *)malloc(3000) ;
if (IsWindowsVistaOrGreater())
{
// SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE);
int result = SetProcessDPIAware();
sprintf(cBuffer2,"SetProcessDPIAware() result: [%i]\n",result) ;
int height = GetSystemMetrics(SM_CYSCREEN);
int width = GetSystemMetrics(SM_CXSCREEN);
sprintf(cBuffer2,"%s#1:\nHeight: [%i]\nwidth: [%i]\n",cBuffer2,height,width) ;
HWND hwnd = (HWND)atoi(lpCmdLine) ;
HMONITOR monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
MONITORINFO info;
info.cbSize = sizeof(MONITORINFO);
GetMonitorInfo(monitor, &info);
int monitor_width = info.rcMonitor.right - info.rcMonitor.left;
int monitor_height = info.rcMonitor.bottom - info.rcMonitor.top;
sprintf(cBuffer2,"%s#2:\nHeight: [%i]\nwidth: [%i]\n",cBuffer2,monitor_height,monitor_width) ;
}
MessageBox(0,cBuffer2,"SHOWRES.EXE",MB_OK) ;
return 0 ;
}
私が使用してみましたマニフェストは、次のいずれかです。
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
任意のアイデア?
あなたがここで何をしたのかは分かりません。あなたは同時にすべてのことをしているようです。なぜあなたはそれを選んでそれに固執しないのですか?マニフェストアプローチを使用することをお勧めします。あなたは、その成果が何であるか教えてくれませんでした。 –
@David Heffernan:はい、私は多くの異なるアプローチを試していません。私は元のポストでは、Windows 7の下で私は期待される結果(すなわち、ディスプレイの実際の解像度)を得るが、ウィンドウ10では、解像度(私はDPI対応の設定がなくても同じです)。 –
問題は、どのアプローチが必要なのか、何を試したのかわかりません。あなたが1つのアプローチを選択し、[mcve]を提示することをお勧めします。 –