原创翻译 Windows Embedded Compact 7: 带有ActiveSync的Silverlight Shell

Linux Shell 脚本编程实战 >>从语法到运维案例 Shell 本质:调用 Linux 系统命令,语法只负责控制命令执行逻辑。学习路线:变量 → 判断 → 循环 → 函数 → 数组 → sed/awk 三剑客。写脚本思路梳理业务需求,拆解执行步骤先命令行调试单条命令,确认输出符合预期封装变量、函数,完成脚本编写边界测试:参数为空、文件不存在、命令执行失败等场景企业实战要求:能够编写巡检、备份、部署、监控脚本,读懂线上数百行自动化脚本。 阅读详情

 本文转载自微软嵌入式中文社区www.msembed.com

 

 

和以往一样我开始充满激情地研究WinCE的新版本:Windows Embedded Compact 7,尤其是操作系统的新功能。我用我们的参考平台Alioth(一个基于Marvel PXA 300的参考设计)BSP来研究WEC7的功能。我用到了WEC7(ie)的重要功能Silverlight Shell。Wow!!!微软为WEC7设计了新的图形界面。我为我的平台生成了新的OSDesign。我加入了"sample Home Screen Silverlight for Windows Embedded (SYSGEN_XRSHELL)"组件以及其它一些必要的组件,成功地编译出OS的镜像。

 


 将镜像下载到目标板后,我有点失望,因为我没看到XRShell,取而代之的是一个灰色的空屏幕,如下图所示。


 
 而与此同时,我的经理和其他一些Windows CE团队的成员却得到了成功的结果。我的脑袋又开始发热了。我开始收集他们的OSDesign,进行对比并找出在OSDesign的组件列表中的差异。我试着加入和移除我的OSDesign中的某些组件,最后终于找到了罪魁祸首。让XRShell不能运行的组件是"ActiveSync"。我找到了解决问题的线索。

 


 我开始看XRShell的源代码,它们在WINCE700/public/ shell/ oak/ XRshell/ src/ CXRShell.cpp中。同时我也在观察ActiveSync在启动过程中的活动。起初我怀疑可能是ActiveSync中用到的SH_Shell API没有被实现。在检查CXRShell.cpp过程中我发现他们的确没有实现这个API,但是他们用一个"MissingAPI()"给所有的SH_Shell API设置一个占位函数,并在CXRShell::Execute()方法中对这个占位API进行初始化。

 

CXRShell::Execute()方法中shell生成桌面、场景等,包括对SH_Shell API进行初始化。用这个API的占位API,XRShell可以使其它需要用到SH_Shell API的应用程序得以运行。但我们的情况不同。这里XRShell被ActiveSync阻塞了。所以SH_Shell API的占位不是问题所在。

 


 下一个被怀疑的活动是ActiveSync会在任务栏中显示提示图标,但不幸的是当前的XRShell中没有实现任务栏。最后我终于发现原来是ActiveSync在一直找任务栏,所以阻塞了XRShell的启动。
 
 解决方案
 我生成了一个起占位作用的空任务栏,并与XRShell相关联。太棒了!现在XRShell可以带着ActiveSync一起启动了。
 
 

 下面我将解释如何生成一个占位用任务栏。我们可以从已有的标准shell的源代码中轻松地生成一个任务栏。如果你浏览了以下的文件,你可以轻松地生成一个占位任务栏。
 

 

• /Wince700/public/shell/oak/hpc/explorer/inc/taskbar.hxx

• /Wince700/public/shell/oak/hpc/explorer /taskbar.cpp

• /Wince700/public/shell/oak/hpc/explorer /main.cpp 
 

以下是我生成任务栏的源代码。
 

