【WCE】如何在 boot registry 下调整显示分辨率 (.Net 4.2)

【WCE】使用 8253 定时器蜂鸣 (CEPC BSP) 通过测试,我们发现 Windows CE 没有实现 Beep 函数,亦注意到 x86 嵌入式系统在运行 Windows XPe 时能通过调用 Beep 函数来驱动蜂鸣器蜂鸣。经过对 Beep 函数反向工程以及 8253 定时器蜂鸣原理的研究,我们相信在 Windows CE 下同样能够蜂鸣。首先,讲解一下早期 PC 上的 8253 定时器蜂鸣原理:图中 CLOCK 是时钟(fc=1,1 阅读详情

对于在公共场所使用的 Internet Applicance 而言,RAM-based 或 Hive-based 注册表都是不安全、不可靠的,主要原因有:

  • 一旦用户通过 Win32 API 篡改注册表数据,可能会影响系统的正常运行。如果要恢复注册表数据,往往需要生产商派出技术人员去现场指导。
  • 由于需要安装 FAT 卷,存在用户通过 Explorer 篡改 DOM 上文件,导致系统不能启动的可能。

如果应用程序许可(如:参数设置都是只读的),我们一般会使用 boot registry 来避免发生如上问题,这样一来就每台 IA 而言只需设置主机名、IP 地址和显示分辨率。对于主机名,即使重复也不影响 IA 运行的。对于 IP 地址,只需 DHCP 方式分配即可。但是,似乎不能调整显示分辨率?其实,不然。

每台显示器都有 VESA DDC EDID 信息记录了屏幕的物理尺寸和支持的分辨率等。当我们获取了 EDID 信息后,根据其可以为显示驱动选择一个合适的分辨率,将其写入注册表的相应值。然后,soft reboot 系统(内存中的注册表信息仍被保留),重启后新的分辨率将被显示驱动使用。

以 VIACEPC BSP 为例:

#define    DISP_800_600_16_75    0x25    //800x600x16@75
#define    DISP_1024_768_16_75    0x28    //1024x768x16@75

//创建显示设备的设备上下文
CSafeHandle<HDC, DeleteDC> hDC(CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL));

//获取 VESA DDC EDID 信息
VIACRTEDID viaEDID;
DWORD nEscape(
0x4101);
if (ExtEscape(hDC, nEscape, sizeof(nEscape), (LPCSTR)&nEscape, sizeof(viaEDID), (LPSTR)&viaEDID) <= 0)
    
return AtlHresultFromLastError();
        
//获取显示驱动的默认分辨率
CRegKey regKey;
DWORD dwDisplayMode;
if (regKey.Open(HKEY_LOCAL_MACHINE, TEXT("Drivers//Display//VIA")) || 
regKey.QueryDWORDValue(TEXT(
"DisplayModeNum"), dwDisplayMode))
    
return AtlHresultFromLastError();

// 判断最佳分辨率
DWORD dwPreferred((viaEDID.Reg[1] & 0x02) ? DISP_1024_768_16_75 : DISP_800_600_16_75);

if (dwDisplayMode != dwPreferred)
{
    
//写入最佳分辨率
    if (regKey.SetDWORDValue(TEXT("DisplayModeNum"), dwPreferred))
        
return AtlHresultFromLastError();

    
//soft reboot
    ATLVERIFY(KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL));
}
【IDA】分析 Windows CE 事件日志服务(一) 笔者在开始使用 Windows CE 事件日志服务时,由于自身条件限制未能获得 Microsoft 的技术支持,故只能使用 IDA Pro 对 eventlog.dll 进行分析。笔者感觉事件日志服务相关的注册表设置可能对嵌入式系统软件工程师比较有用,所以注重分析 StartAllLoggers、InitFormattersAndOutputters、CLogEventLog::Initial 阅读详情

相关推荐

修改 UBOOT 中 HDMI 默认分辨率的方法

在打开的源代码文件中,使用文本搜索功能查找与 HDMI 分辨率相关的设置。通常,这些设置位于文件的位于文件的顶部或底部,以及与显示设备相关的位于文件的顶部或底部,以及与显示设备相关的部分。找到 HDMI 分辨率设置的相关代码行后,可以根据需要进行修改。例如,要将默认分辨率设置为 192位于文件的顶部或底部,以及与显示设备相关的部分。找到 HDMI 分辨率设置的相关代码行后位于文件的顶部或底部,以及与显示设备相关的部分。步骤 3:修改 HDMI 分位于文件的顶部或底部,以及与显示设备相关的部分。

