控制面板的小应用程序

面板小程序开发工具及调试功能详细介绍 为了能够在Tuya MiniApp Tools中运行面板小程序,引入了面板开发工具来模拟面板运行环境,面板开发工具现已支持虚拟设备及真机设备调试,同时能够更方便地调试 DP 下发上报。 阅读详情

控制面板的小应用程序


东北大学 张春明 张春丽 姜绍飞
01-4-23 上午 11:35:13


在Windows操作系统中,控制面板中的“显示”、“系统”、“网络”、“字体”、“键盘”和“鼠标”等操作选项都是各自独立的应用程序,它们分别对应于Windows/System文件夹下扩展名为CPL的特殊动态链接库程序。我们称这些程序为控制面板小应用程序(Control Panel Applet),它们为用户设置软、硬件提供了许多方便。其实,这些控制面板小应用程序的编程并不复杂,我们完全可以自己编写。本文以Delphi语言为例,介绍如何自己编写控制面板小应用程序。
虽然我们可以直接创建一个扩展名为CPL的DLL动态链接库工程,但由于DLL工程调试起来相当麻烦,因此笔者建议首先创建一个EXE标准应用程序工程,然后当程序调试无误后再将其转换为控制面板小应用程序。
步骤一:
将工程文件首行的program改为library,即把“program mycpl;”语句改为:
library mycpl;
步骤二:
将工程文件中begin到end之间的所有程序代码(包括创建窗体以及运行应用程序等代码)移至一个自己创建的子程序中。
procedure RunApp;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
这样,就可以在CPL工程中随时调用该子程序,来实现应用程序原有的全部功能。
注意:上述方法比较适合于编写CPL,但不适合用于编写普通的DLL,因为在关闭DLL主窗口的同时,也将自动退出调用该DLL的应用程序。
步骤三:
在工程文件的uses语句中加入对Windows和CPL两个单元的引用。
步骤四:
在工程文件中加入{$E cpl}语句,即把动态链接库文件的扩展名设置为CPL。然后将Project Options对话框中Output Directory一项设置为Windows/system。这样一来,Delphi会自动将编译生成的CPL文件拷贝到Windows/System文件夹下。
步骤五:
编写一个名为CPLApplet的标准回调函数,作为CPL文件的入口函数。控制面板程序(即CONTROL.EXE)通过向该入口函数发送消息来与小应用程序对话。如,发送CPL_INIT消息来确定该CPL文件是否是小应用程序;发送CPL_GETCOUNT消息来确定该CPL文件包含多少个小应用程序(注:每个CPL文件可以包含多个小应用程序)等等。
下面是在CPL.PAS单元文件中被声明且可以由CPLApplet回调函数处理的所有消息的说明。
1.CPL_DYNAMIC_RES消息(值为0)
控制面板程序通过CPLInfo数据结构的idIcon, idName或idInfo字段来获得资源ID,并将对应的资源存储到一个缓冲区,以后就直接从缓冲区中读取,而不再从资源中读取。而CPL_DYNAMIC_RES消息用于通知控制面板程序不要缓存上述资源,即每次都必须重新读取资源。这样一来,小应用程序就可以动态实时地改变图标说明等信息,常用于显示设备当前的状态等场合。但这种方法比从缓冲区中读取资源的速度要慢得多。
2.CPL_INIT消息(值为1)
控制面板程序向小应用程序发送该消息,以确定它是否为小应用程序。若返回TRUE,则表明它是小应用程序,然后可以继续向它发送其他消息,否则立即终止发送消息。
3.CPL_GETCOUNT消息(值为2)
控制面板程序向小应用程序发送该消息,以返回该CPL包含的小应用程序数目,即显示在控制面板窗口中的图标数目。
4.CPL_INQUIRE消息(值为3)
控制面板程序向小应用程序发送该消息,以获得每个小应用程序的信息。其中lParam1为小应用程序编号(起始编号为0),lParam2参数为指向CPLInfo数据结构的远指针。在CPL_Info结构的idIcon, idName, idInfo和lData字段中分别填充待显示的图标、名称、说明和自定义数据的资源标识符。
5.CPL_SELECT消息(值为4)
当用户单击小应用程序图标时向小应用程序发送该消息。lParam1参数为对应的小应用程序编号,lParam2参数指向自定义的lData。
6.CPL_DBLCLK消息(值为5)
当用户双击小应用程序图标时向小应用程序发送该消息。lParam1参数为对应的小应用程序编号,lParam2参数指向自定义的lData。小应用程序可以打开一个对话框作为响应。
7.CPL_STOP消息(值为6)
控制面板程序在结束运行之前向每个小应用程序发送该消息。其中lParam1参数为小应用程序编号,lParam2参数指向lData。与小应用程序相关的清理工作必须在这个期间内完成。
8.CPL_EXIT消息(值为7)
控制面板程序在调用FreeLibrary函数之前向小应用程序发送该消息。此时可以做一些与小应用程序无关的清理工作。
9.CPL_NEWINQUIRE消息(值为8)
该消息与CPL_INQUIRE消息类似。区别在于lParam2参数指向一个NewCPLInfo数据结构。若应用程序响应了该消息,则控制面板程序将不再发送CPL_INQUIRE消息。
10.CPL_STARTWPARMS消息(值为9)
当通过RUNDLL命令启动小应用程序时发送该消息,且可以包含很多附加指令。其中lParam1参数为小应用程序编号,lParam2参数为指向附加指令字符串的一个长指针。若消息被处理,则返回TRUE,否则返回FALSE。与CPL_DBLCLK消息一样,小应用程序此时可以打开一个对话框作为响应。
11.CPL_SETUP消息(值为200)
该消息供控制面板程序内部使用。仅在系统安装过程中从命令行启动时才发送该消息。
综上所述,CPLApplet回调函数看似复杂,实则不然。下面是一个典型例子的代码:
function CPLApplet(hwndCPl: THandle; uMsg:
DWORD;lParam1, lParam2: LongInt): LongInt; stdcall;
var
NewCPLInfo: PNewCPLInfo;
begin
{ 设置默认的返回值 }
Result:=0;
case uMsg of
{控制面板程序发送该消息进行初始化。若返回1,则表示为一个小应用程序 }
CPL_INIT:
Result := 1;
{控制面板程序发送该消息来获得该CPL文件包含的小应用程序的数目 }
CPL_GETCOUNT:
Result := 1;
{控制面板程序对每个小应用程序均发送该消息,以显示图标、名称和说明 }
CPL_NEWINQUIRE:
begin
NewCPLInfo := PNewCPLInfo(lParam2);
with NewCPLInfo^ do
begin
{ 设置数据结构的大小(以字节计) }
dwSize := SizeOf(TNewCPLInfo);
{ 设置标志位 }
dwFlags := 0;
{ 设置帮助上下文 }
dwHelpContext := 0;
{ 设置用户自定义数据指针 }
lData := 0;
{ 设置小应用程序的图标}
hIcon:=LoadIcon(hInstance,‘MAINICON’);
{ 设置显示在图标下面的小应用程序名称 }
szName :=‘我的小应用’;
{ 设置显示在控制面板窗口状态栏的文字 }
szInfo := ‘小应用程序测试’;
{ 设置帮助文件 }
szHelpFile :=‘’;
end;
end;
{ 当用户双击小应用程序图标时发送该消息,编程者可以自行确定要执行的代码 }
CPL_DBLCLK:
begin
RunApp;
end;
end;
end;
对于32位应用程序而言,CPLApplet函数后面不必加export编译指令。
步骤六:
在工程文件的exports语句中输出CPLApplet回调函数。
exports
CPLApplet;
begin
end;
通过以上6步,即可实现一个控制面板小应用程序的设计。
 
