五猫橙 发表于 2009-9-18 18:21:08

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

本帖最后由 五猫橙 于 2009-10-10 09:52 编辑

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

---
用模拟点击了...

netegg 发表于 2009-9-18 23:43:47

获取找到了,修改没发现
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)

五猫橙 发表于 2009-9-19 10:13:06

测试成功.请问出处?
修改的话.应该也是DLLCALL吧.不过具体的 - - 期待AU狂来回答 - -

netegg 发表于 2009-9-19 11:07:41

本帖最后由 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:07:08

本帖最后由 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

五猫橙 发表于 2009-9-19 16:17:41

DllCall("syssetup.dll", "int", "SetupChangeFontSize", "int_ptr", 0, "wstr", "96")
这一句看着感觉就像系统字体DPI.因为一般的默认值是96
但是我在VMWARE里面设置失败了

netegg 发表于 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看的不是太懂...

netegg 发表于 2009-9-19 22:24:11

本帖最后由 netegg 于 2009-9-19 22:25 编辑

8# 五猫橙

什么意思,如果是重启的话,shutdown带一个参数(忘了)可以
页: [1]
查看完整版本: 如何获取和改变系统的字体DPI