RlDart的博客 888

树莓派修改分辨率

通常树莓派通过HDMI能实现即插即用,但是有时会遇到分辨率不是我们想要的情形,因此我们需要修改树莓派的设置来改变分辨率。一、使用读卡器将刷入了raspbian系统的内存卡连接电脑二、打开里面的config.txt三、根据自己的情况修改内容,例如微雪的5寸屏:max_usb_current=1 hdmi_group=2 hdmi_mode=1 hdmi_mode=87 hdmi_cvt 800 480

CoekJin的博客 1万+

STM32CubeMx配置串口使用printf函数打印数据(HAL库开发)

HAL库开发串口,打印printf

m0_58832575的博客 6287

springboot设置像素大小

public static BufferedImage scale(BufferedImage imageToScale, int dWidth, int dHeight) { BufferedImage scaledImage = null; if (imageToScale != null) { scaledImage = new BufferedImage(dWidth, dHeight, ...

weixin_39218527的博客 764

JavaScript 书签脚本实战:腾讯/优酷/爱奇艺等5大视频站m3u8链接一键提取

本文详细介绍了如何使用JavaScript书签脚本一键提取腾讯视频、优酷、爱奇艺等五大视频平台的m3u8流媒体链接。通过分析播放器内部对象结构,开发者可以高效获取视频源文件,避免录屏画质损失。文章包含各平台适配方案、实战增强功能开发及企业级解决方案设计,帮助用户快速掌握这一实用技术。

weixin_27945229的博客 609

【VisionMaster】图像源模块之本地图像

图像采集之图像源

zhy29563 6958

linux修改分辨率的命令,linux修改分辨率(命令)

进入到/boot/grub/目录下,然后就可以看到里面有个名为menu.lst的文件,用vim将其打开,可以看到以下内容:# grub.conf generated by anaconda## Note that you do not have to rerun grub after making changes to this file# NOTICE: You have a /boot par...

weixin_34526937的博客 2859

【Proteus】NE555纯硬件实现LED呼吸灯效果,附源文件,效果展示

本设计通过NE555与三极管的巧妙配合,仅用基础元件实现了呼吸灯效果。核心在于利用RC积分电路将PWM信号转换为控制电压,并通过负反馈动态调节占空比。Proteus仿真验证了方案的可行性,读者可进一步优化参数或扩展功能,探索更多硬件设计可能性。

2201_75797484的博客 2980

根据分辨率调解bootstrap样式

分辨率在1200到1700之间 (container )的固定长度&lt;style type="text/css"&gt; @media only screen and (min-width: 1200px) and (max-width: 1700px) { .container {    width: 1900px     } } @media screen and (min-wi...

獨 家花雨的博客 2119

基于STM32的HC-SR04超声波模块测距(新手级)

本人是嵌入式新手,学习了STM32的部分内容,最近想找些项目做,然后顺便学习了一下HC-SR04超声波模块,学习过程中也参考了一些大佬的文章。本文记录了自己的学习方法和学习过程,同时也希望能和各位大佬交流讨论。

weixin_63758495的博客 2205

《自然语言处理实战入门》文本分类 ---- 使用词向量与SVM 进行文本分类

文本分类用电脑对文本集(或其他实体或物件)按照一定的分类体系或标准进行自动分类标记。 它根据一个已经被标注的训练文档集合, 找到文档特征和文档类别之间的关系模型, 然后利用这种学习得到的关系模型对 新的文档进行类别判断 。文本分类从基于知识的方法逐渐转变为基于统计 和机器学习的方法。

shiter编写程序的艺术 2388

修改系统分辨率的三大方法

1.adb修改方法 adb shell wm size 800x480 2.修改frameworks层代码 文件路径:\frameworks\base\services\java\com\android\server\SystemServer.java /// M: BOOTPROF addBootEvent(new String("Android:...

Jackchen 的博客 2078

12、多旋翼飞行器动力学建模与实验分析

本文探讨了多旋翼飞行器的动力学建模过程,包括使用四元数的优势、刚体运动学与动力学模型的构建,以及螺旋桨推力和扭矩对飞行性能的影响。文章还通过基础实验和分析实验研究了质量、转动惯量和螺旋桨参数对飞行状态和控制响应的影响,并结合理论分析与仿真结果总结了多旋翼飞行器的动力学特性。最后,对未来研究方向进行了展望,以提升多旋翼飞行器的性能和可靠性。

Python的专栏 208

通过VGA启动参数来设置屏幕分辨率模式

VGA Boot modes to set screen resolutionA simple way to set your screen resolution and color depth for most Live Linux distro’s is via the use of the vga=parameter boot option. For example at boot you m

ListenerRi的博客 7885

Android 10.0 SystemUI 屏蔽状态栏消息推送弹出的悬浮通知

在状态栏中,有一些通知类似 消息推送 弹出的 悬浮通知,弹出30秒之后会消失掉 要想屏蔽掉这些通知,首选知道这些通知是怎么产生的 通知类型 NotificationContentInflater.java 详细的介绍各种通知的类型 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentInflater.java /** * The defau

安卓兼职framework和app工程师的博客 1542

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【WCE】显示器电源管理 (Standard Shell)

在使用 Standard Shell 的情况下,出于节约用电和保护显示器的目的,我们需要在 User Idle 时进入显示器节电模式 (ScreenOff),在 User Active 时退出显示器节电模式 (ScreenOn)。该项功能要依靠 Power Manager 和 GWES 来实现,具体为:Power Manager 维护显示器电源状态,通过设备驱动控制显示器进入/退出节电

keyssoft的乌托邦 2905

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【WCE】实现永久性注册表数据保存 (VIACEPC BSP)

目标系统的硬件环境:VIA CLE266 NorthBridge + VT8235 SouthBridge,Transcend TS32MDOM40V DOM目标系统的软件环境:Windows CE 5.0,VIA CLE266/CN400/CN700 CEPC BSPHive-based: 将 Catalog/Device Drivers/Storage Devices/Storag

keyssoft的乌托邦 2337

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【WCE】Windows Shell 路径处理函数

MSDN Library 上从未公布过 Windows Shell 路径处理函数的 Windows CE 实现信息。不过 $(_WINCEROOT)/PUBLIC/SHELL/OAK/LIB/$(_TGTCPU)/$(WINCEDEBUG) 目录下的 shcore_path.lib (静态链接库) 导出了不少 Windows  Shell 路径处理函数。其中,WinCE 和 WinNT 公

keyssoft的乌托邦 2129

【WM】谈Phone Canvas函数为何不会返回错误值RPC_E_WRONG_THREAD

微软向OEM厂商提供Phone Canvas机制,让我们可以修改cprog.exe的数个界面布局和UI交互行为。我们发现多数Phone Canvas API函数的返回值列表中都存在错误值RPC_E_WRONG_THREAD,下表就是PHGetBlobPtr的返回值列表: S_OKIndicates success. E_INVALID

keyssoft的乌托邦 1736

【WM】如何获取Exe文件的进程ID

我们在编程时,或许想知道给定Exe文件是否正在运行?如果正在运行,那么他的进程ID是多少?Win32 API函数GetExeProcessId()就能帮你实现这个目的。 该函数的原型声明位于miscsvsc.h内:HRESULT GetExeProcessId(LPTSTR pszExeFile, DWORD* pdwProcID); 要使用该函数需要链接ossvcs.lib。

keyssoft的乌托邦 1717

【WM】如何判断两个窗口是否由同一进程创建

在我们的代码中,可能要判断某个窗口是否由shell32、cprog、tmail或connmgr进程创建的。由于这几个进程都会创建数个很具有特征意义的窗口,比如:shell32进程会创建DesktopExplorerWindow和HHTaskBar等窗口,故这个问题就可简化为判断两个窗口是否由同一进程创建。 在头文件wpcpriv.h中,存在未归档Win32 API函数SHSameWindowP

keyssoft的乌托邦 1677

【WCE】使用事件日志服务(一)

默认情况下,只有将 Catalog/Core OS/Windows CE devices/Communication Services and Networking/Networking Features/Internet Connection Sharing (ICS)/Gateway Logging 加入 workspace 后,事件日志服务才会作为一个模块加入 CE_MODULES。我们可以

keyssoft的乌托邦 1460

【WM】如何递归创建目录

在Windows Mobile上调用CreateDirectory()函数只能创建路径中的最后的目录,不能递规创建目录。如果任意父目录或中间目录不存在,CreateDirectory()函数会返回FALSE,调用GetLastError()函数返回错误号ERROR_PATH_NOT_FOUND。而我们在工作中经常需要递归创建目录,因此,笔者在这里介绍一个能够递归创建目录的Win32 API函数Cr

keyssoft的乌托邦 1434
上一篇: 【WCE】实现永久性注册表数据保存 (VIACEPC BSP)
下一篇: 【WCE】使用 8253 定时器蜂鸣 (CEPC BSP)
keyssoft
博客等级 码龄25年 8粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值