//以下的宏定义取自taskbar.hxx文件。
#define HHTASKBARDATA 8
#define HHTASKBARCLASSNAME TEXT(“HHTaskBar”)
#define HHTASKBARID 0
#define HHTASKBARSTATE 4
//为任务栏设立的一个哑WndProc
LRESULT CALLBACK XRshellTaskBarWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
return 0;
}
//以下代码通过参考taskbar.cpp中的CTaskBar::Register()方法而生成。
//函数XShellTaskBar()-用于生成一个占位任务栏。
void XShellTaskBar(HINSTANCE hInstance)
{
RETAILMSG(1,(TEXT(“XRshell TaskBar ++/r/n”)));
HWND hwndTaskBar;
WNDCLASS wc;
wc.style = /*CS_HREDRAW | CS_VREDRAW | */CS_DBLCLKS;
wc.lpfnWndProc = (WNDPROC)XRshellTaskBarWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = HHTASKBARDATA;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = HHTASKBARCLASSNAME;
RegisterClass(&wc);
//为任务栏生成一个窗口。参考自taskbar.cpp中的CtaskBar::Create()。
hwndTaskBar= CreateWindowEx(0,HHTASKBARCLASSNAME, L”", WS_POPUP, 0, 0,
10, 10, NULL, NULL, hInstance, NULL);
//在成功生成窗口后,用RegisterTaskbar() API将此窗口注册为任务栏。参考自explorer.cpp中的WINAPI CreateTaskBar()方法。该函数调用了CTaskbar::Register和 RegisterTaskBar() API。
if( hwndTaskBar)
{
if (RegisterTaskBar(hwndTaskBar))
{
RETAILMSG(1,(TEXT(“XRShellTaskBar: RegisterTaskBar success/r/n”)));
}
else
{
RETAILMSG(1,(TEXT(“XRShellTaskBar: RegisterTaskBar failed/r/n”)));
}
}
else
{
RETAILMSG(1,(TEXT(“XRShellTaskBar: Unable to create Taskbar window/r/n”)));
}
RETAILMSG(1,(TEXT(“Xshell TaskBar –/r/n”)));
} 

占位任务栏已经准备好了,现在我们要将它加入到XRShell中。这部分比较简单,你可以将上面的代码加到CXRShell.cpp的开始部分然后在CXRShell::Execute()中调用XShellTaskBar()函数,就像下面做的这样。

unsigned long CXRShell::Execute(int nCmdShow)
{
/*已有的代码*/
…..
InitializeAPI();
XShellTaskbar(m_hInstance); //我们为XRShell准备的黑色任务栏
CHR( ShowShell()); //这是个阻塞调用
…..
} 

Shell 入门指南:从基础语法到实战脚本 Shell是用户与操作系统交互的命令行解释器,常见如Bash、Zsh。通过编写Shell脚本可实现自动化任务,如文件处理、日志清理等。脚本使用变量、条件判断、循环、函数及重定向功能,结合set -euo pipefail提升健壮性,配合shellcheck静态检查与注释优化,能高效编写可靠脚本。掌握基础语法后,从日常任务入手,逐步构建实用自动化工具。 阅读详情

相关推荐

DMA学习笔记

DMA(direct memory access,直接内存访问),是一种避开CPU,可以直接对外设和内存进行访问的技术,可以实现外设与内存、内存之间、外设之间的数据的访问和搬移。

weixin_46220498的博客 3114

