如何获取和改变系统的字体DPI
本帖最后由 五猫橙 于 2009-10-10 09:52 编辑我在官方论坛找到了这个http://www.autoitscript.com/forum/index.php?showtopic=33840
但是一楼说道"very unsuccessful"
三楼的操作方法我也测试了.但是失败了
帮助文档里查不到
请问这里有人知道么...
---
用模拟点击了... 获取找到了,修改没发现
Func _GetDPI ()
Local $a1
Local $iDPI, $iDPIRat, $Logpixelsy = 90, $hWnd = 0
Local $hDC = DllCall("user32.dll", "long", "GetDC", "long", $hWnd)
Local $aRet = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", $hDC, "long", $Logpixelsy)
Local $hDC = DllCall("user32.dll", "long", "ReleaseDC", "long", $hWnd, "long", $hDC)
$iDPI = $aRet
Select
Case $iDPI = 0
$iDPI = 96
$iDPIRat =94
Case $iDPI < 84
$iDPIRat =$iDPI / 105
Case $iDPI < 121
$iDPIRat =$iDPI / 96
Case $iDPI < 145
$iDPIRat =$iDPI / 95
Case Else
$iDPIRat =$iDPI / 94
EndSelect
$a1 = 2
$a1 = $iDPI
$a1 = $iDPIRat
;; Return the array
Return $a1
EndFunc
$dpi = _getDPI()
msgbox(0,"dpi",$dpi) 测试成功.请问出处?
修改的话.应该也是DLLCALL吧.不过具体的 - - 期待AU狂来回答 - - 本帖最后由 netegg 于 2009-9-19 11:10 编辑
官网上找的
http://www.autoitscript.com/forum/index.php?showtopic=93974&st=0&p=675142&hl=_GetDPI%20&fromsearch=1&#entry675142 本帖最后由 netegg 于 2009-9-19 16:55 编辑
Func DisplayChangeDPI($dpi)
$DM_LOGPIXELS = 0x00020000
$DEVMODE = DLLStructCreate("byte;int;byte;int")
$b = DLLCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DLLStructGetPtr($DEVMODE))
If @error Then
$b = 0
Else
$b = $b
EndIf
If $b <> 0 Then
;??????DllStructSetData($DEVMODE, 6, $DM_LOGPIXELS)
EndIf
EndFunc
#cs
Func DisplayChangeDPI($dpi)
{
DEVMODE DevM;
long ret;
EnumDisplaySettings(NULL,0,&DevM);
DevM.dmFields = DM_LOGPIXELS;
DevM.dmLogPixels = dpi;
ret = ChangeDisplaySettings(&DevM, CDS_TEST);
switch(ret)
{
case DISP_CHANGE_RESTART:
return 2;
case DISP_CHANGE_SUCCESSFUL:
ChangeDisplaySettings(&DevM, CDS_UPDATEREGISTRY);
SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, (WPARAM)DevM.dmBitsPerPel, (LPARAM)(DevM.dmPelsHeight * 2 ^ 16 + DevM.dmPelsWidth));
return 1;
default:
return 0;
}
}
#ce
后面这段看着有点像c,只是把官方的整个代码复制过来了,没多看
http://www.autoitscript.com/forum/index.php?showtopic=33840&st=0&p=245475&hl=dpi&fromsearch=1&#entry245475 DllCall("syssetup.dll", "int", "SetupChangeFontSize", "int_ptr", 0, "wstr", "96")
这一句看着感觉就像系统字体DPI.因为一般的默认值是96
但是我在VMWARE里面设置失败了 本帖最后由 netegg 于 2009-9-19 16:37 编辑
不清楚了,官网上对这方面的设置函数,不是很多
根据说明,必须重启生效
另外,你可以看看msdn,http://msdn.microsoft.com/en-us/library/dd183565%28VS.85%29.aspx DPI确实是重起生效的.不过...怎么用AU3脚本设置...
MSDN看的不是太懂... 本帖最后由 netegg 于 2009-9-19 22:25 编辑
8# 五猫橙
什么意思,如果是重启的话,shutdown带一个参数(忘了)可以
页:
[1]