玲珑开发学习记录
个人介绍
梦魇兽,大家叫我小梦即可
- 本科毕业入职滴滴半年升职,滴滴高级架构研发工程师
- 两年绩效最优
- 现裸辞,找寻生命的意义
- 个人有比较多的软件,比如速享、无界、ADBKIT、Code FA,我个人软件涉及的技术栈远比我在公司所接触的多得多
所以我经常会说,技术本身会是各种过程中,最小的问题
这个博客记录我的一些想法和学习的一些资料
玲珑后台服务
需求场景是,控制风扇转速和设置 TDP 功耗都需要管理员权限,所以玲珑管家在编译的时候就有设置请求管理员权限
这是通过 cmakefile 来实现的
1 | SET_TARGET_PROPERTIES(${BINARY_NAME} PROPERTIES LINK_FLAGS "/MANIFESTUAC:\"level='requireAdministrator' uiAccess='false'\" /SUBSYSTEM:WINDOWS") |
所以管理员权限是玲珑的一个必备条件,但是刚开机的时候,用户是没有空间给到玲珑管家管理员权限的
所以我编写一个玲珑服务
这个服务依赖 Windows 的任务计划,开机后不用进入系统,就能把服务启起来,并且能够带有管理员权限
这个目前在玲珑打开的时候就会执行,不用用户手动创建任务计划
1 | # 获取脚本所在目录 |
后台服务隐藏终端
两种方式
一种是默认配置 VS 工程,调用 FreeConsole 函数隐藏终端,再设置一个循环,让程序不退出
1 | FreeConsole(); |
另一种是直接更改程序子系统为 /SUBSYSTEM:WINDOWS,这样就不会有终端出现,但是这种方案需要改代码入口
1 | int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { |
Windows 共享库
我尝试编写可以交叉编译的 Cmakefile,但是失败了,后面的编译都是通过 Visual Studio 来编译的
需要有些配置
共享库开发好,后面不管是使用任何的上层框架都可以方便的调用
两种方法,一种是设置宏,一种是 .def 文件
宏
def
所以底层对外的输出应该是一个 dll 和一个 .h 文件
例如 dart,可以直接根据 .h 文件生成 dart 文件,可以很方便的调用 dll 中的函数
简单说就是,.h 文件维护好,我就能以很好的代码在各个地方调用
风扇控制
这个我得到的输入是一大坨 C# 代码和这样的文本消息,有点难理解,不过后面代码已经可以控制了,
1 | ARB33 |
https://github.com/GermanAizek/WinRing0
然后调研到更改内存的 WingRing0 库
最后经过好些折腾才写出了对应的 dart 代码,不仅是 dart,其他代码要实现控制风扇也比较麻烦
更优解是做成类似于 parsec 的驱动,需要控制风扇的程序根据驱动协议来调用
功耗设置
这个我没有得到可用的输入,自己找到一个是 ryzenadj-win64
对玲珑也是可用的
虚拟显示器
这个目前找到两个关键的库,一个是 parsec-vdd,一个是 Virtual-Display-Driver
https://github.com/nomi-san/parsec-vdd
https://github.com/itsmikethetech/Virtual-Display-Driver
后者我目前没有学会如何使用,所以目前都是用的 parsec-vdd
parsec-vdd 需要安装驱动,但是这个后面也可以自动安装
目前已经实现了开机不需要进入系统就能创建虚拟显示器。
串流软件相关
我个人 Moonlight+Sunshine,或者 Parsec 都是比较大量使用的,我其实不理解为什么 Sunshine 和 Moonlight 会有这么多的分支
但我后面会再详细了解一些这些原因,例如 Sunshine 有阿姨版本,为什么不能往官方提 PR,因为我自己就是一个极度热爱开源的人
者我通常用来玩儿游戏,后者我通常是非游戏需求,因为他支持剪切板共享
Parsec 使用成本其实相对要更低一点
并且我在玲珑上装了 Parsec 后,另一台电脑 A、B 或者 Android 装了 Parsec
不仅 A、B 可以控制玲珑
玲珑是可以直接控制电脑 A、B 的
所以一部分用户肯定是要使用 Parsec 的,并且使用 Moonlight 和 Parsec 的用户都要同等看待
不能直接说 Parsec 的用户就有解决问题的能力,玲珑管家都不适配 Parsec 了
关于玲珑的一点思考
也是我在使用玲珑的一个感受,我家里有 ITX 主机,平时 Mac 也是不离身的,也就是说,我出门,Mac 是一定会带的
那么玲珑对于我这类用户,就是一个比较尴尬的定位
但是经过一些时间,我发现了他的一些使用场景
就是作为串流机
也就是借助玲珑连接我家里的 ITX,这样我不管在哪儿,都能以家里的性能玩儿到游戏
为什么这个设备不是 Mac 呢,因为我手上测试过 5 款手柄,包括飞智,这些手柄都不支持有线连接 Mac
唯一一款支持有线 Mac 的是 Xbox 手柄,但是 Xbox 手柄有没有其他手柄的震感、陀螺仪等
有线可以让我有一个更低的延迟
所以我经常用玲珑去串流我家里的设备
不要再给用户发任何的demo了