Windows Embedded Compact 7 打包和部署程序(下)

 1.5.2 设计规范  由于.NET Compact Framework的局限性,某些要求对托管代码开发者来说被放宽了,例如,在程序中提供退出选项或支持平台的“帮助”菜单。现在,您可以决定是否在程序中添加退出选项。这个决定基于设备的使用模式和目标用户的需求。在Compact Framework 2.0版本中,能够通过处理来自窗体的HelpRequested事件对“帮助”做出支持(正如

胡耀文 8988

SAP CO-PA获利分析避坑指南:从数据采集到报表设计的5个关键步骤

本文深入解析了SAP CO-PA获利分析模块从数据采集到报表设计的完整流程。文章重点剖析了数据源头、特征派生、获利段设计等关键步骤,并对比了基于账户与基于成本核算两种模式的差异,特别强调了在S/4HANA时代的选择与常见陷阱,旨在帮助企业构建可靠、可执行的盈利分析体系。

flink9streamer的博客 827

silverlight开发实例(Prism+MVVM+RIA)(二)--创建shell及用户登录

续上篇。 在上篇基本说清了本项目的基本框架,下面开始说下项目的加载和shell。开始之前在建立EF时出现了一个问题,我在数据库中建立了视图,而在EF导入视图时出现因无法匹配主键导致无法导入视图的问题,检查发现是由于视图中sql语句中用了Union,先见Union语句取消再建立EF。 1、首先是建立项目启动的入口程序Bootstrapper,这个类由MefBootstrapper 继承,前面的B

huangyezi的专栏 5471

避坑!!!Stata双重机器学习(DML)遇到的问题及解决方式

除了上述代码,我还在Anaconda Navigator图形界面来更新conda,更新过的小伙伴应该都知道,这个过程非常漫长,我大概经历了2-3天,在这个过程中电脑一直运行,但是很不幸,无论哪种方式,最终都没有更新到最新版本。安装成功之后,我抱着试一试的心态再次在stata18MP中运行,没有想到,这次竟然运行成功了!我之前一直用的是stata17MP版本,在运行DML的时候,代码一直出错,我以为是python路径没有设置好的原因,就各种在python上面下功夫,经过各种查找后,确定DML必须要在。

王樰沫 3847

MuMu模拟器过检测实战:从硬件伪装到API欺骗的完整避坑指南

本文详细介绍了MuMu模拟器过检测的实战技术,从硬件伪装到API欺骗的全方位解决方案。通过修改CPU/GPU信息、内存分布、系统属性和行为模拟等关键技术,帮助用户有效绕过现代应用的模拟器检测机制,提升模拟器的隐蔽性和稳定性。

xxx12的博客 1393

silverlight效果资料

最近在研究SilverLight相关的一些效果资料,共享出来   镜面等效果:http://www.silverlight.net/learn/graphics/effects-and-shaders 鱼眼效果:http://www.shinedraw.com/animation-effect/flash-and-silverlight-fish-eye-menu/ silverlight...

Yaogang's Small Shell 160

SAP公司间采购后台配置及前台操作详解

公司间采购后台配置及前台操作详解 SAP 实施中公司间交易几乎每个项目都会有此业务需求,比如内地很多公司都会在香港设置贸易型子公司。通过香港公司接单,然后转内地公司生产,或内地公司通过香港公司采购进口原材料,这些业务必然会涉及到公司间交易,下面我将详细说明下SAP是如何实现这种业务场景的,供大家参考。 配置前必须前台先创建公司间供应商主数据和客户主数据 1. 创建相应的客户主数据 功能说明 公司间...

weixin_40672823的博客 1万+

Linux 进程控制:fork、exit、wait、exec 与手写一个 mini shell

讲清进程控制的四个动作:fork 创建(内核四件事与写时拷贝)、exit/_exit/return 终止与 8 位退出码、wait/waitpid 等待与 status 位图、exec 七接口与唯一系统调用 execve,最后用这些零件拼出一个支持 cd/export/echo 的 mini shell,并解释环境变量两张表与 putenv 浅拷贝坑。附速查表与 14 道自测题。

BIII__的博客 189

RT-DETR改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU等)

本文记录的是改进RT-DETR的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 1922

【数据集6】全球人工不透水面积GAIA(清华数据)

全球人工不透水面GAIA简介及其应用

WW、forever的博客 3803

第一章 Shell 概述

本文介绍了Shell编程的基础知识,包括Shell的起源与发展、常见Shell类型及查看方式,阐述了Shell作为命令解释器连接用户与操作系统内核的作用。强调其作为解释型脚本语言的优势,适用于系统管理自动化任务。内容涵盖Shell脚本基本结构、注释规范、编写风格、执行方法及常用命令(如echo、printf、history、管道等),并讲解了命令执行顺序、退出状态码等核心概念,为初学者提供系统学习路径。

sbjdhjd的博客 297

100天精通Python(爬虫篇)——第118天:selenium自动化操作浏览器基础大总结

一、Selenium框架环境搭建 1. 下载模块 2. 安装浏览器驱动WebDriver 二、基础操作 1. 打开浏览器 2. 无界面模式 3. 元素定位 4. 元素操作 5. 前进后退 6. 执行js 7.页面等待 隐式等待(常用) 显式等待(了解) 三、进阶操作 1. 使用代理ip 2. 修改请求头 3. 隐藏指纹特征.....................

努力让自己发光,对的人才能迎着光而来 10万+

DeepAgents框架构建一个带有严格安全护栏的本地 Shell 执行环境。

核心亮点在于:通过精心设计的 System Prompt(系统提示词)强制约束大模型的行为,防止其通过操作系统底层的 Shell 命令绕过框架的虚拟沙箱,从而确保本地物理磁盘的绝对安全。DeepAgents 框架接入 DeepSeek 模型并构建一个带有严格安全护栏的本地 Shell 执行环境。

qq_42092076的博客 71

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux、Shell、MySQL 测试卷逐题细讲(下篇:MySQL)

