SetProcessDPIAware function
Applies to: desktop apps only
Sets the current process as dots per inch (dpi) aware.
Note SetProcessDPIAware is subject to a possible race condition if a DLL caches dpi settings during initialization. For this reason, it is recommended that dpi-aware be set through the application (.exe) manifest rather than by calling SetProcessDPIAware.
Syntax
BOOL WINAPI SetProcessDPIAware(void);
Parameters
This function has no parameters.
Return value
Type:
Type: BOOL
If the function succeeds, the return value is nonzero. Otherwise, the return value is zero.
Remarks
DLLs should accept the dpi setting of the host process rather than call SetProcessDPIAware themselves. To be set properly, dpiAware should be specified as part of the application (.exe) manifest. (dpiAware defined in an embedded DLL manifest has no affect.) The following markup shows how to set dpiAware as part of an application (.exe) manifest.
<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>
For more information about application manifests, see Manifests (Side-by-Side Assemblies).
Requirements
|
Minimum supported client | Windows Vista |
|---|---|
|
Minimum supported server | Windows Server 2008 |
|
Header |
|
|
Library |
|
|
DLL |
|
Send comments about this topic to Microsoft
Build date: 2/3/2012
- 2/6/2012
- Saurabh Saxena
"The computer may restart ... in XP Service Pack 2"
http://support.microsoft.com/kb/921337
"This problem occurs when Csrss.exe is loading an .exe file or a .dll file that contains a manifest that has Windows Vista extensions. When parsing the embedded manifest, its internal memory can be corrupted if it finds a single tag that has two schema properties."
- 5/13/2009
- DaveMethvin
At first I thought it was because I was using VS 2005, which didn't know about it. But I've upgraded to VS 2008, and I get the same warning. It's not just a warning, it actually leaves the fragment out of the manifest, so I still have to use the SetProcessDPIAware function.
- 7/5/2008
- aidtopia
- 10/25/2008
- Thomas Lee