找回密码
 加入
搜索
查看: 2931|回复: 8

如何获取和改变系统的字体DPI

[复制链接]
发表于 2009-9-18 18:21:08 | 显示全部楼层 |阅读模式
本帖最后由 五猫橙 于 2009-10-10 09:52 编辑

我在官方论坛找到了这个http://www.autoitscript.com/forum/index.php?showtopic=33840
但是一楼说道"very unsuccessful"
三楼的操作方法我也测试了.但是失败了
帮助文档里查不到
请问这里有人知道么...

---
用模拟点击了...
发表于 2009-9-18 23:43:47 | 显示全部楼层
获取找到了,修改没发现
Func _GetDPI ()
   Local $a1[3]
   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[0], "long", $Logpixelsy)
   Local $hDC = DllCall("user32.dll", "long", "ReleaseDC", "long", $hWnd, "long", $hDC)
   $iDPI = $aRet[0]
   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[0] = 2
   $a1[1] = $iDPI
   $a1[2] = $iDPIRat
  ;; Return the array
   Return $a1
EndFunc
$dpi = _getDPI()
msgbox(0,"dpi",$dpi[1])
 楼主| 发表于 2009-9-19 10:13:06 | 显示全部楼层
测试成功.请问出处?
修改的话.应该也是DLLCALL吧.不过具体的 - - 期待AU狂来回答 - -
发表于 2009-9-19 11:07:41 | 显示全部楼层
本帖最后由 netegg 于 2009-9-19 11:10 编辑

官网上找的
http://www.autoitscript.com/foru ... =1&#entry675142
发表于 2009-9-19 16:07:08 | 显示全部楼层
本帖最后由 netegg 于 2009-9-19 16:55 编辑

Func DisplayChangeDPI($dpi)
    $DM_LOGPIXELS = 0x00020000
    $DEVMODE = DLLStructCreate("byte[32];int[10];byte[32];int[6]")
    $b = DLLCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DLLStructGetPtr($DEVMODE))
    If @error Then
        $b = 0
    Else
        $b = $b[0]
    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/foru ... =1&#entry245475
 楼主| 发表于 2009-9-19 16:17:41 | 显示全部楼层
DllCall("syssetup.dll", "int", "SetupChangeFontSize", "int_ptr", 0, "wstr", "96")
这一句看着感觉就像系统字体DPI.因为一般的默认值是96
但是我在VMWARE里面设置失败了
发表于 2009-9-19 16:25:58 | 显示全部楼层
本帖最后由 netegg 于 2009-9-19 16:37 编辑

不清楚了,官网上对这方面的设置函数,不是很多
根据说明,必须重启生效
另外,你可以看看msdn,http://msdn.microsoft.com/en-us/library/dd183565%28VS.85%29.aspx
 楼主| 发表于 2009-9-19 21:57:44 | 显示全部楼层
DPI确实是重起生效的.不过...怎么用AU3脚本设置...
MSDN看的不是太懂...
发表于 2009-9-19 22:24:11 | 显示全部楼层
本帖最后由 netegg 于 2009-9-19 22:25 编辑

8# 五猫橙

什么意思,如果是重启的话,shutdown带一个参数(忘了)可以
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2025-1-12 13:44 , Processed in 0.072648 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表