本文为Linux、Shell、MySQL测试卷下半段MySQL部分逐题讲解,包含填空、选择与SQL分析三类题型。填空题覆盖COUNT、HAVING、DISTINCT、事务、约束、索引等核心语法;选择题辨析存储过程、索引类型、ACID、存储引擎、用户管理等考点。SQL大题围绕员工、部门、职位、地点四张关联表,考察多表连接、分组聚合、自连接、相关子查询、NULL处理等高频写法,标注LEFT JOIN统计计数、NULL判断、子查询别名等易错坑点,同时梳理试卷OCR识别带来的干扰问题,重点提示SQL实操中的常见失误

dongziwen1的博客 185

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

miniconda3设置为shell终端默认激活环境

将以下内容添加至 ~/.bashrc,路径需根据实际修改(如 /home/jason/miniconda3): # >>>conda initialize >>> __conda_setup="$('/home/jason/miniconda3/bin/conda' 'shell.bash' 'hook' 2>/dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/home/jason/miniconda3/etc/pro

huangjiazhi_的博客 191

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

CST如何通过Shell Solid or Thicken Sheet对模型进行挖空及加厚

在CST建模中,ShellSolid可对实体模型挖空,形成壁厚为指定值的封闭或开放壳体,通过选择不同面可控制开口位置;ThickenSheet则用于将无厚度二维片体加厚为三维实体。操作时需在导航树中选中模型,调用ShapeTools中的相应功能,设置厚度并预览确认。两者结合可高效实现复杂结构建模,适用于电磁仿真前处理。

a18665053298的博客 134

抖音_libsscronet_证书校验绕过

代理(Reqable)进行中间人后换发的证书,系统信任库是认的,但还要过这层自定义校验:最终落到 Java 的。,纯 Python 标准库,不需要 IDA / Ghidra / capstone。是安装时随机生成的,每台设备、每次重装都不同,换设备或重装后需重新查一次并替换。so 已被映射进运行中的进程,覆盖磁盘不会影响内存里的旧映像,不杀进程等于没改。,抖音所有网络请求的底层,自带 BoringSSL(同目录。关掉开关后,回调根本不执行,下面的 JNI、,Python 3.6+,仅用标准库。

qq_44990881的博客 182

论开发与应用的差异--以office利用与MySQL安装设置为例

本文对比了传统Excel数据绑定Word生成通知的模板化操作与现代前后端开发中数据库驱动页面渲染的差异。早期依赖Excel(容量有限)实现批量生成,现发展为用数据库替代Excel,通过前端绑定数据实现动态页面渲染,形成前后端分离模式。以淘宝初期招聘为例,强调页面开发能力的重要性。同时指出,掌握MySQL、Workbench、Shell等数据库相关工具及概念,是专业开发能力的关键,需熟练运用报告中涉及的所有技术术语,以弥补与Office操作的差距。

mewowaBc的博客 148

CTF 命令执行题学习笔记:终端特殊字符 $IFS 与 %09 的用法(HelloCTF RCE-labs)

空格被过滤时:用%09(TAB)或$IFS代替空格关键词被过滤时:用通配符?或字符类[f]拼出被禁的词,让 WAF 在原始字符串里看不到它,shell 在执行时再展开这类技巧在后续的命令执行题里会反复用到,建议亲手在靶机上敲一遍感受一下。

YY888888_的博客 542

Claude Code 写 Shell 脚本翻车实录:一份踩坑与避坑指南

回顾核心结论:AI 能显著提升写脚本的效率,但安全边界必须由人来守。上线前必查的 10 条 Shell 脚本清单推荐工具:shellcheck、shfmt、bats、容器化试跑一句话总结:让 AI 写,让人来审,让环境来验证。

xiaolu12388的博客 306

shell Doris Stream Load 批量导入 csv.gz

shell Doris Stream Load 批量导入 csv.gz。

weixin_43103956的博客 129

Android 系统启动与调试中的日志抓取方式全解析

│ 用户操作/系统事件 ││ │▼ ▼│ (驱动/硬件/内存管理) │ │ (App/SystemServer) ││ │ │ ││ │▼ ▼│ dmesg 命令 │ │ logd daemon ││ cat /proc/kmsg │ │ (分类存储到分区) ││ │▼ ▼│ 串口 UART │ │ logcat 命令 ││ (硬件直连,最早输出) │ │ adb logcat ││ │▼│ (汇总所有日志+系统状态) │工具最佳用途关键优势主要局限dmesg。

zhaoshuzhaoshu的专栏 269
上一篇: 原创翻译 在Windows CE上实现一个全功能的webserver
下一篇: 原创翻译 用gSOAP在Windows Embedded Compact (Windows CE)上架构webservice
巴斯滕
博客等级 码龄16年 319粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值