巨详细Java JDK环境配置(Mac 版) 本篇最详细保姆级教程Mac OS上安装JDK以及配置环境细化每个步骤过程认真看完。 阅读详情

相关推荐

芯片设计新思路:如何用SystemC+TLM2.0快速搭建ESL性能模型(附GEM5实战案例)

本文探讨了在芯片设计早期利用SystemC和TLM2.0标准快速构建电子系统级(ESL)性能模型的方法。通过对比不同抽象层次,详细介绍了如何搭建事务级模型,并与GEM5仿真平台协同,实现高效的架构探索和性能评估。文章最后通过一个片上网络(NoC)带宽优化的实战案例,展示了该方法如何驱动数据驱动的设计决策,从而在流片前规避风险、优化芯片性能。

fire9的博客 368

win7如何设置小程序服务器,Windows7系统中运行控制面板小程序的命令大全

控制面板能够允许用户查看并对系统设置进行基本操作,Windows7系统电脑中的很多设置都需要用到控制面板来打开具体的操作位置,但是当我们要打开控制面板中的一些小程序的时候需要多次点击展开才能找到,这样太浪费时间了,要是我们可以掌握这些小程序的运行命令就方便多了,下面win7之家小编就为大家带来一些运行控制面板小程序的命令大全,这样以后打开控制面板中的小程序就更快了,具体如下。请来看看下面程序的运行...

