美文网首页
YUMI(NSIS)软件界面模糊处理(用SetProcessDp

YUMI(NSIS)软件界面模糊处理(用SetProcessDp

作者: storyteller_F | 来源:发表于2019-05-12 14:08 被阅读0次

    步骤

    1. 下载YUMI的源码,解压打开,打开YUMI-Readme.txt 文件,下面是从中截取的片段

    YUMI is an easy to use Multiboot script created using NSIS

    所以YUMI是用NSIS制作的。

    1. 首先 了解NSIS是什么。这是一个用来快捷创建安装程序,一般安装程序的功能就是解压,粘贴,修改部分文件,添加注册表什么的(或者还有我不知道的😄)。所以什么安装程序,安装向导好多都是用NSIS 做的(虽然我在以前并没有了解过😄)。
    2. 那么编辑YUMI的代码,然后重新编译就可以了。
    • 下载NSIS的编译器( NSIS SOURCEFORGE ),在编译器中打开YUMI.nsi 这个文件,编译

    !define: "TBM_SETPOS" already defined!

    很显然出错了

    • 由于这个宏已经被定义过了,导致编译失败然后停止(我不知道作者是如何编译通过的,可能是用了某个版本的编译器吧),现在开始找这个宏是在哪里声明或者定义的,然后就是我没有找到,反正解决方法有两个 一个是使用 !undef 将宏卸载或者删除 ,另一个是使用 !ifndef!endif(很类似C啊) 。如果对NSIS不了解可以通过NISI的软件查看用户手册(我之前也没有接触过NSIS,还有这个手册应该是个chm文件)
    !undef TBM_SETPOS
      !define TBM_SETPOS 0x0405
    
    !undef TBM_GETPOS
      !define TBM_GETPOS 0x0400
    
    !undef TBM_SETRANGEMIN
      !define TBM_SETRANGEMIN 0x0407
    
    !undef TBM_SETRANGEMAX
      !define TBM_SETRANGEMAX 0x0408
    

    或者

    !ifndef TBM_SETPOS
      !define TBM_SETPOS 0x0405
    !endif
    !ifndefTBM_GETPOS
      !define TBM_GETPOS 0x0400
    !endif
    !ifndefTBM_SETRANGEMIN
      !define TBM_SETRANGEMIN 0x0407
    !endif
    !ifndefTBM_SETRANGEMAX
      !define TBM_SETRANGEMAX 0x0408
    !endif
    

    这样编译就能够通过了

    • 开始做真正的代码修改了,找到 Function .onInit的位置做如下修改
    ; --- Stuff to do at startup of script ---
    Function .onInit
    ;在这里添加
    

    添加后是这样的

    ; --- Stuff to do at startup of script ---
    Function .onInit
    System::Call 'SHCore::SetProcessDpiAwareness(i 2)i.R0'
    

    添加的内容是调用了一个Windows Api ,关于这个Api SetProcessDpiAwareness,这里是我参考的博客 NSIS对高分屏的支持以及解决方案
    关于System::Call 的有关信息可以到NSIS 的用户手册中查看

    • 再一次编译通过,然后测试,ok,结束(还有就是之所以模糊是因为Windows 的缩放导致的,特别是高分辨率的屏幕上,是默认进行缩放的,其实不缩放也很难用。图就不上了,反正也看不出当前界面是否进行了缩放,毕竟我是看到过通过修改注册表的方式修改缩放为100%来达到应用不模糊的聪明人。好像只要和注册表有关就很高级呢,什么问题都能解决呢 🤮)。

    相关文章

      网友评论

          本文标题:YUMI(NSIS)软件界面模糊处理(用SetProcessDp

          本文链接:https://www.haomeiwen.com/subject/bzlcaqtx.html