最起码例如:使用CreateFile打开显示器时的正确路径是什么?
#include <Windows.h>
#include <ntddvdeo.h>
#include <string>
std::string GetLastErrorAsString()
{
LPSTR msgBuffer = nullptr;
DWORD errorMessageID = ::GetLastError();
std::string msg("No Error");
if(errorMessageID != 0)
{
size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
errorMessageID,
MAKELANGID(LANG_NEUTRAL,
SUBLANG_DEFAULT),
(LPSTR)&msgBuffer,
0,
NULL);
msg = std::string(msgBuffer, size);
//Free buffer
LocalFree(msgBuffer);
}
return msg;
}
int APIENTRY wWinMain( _In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
DWORD nOutBufferSize = 0;
DWORD result = NULL;
typedef struct _DISPLAY_BRIGHTNESS {
UCHAR ucDisplayPolicy;
UCHAR ucACBrightness;
UCHAR ucDCBrightness;
} DISPLAY_BRIGHTNESS, *PDISPLAY_BRIGHTNESS;
DISPLAY_BRIGHTNESS displayBrightness;
displayBrightness.ucDisplayPolicy = 0;
displayBrightness.ucACBrightness = 50;
displayBrightness.ucDCBrightness = 0;
nOutBufferSize = sizeof(displayBrightness);
HANDLE h = CreateFile( L"\\\\.\\DISPLAY2",
GENERIC_READ | GENERIC_WRITE,
0, NULL,
OPEN_EXISTING,
0, NULL);
if (h == INVALID_HANDLE_VALUE) {
MessageBoxA(NULL, GetLastErrorAsString().c_str(), "Test",
MB_OK | MB_ICONERROR);
return false;
}
return true;
}
我总是收到“拒绝访问” CreateFile
后,在运行Visual Studio以管理员身份时也是如此。所以问题是,如果\\.\DISPLAY2
无法识别,那么Windows会在那里接受哪些设备名称/路径?然而,这是我从EnumDisplayMonitors
得到确切的设备名称:
Found Monitor with 1920x1080 called \\.\DISPLAY1 located at 0:00
Found Monitor with 1680x1050 called \\.\DISPLAY2 located at -1680:240
什么,你希望能够与这样的处理呢? – andlabs
@andlabs我想用它与DeviceIoControl – BadSnowflake