weixin_30227775的博客 671

CLASSB类移植(满足IEC 60730-1和60355-1标准)

针对软件认证需要满足IEC 60730-1和60335-1标准,ST公司专门提供的软件扩展包X-CUBE-CLASSB,它包含自测库和文档,支持多种STM32系列芯片,通过预集成测试库和标准化流程,帮助开发者快速满足国际安全标准,适用于家电、工业控制等高可靠性场景。ClassB软件包程序检测内容分为两个主要部分:启动时的自检和运行时的周期自检,MCU在上电的时候会进行复位启动,在启动完成以后会进行运行自检。

m0_61973119的博客 1401

windows 7控制面板的小程序命令

appwiz.cpl                 外壳应用程序管理器 bthprops.cpl              设置Bluetooth设备 desk.cpl                    更改该计算机的显示设置 Firewall.cpl                 配置windows防火墙 hdwwiz.cpl                添加硬件控制面板小程序 ine...

weixin_34236497的博客 203

借助Gemini 3 Pro高效解决课题申报中的五大核心痛点,亲测有效经验分享

之前给大家分享过关于AI辅助课题申报的相关的内容,涵盖了申报书部分撰写技巧,但没针对性拆解各位同仁在实际申报时遇到的卡壳的地方。比如选题范围拿捏不准,定的太大,根本没法落地完成;定的太小,研究价值则体现不了;写综述时,容易单纯罗列文献,缺乏批判性视角,没办法自然融入自己的判断,找不到研究缺口;研究方法部分,可能担心方法设计不够严谨,别人难以复现.....针对这些申报中的高频痛点,接下来七哥会从五个核心要点出发,借助Gemini 3 Pro高效解决这些痛点。

智能AI让学术科研更容易 700

【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)

本文详细介绍了将YOLO图像分类C++部署项目从CMake迁移到Visual Studio控制台应用的全过程。针对低配CPU性能瓶颈问题,作者通过替换多线程HPP代码为官方实现,并采用448x448固定输入尺寸优化推理速度。项目配置包含OpenCV和ONNX Runtime环境设置,实现了图像批量处理、分类结果显示及结果日志输出功能。关键步骤包括依赖库配置、DLL部署和代码调试,最终在Windows平台成功实现高效CPU推理。该方案显著提升了低配硬件的兼容性,为图像分类任务提供了稳定的部署解决方案。

深耕CV 353

WINCE6.0在控制面板添加控制面板应用程序

********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi) 时间:2011.8.25 类别:WINCE 系统开发 ********************************LoongEmbedded************...

