Use OCR in Windows 10 quickly and easily with Text Grab. With optional background process and popups.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

75 lines
1.9 KiB

//// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
//// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
//// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//// PARTICULAR PURPOSE.
////
//// Copyright (c) Microsoft Corporation. All rights reserved
//Main helper class that provides helper functions used by the PerMonitorDPIWindow class
#include "pch.h"
#include "PerMonitorDPIHelpers.h"
// Returns the DPI awareness of the current process
PROCESS_DPI_AWARENESS NativeHelpers::PerMonitorDPIHelper::GetPerMonitorDPIAware()
{
PROCESS_DPI_AWARENESS awareness;
HANDLE hProcess;
hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessId());
auto result = GetProcessDpiAwareness(hProcess, &awareness);
if (S_OK != result)
{
throw gcnew System::Exception(L"Unable to read process DPI level");
}
return awareness;
}
//Sets the current process as Per_Monitor_DPI_Aware. Returns True if the process was marked as Per_Monitor_DPI_Aware
BOOL NativeHelpers::PerMonitorDPIHelper::SetPerMonitorDPIAware()
{
auto result = SetProcessDpiAwareness(PROCESS_DPI_AWARENESS::PROCESS_PER_MONITOR_DPI_AWARE);
if (S_OK != result)
{
return FALSE;
}
return TRUE;
}
//Returns the DPI of the window handle passed in the parameter
double NativeHelpers::PerMonitorDPIHelper::GetDpiForWindow(IntPtr hwnd)
{
return GetDpiForHwnd(static_cast<HWND>(hwnd.ToPointer()));
}
double NativeHelpers::PerMonitorDPIHelper::GetDpiForHwnd(HWND hWnd)
{
auto monitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
UINT newDpiX;
UINT newDpiY;
if (FAILED(GetDpiForMonitor(monitor, MONITOR_DPI_TYPE::MDT_EFFECTIVE_DPI, &newDpiX, &newDpiY)))
{
newDpiX = 96;
newDpiY = 96;
}
return ((double) newDpiX);
}
//Returns the system DPI
double NativeHelpers::PerMonitorDPIHelper::GetSystemDPI()
{
int newDpiX(0);
auto hDC = GetDC(NULL);
newDpiX = GetDeviceCaps(hDC, LOGPIXELSX);
ReleaseDC(NULL, hDC);
return (double)newDpiX;
}