weixin_30752699的博客 239

【软件测试】人工智能(AI)在软件测试领域的应用

AI在软件测试领域的应用使测试过程更加自动化、高效和智能。它可以帮助测试团队减轻负担,更快地识别和修复问题,最终提高软件的质量和可靠性。随着AI技术的不断进步,未来AI在软件测试领域的应用将更加广泛和深入。

weixin_46453070的博客 4381

控制面板内的所有运行命令包括添加删除应用程序等

模块: control.exe命令: rundll32.exe shell32.dll,Control_RunDLL结果: 显示控制面板窗口。例子:Dim xx = Shell("rundll32.exe shell32.dll,Control_RunDLL")辅助选项模块: access.cpl命令: rundll32.exe shell32.dll,Control_RunDLL access

howard的技术之路 3197

29、固态变压器拓扑、设计及其应用深度解析

本文深入解析了固态变压器(SST)的拓扑结构、设计方法及其在智能电网和能源互联网中的应用。重点探讨了机器学习在SST优化设计中的应用,包括中高频变压器设计、整体系统优化与建模研究。文章详细介绍了多端口SST的拓扑特点、功率传输机制及其作为能源路由器的关键作用,分析了不同端口数量下的控制复杂度与应用场景,并通过案例研究展示了四端口SST在分布式能源系统中的实际应用。最后,文章总结了多端口SST面临的技术挑战,并展望了未来在先进控制策略、集成化设计和标准化方面的发展方向。

study的专栏 3790

利用ADS建立MIPI D-PHY链路仿真流程

由于MIPI D-PHY的速率并不算高,因此,PCB设计难度通常不大,主要做好差分线的等长、阻抗的连续性、端口处的阻抗优化以及控制好走线的长度,拿到满意的结果还是较为轻松的,最后,建立流程化的仿真工程文件,可以保存为模板,方便日后的设计复用,非常方便。

一只豌豆象的博客 3569

清理 applet 缓存

在【控制面板】中打开【java控制面板】,单击【常规】选项卡中【临时Internet文件】下的【设置】-》【删除文件】,删除applet小应用程序,然后【确定】。 ...

掬水月在手,弄花香满衣 2193

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

2013.11.30《JAVA开发工具问题》

当前有很多中 JAVA的开发工具,包括Java Development Kit, Eclipse,IntelliJ IDEA和Netbeans . Oracal 提供一款免费的工具,集成开发环境的Netbeans,同时用来编写JAVA代码会更加的容易。 你可以在http://download.oracle.com/javase/7/docs/api 下载最新的Java文档。 注意:Oracle 将

HXPshakele的专栏 839

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java被安全阻止解决及用友Uclient安装

应用程序已被JAVA安全阻止,但找不安全等级滑动条。     从 Java 8 Update 20 开始,“中”安全级别已从 Java 控制面板中删除。只有“高”和“非常高”级别可用。 通过“例外站点”列表,用户可以允许使用以前通过选择中选项而允许的小应用程序,不同之处在于需要逐个站点地设置,从而最大程度地减少了使用更宽容设置的风险。 OK了 uclient.yonyou.co...

bluewater的专栏 7172

当不可信小应用程序或应用程序在 Web 浏览器中运行时,我应当如何控制?

在配置Jenkins的时候,需要运行slave-agent,报错误:,提示:当不可信小应用程序或应用程序在 Web 浏览器中运行时,或者应用程序已被阻止,您的安全设置已阻止不可信应用程序运行 解决方法: 1、查找Java控制面板 2、进入设置java安全级别的窗口上,选择所需的安全级别。从 Java 8 Update 20 开始,“中”安全级别已从 Java 控制面板中删除。只有“高

odelia的博客 3636

java mac 升级_MAC版java怎么更新升级方法

很多人都不知道怎么更新java,所以会在控制面板程序中卸载先java后再重新安装新的java上去,这样的操作会比较麻烦的。其实是不用去卸载后再安装java的。下文就让小编跟大家讲讲MAC版java更新升级方法。每次启动 Java 小应用程序、Java Web Start 应用程序或 Java 控制面板时,系统将首先启动程序,然后在后台 (因此不会影响 Java 应用程序的性能) 确定在过去 7 天...

weixin_39714275的博客 2087

jnlp本地运行调试

jnpl本地运行调试,需要在java控制面板中设置下,打开控制面板->Java->高级:其中调试下面的启用跟踪启用日志记录,显示小应用程序生命周期异常错误都打上勾。java控制台下面显示控制台选中,就可以在运行的时候看到相关信息了、 记录一下。、 本文出自 “大程熙的小角落” ...

chijunmei7041的博客 373

java小应用程序 浏览器_关于解决浏览器无法运行小应用程序问题

学习Java后发现,java有个小应用程序(applet)可以在网页上运行,就想这自己用apache弄一个本地的网站来在上面玩用Java写的网络游戏,于是就高高兴兴的做好准备,可是后面才发现,自己写的applet小程序在自己的浏览器上就根本运行不了,后来经过自己的多方努力终于解决了,现在将这些分享给大家,希望可以帮大家解决运行不了的问题。1、出于安全原因,应用程序现在必须满足一些安全设置,Java...

weixin_28932365的博客 1030

关于解决浏览器无法运行小应用程序问题

学习Java后发现,java有个小应用程序(applet)可以在网页上运行,就想这自己用apache弄一个本地的网站来在上面玩用Java写的网络游戏,于是就高高兴兴的做好准备,可是后面才发现,自己写的applet小程序在自己的浏览器上就根本运行不了,后来经过自己的多方努力终于解决了,现在将这些分享给大家,希望可以帮大家解决运行不了的问题。 1、出于安全原因,应用程序现在必须满足一些安全设置,Jav

奇点的博客 3355

java 应用程序无法运行_关于解决浏览器无法运行小应用程序问题

学习Java后发现,java有个小应用程序(applet)可以在网页上运行,就想这自己用apache弄一个本地的网站来在上面玩用Java写的网络游戏,于是就高高兴兴的做好准备,可是后面才发现,自己写的applet小程序在自己的浏览器上就根本运行不了,后来经过自己的多方努力终于解决了,现在将这些分享给大家,希望可以帮大家解决运行不了的问题。1、出于安全原因,应用程序现在必须满足一些安全设置,Java...

weixin_34470566的博客 3266

java小应用查看器_分享一个Java的小应用程序:applet

Java Applet就是用Java语言编写的小应用程序,它们可以直接嵌入到网页中,并能够产生特殊的效果applet经编译后,会产生.class的文件,把.class的文件嵌在html的网页中,只要用户连到一个网页里,applet便会随着网页下载到用户的计算机运行applet类的继承关系如下:java.lang.Objectjava.awt.Componentjava.awt.Containerj...

weixin_36212539的博客 1240

如何在 Web 浏览器中启用 Java?

本文适用于: 平台: Windows 8, Windows 7, Vista, Windows XP, Windows 2000, Windows 2003, Macintosh OS X 问题  即使安装了 Java,小应用程序依然无法运行。 原因  尚未在 Web 浏览器中启用 Java。如果已经安装了 Java,但是小应用程序无法工作,您

fay8048的博客 1万+

win10在html上运行java的applet程序

Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同。 含有Applet的网页的HTML文件代码中部带有 和这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小应用程序代码并在本地计算机上执行该Applet。 但是大多数浏览器在Applet安全方面受到诸多的限制,几乎不能对系统进行任何“...

正在自我救赎的菜鸟。本人所有内容均不收费,可随意转发,复制 2935
上一篇: Delphi中如何防止运行一个应用程序的多个实例
下一篇: 网易秀逗?
lvjack
博客等级 码龄26年 20粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值