简介:
### 开发51单片机操作系统时应注意的问题#### 一、引言随着嵌入式系统的广泛应用,针对特定硬件平台的操作系统开发变得尤为重要。
51单片机作为一款经典的微控制器,在工业控制、家用电器等领域有着广泛的应用。
然而,由于其硬件资源的限制,在51单片机上开发操作系统面临诸多挑战。
本文将详细介绍开发51单片机操作系统时需要注意的关键问题。
#### 二、关键问题详解##### 1. 操作系统软件的代码长度控制51系列单片机由于硬件资源的限制(如ROM空间较小),因此对于操作系统代码的大小有严格的要求。
通常情况下,一个基于51单片机的应用程序大约需要7至8KB的ROM空间。
相比之下,如果操作系统本身就需要几十KB的空间,那么留给用户应用程序的空间将非常有限,这显然不利于实际应用。
例如,流行的嵌入式操作系统往往体积较大,无法适用于51单片机。
为了克服这一限制,开发者需要采取以下措施:- **精简设计**:简化操作系统的功能模块,确保核心功能的同时尽可能减小代码量。
- **模块化**:采用模块化设计,允许用户根据具体需求选择加载必要的模块,从而降低整体代码量。
- **代码优化**:通过高效的编码技巧来减少代码长度,比如使用更简洁的数据结构和算法。
##### 2. 控制操作系统对片内RAM的占用51系列单片机仅有128或256字节的片内RAM空间,这对于运行操作系统而言是非常有限的。
如果操作系统占用过多的RAM空间,将严重影响用户应用程序的正常运行。
因此,开发者需要特别注意以下几点:- **最小化RAM使用**:减少操作系统的RAM占用,确保有足够的空间供用户应用程序使用。
- **合理分配资源**:优化RAM的使用方式,避免不必要的资源浪费。
- **外部RAM利用**:在不影响性能的前提下,考虑将部分数据存储在外置RAM中,以减轻内部RAM的压力。
##### 3. 解决函数的重入问题对于实时占先式操作系统而言,函数的重入性至关重要。
重入函数能够在不破坏数据的情况下被多个任务调用。
要实现函数的重入性,必须满足以下条件之一:- **不使用共享资源**:确保函数内部没有依赖任何共享资源。
- **使用中断禁用**:在使用共享资源时暂时禁用中断,以保证数据的一致性。
- **信号量机制**:通过申请和释放信号量来管理对共享资源的访问。
在标准C中实现这些条件相对简单,但在Keil C51编译器环境下,由于局部变量的静态分配特性,实现起来较为复杂。
开发者可以通过以下策略应对这一挑战:- **手动管理资源**:显式地控制共享资源的访问,避免自动管理带来的不确定性。
- **代码审查**:仔细检查函数中的资源使用情况,确保符合重入性的要求。
- **测试验证**:通过严格的测试来验证函数的重入性,确保其在多任务环境下的正确运行。
##### 4. 堆栈的分配与管理在占先式操作系统中,任务之间的切换频繁发生,因此需要合理分配和管理堆栈空间。
每个任务都需要有自己的堆栈,用于保存任务状态信息。
由于51单片机的RAM空间有限,堆栈的分配策略成为了一项重要的考量因素。
- **按需分配**:根据任务的实际需求动态分配堆栈空间,避免过度预分配造成的资源浪费。
- **优化堆栈使用**:通过调整任务的设计和编码方式来减少堆栈的需求。
- **复用机制**:探索堆栈空间的复用机制,如在任务间共享堆栈空间等方法。
#### 三、结论开发51单片机操作系统是一项充满挑战的任务,需要开发者在有限的硬件资源下,精心设计并优化操作系统的各个方面。
通过本文所述的关键问题及解决方案的探讨,希望能够帮助开发者更好地理解和应对这些挑战,成功开发出高效、可靠的51单片机操作系统。
2025/6/15 19:58:32 63KB
1
简介:
在Android开发中,`DialogFragment`是Android SDK提供的一种用于创建弹出式对话框的组件。
它是`Fragment`的一个子类,与传统的`Dialog`相比,`DialogFragment`具有更多的优势,尤其是在处理屏幕旋转和生命周期管理方面。
本篇文章将深入探讨`DialogFragment`的核心概念、优点、使用方法以及常见应用场景。
`DialogFragment`简介:`DialogFragment`继承自`Fragment`,它不仅拥有`Fragment`的所有功能,还能展示一个模态对话框。
它将对话框和碎片的特性结合在一起,使得对话框可以在不同的屏幕配置下保持一致的行为,同时能够更好地适应Android应用的动态布局需求。
`DialogFragment`的优点:1. 生命周期管理:由于`DialogFragment`继承自`Fragment`,它拥有完整的生命周期回调,可以方便地处理如暂停、恢复、销毁等状态变化,使得对话框在不同场景下的行为更加可控。
2. 自动处理配置变更:当设备发生横竖屏切换时,`DialogFragment`会自动处理对话框的关闭和重新显示,而普通的`Dialog`则需要开发者手动处理。
3. 易于集成:`DialogFragment`可以像普通`Fragment`一样添加到Activity的布局中,也可以单独显示为对话框,增加了代码的复用性。
4. 更好的主题定制:`DialogFragment`支持自定义对话框样式,可以方便地调整对话框的外观和行为。
使用`DialogFragment`的步骤:1. 创建`DialogFragment`子类:你需要创建一个新的类,继承自`DialogFragment`,并重写必要的方法,如`onCreateDialog()`,在这个方法中构建你的对话框实例。
2. 实现`onCreateDialog()`:在这个方法中,你可以使用`AlertDialog.Builder`或自定义的`Dialog`来创建对话框,并设置其标题、消息、按钮等元素。
3. 显示`DialogFragment`:你可以通过`FragmentManager`和`FragmentTransaction`将`DialogFragment`添加到当前的Activity中,或者使用静态方法`show()`直接显示对话框。
示例代码:```javapublic class MyDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); builder.setMessage("这是一条对话框消息") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 确定按钮的点击事件 } }) .setNegativeButton("取消", null); return builder.create(); }}```在Activity中显示`DialogFragment`:```javaMyDialogFragment dialogFragment = new MyDialogFragment();dialogFragment.show(getSupportFragmentManager(), "my_dialog");````DialogFragment`的常见应用场景:- 提示用户确认操作,如删除、保存等。
- 展示设置选项或偏好设置。
- 获取用户输入,如登录、注册表单。
- 显示帮助信息或关于应用的详情。
总结来说,`DialogFragment`是Android开发中处理对话框的理想选择,它的灵活性、易用性和强大的功能使其在各种应用场合都能发挥出色的效果。
通过理解其工作原理和实践操作,开发者可以更高效地利用这一组件,提升应用的用户体验。
2025/6/15 19:58:08 1.42MB
1
简介:
在IT行业中,编程是解决问题和自动化任务的有效工具。
在教育领域,Python作为一种易学且功能强大的编程语言,常被用于开发各种教学辅助软件。
这款"Python老师上课点名软件源代码"就是一个很好的例子,它旨在帮助教师更方便、高效地进行课堂点名。
我们需要了解Python的基本语法和特性。
Python以其简洁的代码结构和丰富的库支持而闻名,这使得它成为初学者和专业开发者都喜爱的语言。
在这个点名软件中,开发者可能使用了字典、列表等数据结构来存储学生的姓名或学号,以便进行随机抽取。
字典可以以键值对的形式存储数据,如学号作为键,姓名作为值,方便快速查找。
在实现点名功能时,可能用到了Python的random模块。
该模块提供了各种随机数生成函数,例如`random.choice()`可以用来从一个列表中随机选取一个元素,这正符合点名的需求。
如果要实现连抽功能,开发者可能使用了循环和条件判断语句,如for循环来多次调用`random.choice()`,并记录下每次抽取的结果。
点名软件还提到了历史数据的显示。
这意味着程序内部可能包含了一个数据持久化机制,如使用文件操作(如pickle或json模块)将每次点名的结果保存到磁盘,以便之后查看。
当教师需要回顾之前点过的名字时,程序可以读取这些文件,将历史记录展示出来。
此外,后端开发通常涉及到服务器与数据库的交互。
虽然这个点名软件的描述中没有明确提到数据库,但如果班级人数较多,或者需要实现网络化的远程点名功能,可能就需要利用到数据库技术。
比如,SQLite是一个轻量级的数据库,可以嵌入到Python应用中,用于存储大量学生信息。
总结来说,这款Python点名软件涉及的知识点包括:1. Python基础语法:变量、数据结构(如列表、字典)、控制流(如循环和条件语句)。
2. random模块:随机数生成,用于实现点名的随机抽取功能。
3. 数据持久化:使用文件操作(如pickle或json)保存和读取历史点名记录。
4. 可能涉及的数据库知识:如果软件需要处理大量数据或实现网络功能,可能需要用到数据库技术。
通过学习和理解这个源代码,不仅可以掌握上述技能,还能了解到如何将编程应用于实际问题解决,对于提升编程能力和教学效率都有很大帮助。
2025/6/15 19:56:32 5KB
1
简介:
PuTTY,一个强大的远程连接工具PuTTY是一个广泛使用的开源软件,主要功能是提供终端模拟器,支持多种网络协议,包括SSH(Secure Shell)、Telnet、Rlogin和原始的TCP套接字连接。
PuTTY以其小巧、免费且跨平台的特点,深受IT专业人员和爱好者的喜爱。
在本文中,我们将深入探讨PuTTY的功能、用途以及如何使用它作为优秀的文件上传工具。
1. PuTTY的基础功能PuTTY的核心功能是作为终端模拟器,让用户能够通过命令行界面与远程服务器进行交互。
它支持Windows、Linux和Mac OS等操作系统,可以连接到各种类型的服务器,如Unix、Linux和嵌入式设备。
PuTTY提供了一种安全的加密方式来保护用户的数据,使得远程登录更加安全。
2. SSH连接PuTTY的SSH支持是其最常用的功能之一。
SSH是一种安全的网络协议,用于在网络中建立加密连接,常用于远程登录。
通过PuTTY,用户可以设置服务器地址、端口号、用户名和密码,然后创建一个安全的SSH连接,进行远程管理和维护工作。
3. 文件传输虽然PuTTY本身并不直接包含文件上传功能,但通过集成第三方工具如PSCP(PuTTY Secure Copy)或PSFTP(PuTTY Secure File Transfer Protocol),用户可以实现文件的上传和下载。
PSCP类似于经典的FTP工具,而PSFTP则提供了SFTP(Secure File Transfer Protocol)支持,这两种工具都基于SSH,确保了文件传输的安全性。
4. 配置选项PuTTY提供了丰富的配置选项,允许用户根据自己的需求定制会话。
例如,你可以保存特定服务器的连接设置,设置字体类型和大小,调整终端颜色方案,甚至启用X11转发,将图形应用程序从远程服务器显示在本地机器上。
5. PuTTY的安全性PuTTY强调安全性,支持公钥认证,这是一种更安全的身份验证方式,比传统的密码认证更为可靠。
用户可以生成SSH密钥对,并将公钥存放在远程服务器上,这样每次连接时只需输入私钥的密码即可,有效防止了密码被窃取的风险。
6. PuTTY家族工具除了基本的PuTTY之外,还有许多与其相关的工具。
例如,PuTTYgen用于生成SSH密钥对;
Plink是PuTTY的命令行版本,可以在脚本中使用;
Pageant是PuTTY的密钥管理器,可帮助管理多个SSH密钥。
7. 故障排查和优化在使用PuTTY过程中,可能会遇到连接问题,如超时、断开连接等。
PuTTY提供详细的日志记录功能,可以帮助用户诊断并解决这些问题。
此外,还可以通过调整连接参数,如窗口缓冲区大小、数据包大小等,来优化连接性能。
8. PuTTY与其他工具的集成PuTTY可以与许多其他开发工具和IDE集成,如Visual Studio Code、Eclipse等,方便开发者在IDE内部直接通过PuTTY进行远程开发和调试。
PuTTY作为一个优秀的远程连接工具,不仅满足了基础的SSH登录需求,还通过其丰富的功能和扩展性,为用户提供了一整套安全、便捷的远程访问解决方案。
无论是日常的系统管理,还是开发调试,PuTTY都是一个值得信赖的选择。
2025/6/15 19:51:57 266KB
1
简介:
《颜色小猎人3.5.e》是一款深受用户喜爱的颜色识别和管理软件,它提供了丰富的色彩分析和选取功能,帮助用户在设计、绘画、印刷等领域更精确地掌握色彩。
这款软件的完整版3.5.e版本增加了许多新特性和优化,以提升用户体验。
一、颜色选取与分析颜色小猎人3.5.e的核心功能之一是颜色选取。
它能够通过摄像头捕捉现实世界中的颜色,并将其转换为数字色彩代码,如RGB、CMYK、HSV等。
用户可以轻松地将这些颜色应用于各种设计项目,确保色彩的一致性。
此外,软件还提供了色彩分析工具,如色差计算,帮助用户评估颜色之间的差异,这对于色彩敏感的工作至关重要。
二、色彩库与自定义调色板在颜色小猎人3.5.e中,用户可以浏览预设的色彩库,包含多种流行色卡和色彩搭配方案。
同时,用户也可以创建自己的调色板,保存常用或特定项目的颜色组合,方便随时调用。
这大大提高了设计工作的效率。
三、跨平台支持该软件支持多个操作系统,包括Windows和Mac OS,使得不同平台的用户都能享受其便利。
3.5.e版本可能进一步优化了跨平台的兼容性和稳定性,确保用户在任何环境下都能顺畅使用。
四、增强的用户体验颜色小猎人3.5.e对界面进行了优化,提供更直观的操作方式和视觉效果。
此外,可能还添加了一些快捷键和功能,让用户在操作过程中更加得心应手。
新版本可能也修复了前代版本的一些已知问题,提升了软件的整体性能。
五、教育与学习资源为了帮助用户更好地掌握颜色理论和应用,颜色小猎人3.5.e可能包含了教程、指南和色彩知识库。
这些资源对于初学者来说是非常宝贵的,可以帮助他们快速上手并提升色彩感知能力。
六、社区交流与分享软件可能还拥有一个活跃的用户社区,用户可以在其中分享自己的作品、色彩搭配和使用经验。
这种互动增强了软件的社交属性,使得学习和探索色彩变得更加有趣。
《颜色小猎人3.5.e》是一款强大的颜色管理工具,不仅提供了全面的颜色选取和分析功能,还注重用户体验的提升和色彩知识的学习分享。
无论是专业设计师还是业余爱好者,都可以从中受益匪浅。
通过这个完整版,用户可以享受到所有高级特性,尽情探索和应用色彩世界。
2025/6/15 19:48:46 2KB
1
本程序实现功能:1.DataGrid数据的显示、修改与保存2.DataGrid数据导入至Excel3.DataGrid数据导入至Word
2025/6/15 3:32:05 77KB WPF DataGrid 导入 Excel
1
包括以下方面:1.新建一幅图像,或者打开、保存、关闭和退出等功能。
2.对图像进行复制、粘贴、剪切、全选、取消选择和翻转。
其中翻转包括水平翻转和垂直翻转。
3.过滤图像,包括锐化、浮雕、腐蚀、风化。
4对图像进行滤波处理:包括最小值滤波处理、最大值滤波处理和中值处理。
5.对彩色图像进行变换:包括彩色转灰度、彩色转黑白、平滑处理、霓红处理。
6.软化图像,包括红色、绿色、橙色;
硬化图像,包括红色、绿色、蓝色。
7.对图像进行卷积处理,包括水平增强、垂直增强和双向增强。
8.对图像进行边缘探测,例如右下边缘抽出,拉普拉斯(8邻域)。
9.给图像进行对比度增强,进行FFT分析,以及对两幅图像进行合成。
工具栏中的功能主要体现在工具中,正如平时画图工具的工具一样,可以选择一定的区域,放大图像、画圆、画方,输入文字、剪切一定的区域,简单的渐变等。
2025/6/14 3:05:51 970KB 图像处理 photoshop
1
版本修改记录:V2.2.0.2修改:修改了HttpPost相对路径的一些问题。
V2.2.0.0增加:[id(0x00010041),helpstring("GetRevIndex")]HRESULTGetRevCount([out,retval]long*pbool);[id(0x00010042),helpstring("GetRevIndexInfo")]HRESULTGetRevInfo([in]longlIndex,[in]longlType,[out,retval]BSTR*pbool);[id(0x00010043),helpstring("SetDocProp")]HRESULTSetValue([in]BSTRstrValue,[in]BSTRstrName,[out,retval]long*pbool);[id(0x00010044),helpstring("SetDocVariable")]HRESULTSetDocVariable([in]BSTRstrVarName,[in]BSTRstrValue,[in]longlOpt,[out,retval]long*pbool);[id(0x00010045),helpstring("SavepageToDoc")]HRESULTSetPageAs([in]BSTRstrLocalFile,[in]longlPageNum,[in]longlType,[out,retval]long*pbool);----------------------------------------------------------------------------------------------------------------------------------------------------------------------LoadDso.jsvars=""s+=""s+=""document.write(s)----------------------------------------------------------------------------------------------------------------------------------------------------------------------接口文档:/*1.新建*///新建Worddocument.all.FramerControl1.CreateNew("Word.Document");//新建Exceldocument.all.FramerControl1.CreateNew("Excel.Sheet");/*2.打开文件*///打开制定的本地文件document.all.FramerControl1.Open("C:\\TestBook.xls");//制定用Word来打开c:\plain.txt文件document.all.FramerControl1.Open("C:\\Plain.txt",false,"Word.Document");//打开服务器的文件document.all.FramerControl1.Open"https://secureserver/test/mytest.asp?id=123",true,"Excel.Sheet","MyUserAccount","MyPassword");//打开服务器的文件document.all.FramerControl1.Open("http://localhost/1.doc",true);/*3.保存文件*///到本地document.all.FramerControl1.Save("c:\\1.doc",true);//服务器/*增加Http协议Post上传接口,可以Post一个动态页面(jsp,asp,php...),由动态页面负责解析数据boolHttpInit();boolHttpAddPostString(BSTRstrName,BSTRstrValue);boolHttpAddPostCurrFile(BSTRstrFileID,BSTRstrFileName);BSTRHttpPost(BSTRbstr);*///初始化Http引擎document.all.FramerControl1.HttpInit();//增加Post变量document.all.FramerControl1.HttpAddPostString("RecordID","20060102200");document.all.FramerControl1.HttpAddPostString("UserID","李局长");//上传打开的文件document.all.FramerControl1.HttpAddPostCurrFile("FileData","文档名.doc");//执行上传动作document.all.FramerControl1.HttpPost("http://xxxx.com/uploadfile.asp");/*4.修订留痕*///进入留痕状态document.all.FramerControl1.SetTrackRevisions(1);//进入非留痕状态document.all.FramerControl1.SetTrackRevisions(0);//接受当前修订document.all.FramerControl1.SetTrackRevisions(4);/*5.设置当前用户*/document.all.FramerControl1.SetCurrUserName("张三");/*6.设置当前时间(笔迹留痕会显示("Like2006:02:0711:11:11")*/document.all.FramerControl1.SetCurrTime("2006:02:0711:11:11");/*7.设置和创建书签,此功能比较强大,设置书签数据、添加书签和添加红头文件就靠他了SetFieldValue(BSTRstrFieldName,BSTRstrValue,BSTRstrCmdOrSheetName)strFieldName:书签名strValue:要设置的值strCmdOrSheetName:命令::ADDMARK::添加BookMark::DELMARK::删除这个BookMark::GETMARK::定位到这个BookMark::FILE::插入的是文件::JPG::插入的是图片一般来说:WORD中书签是做好的,可以通过此接口把外界数据设置进书签中去。
*///在当前WORD位置插入标签,标签名为"book1",数值为"test"document.all.FramerControl1.SetFieldValue("book1","test","::ADDMARK::");//设置书签"Time",数值为"2006-03-1622:22:22"document.all.FramerControl1.SetFieldValue("Time","2006-03-1622:22:22","");//在书签位置"hongtou",插入红头文件"http://222.222.222.222/hongtou1.doc"这样,红头就自动插进去了document.all.FramerControl1.SetFieldValue("hongtou","http://222.222.222.222/hongtou1.doc","::FILE::");/*8.设置菜单显示情况BOOLSetMenuDisplay(longlMenuFlag)lMenuFlag为以下数值的组合#defineMNU_NEW0x01#defineMNU_OPEN0x02#defineMNU_CLOSE0x04#defineMNU_SAVE0x08#defineMNU_SAVEAS0x16#defineMNU_PGSETUP0x64#defineMNU_PRINT0x256#defineMNU_PROPS0x32#defineMNU_PRINTPV0x126*///只有“新建”菜单可用document.all.FramerControl1..SetMenuDisplay(1);//只有“打开”菜单可用document.all.FramerControl1.SetMenuDisplay(2);//只有“打开”和“新建”菜单可用document.all.FramerControl1.SetMenuDisplay(3);/*9.保护文档和解保护文档lProOrUn:1:保护文档;
0:解除保护lProType:wdNoProtection=-1,wdAllowOnlyRevisions=0,wdAllowOnlyComments=1,wdAllowOnlyFormFields=2strProPWD:密码*///完全保护文档,密码为"pwd"document.all.FramerControl1.ProtectDoc(1,1,"pwd");//解除文档保护document.all.FramerControl1.ProtectDoc(0,1,"pwd");/*10.显示或隐藏修订内容ShowRevisions(longnNewValue)nNewValue=0则隐藏修订=1则显示修订*///显示修订留痕document.all.FramerControl1.ShowRevisions(1);//隐藏修订留痕document.all.FramerControl1.ShowRevisions(0);/*11.插入合并文件,strFieldPath文件路径,可以是http,ftp的路径pPos=0//当前鼠标位置1;文件开头2;文件末尾pPos的第4位为1的时候,代表插入的是图片InSertFile(BSTRstrFieldPath,longlPos)*///文件头部插入文件document.all.FramerControl1.InSertFile("http://XX.com/XX.doc",1);//文件尾部插入文件document.all.FramerControl1.InSertFile("http://XX.com/XX.doc",2);//当前光标位置插入文件document.all.FramerControl1.InSertFile("http://XX.com/XX.doc",0);//文件头部插入图片document.all.FramerControl1.InSertFile("http://XX.com/XX.jpg",9);//文件尾部插入图片document.all.FramerControl1.InSertFile("http://XX.com/XX.jpg",10);//当前光标位置插入图片document.all.FramerControl1.InSertFile("http://XX.com/XX.jpg",8);/*0x31.文档另存为HRESULTSaveAs([in]VARIANTstrFileName,[in]VARIANTdwFileFormat,[out,retval]long*pbool);参数:strFileName:文件本地路径,如c:\\11.docdwFileFormat:文件格式dwFileFormat的数值为:Excel:TypeenumXlFileFormat{xlAddIn=18,xlCSV=6,xlCSVMac=22,xlCSVMSDOS=24,xlCSVWindows=23,xlDBF2=7,xlDBF3=8,xlDBF4=11,xlDIF=9,xlExcel2=16,xlExcel2FarEast=27,xlExcel3=29,xlExcel4=33,xlExcel5=39,xlExcel7=39,xlExcel9795=43,xlExcel4Workbook=35,xlIntlAddIn=26,xlIntlMacro=25,xlWorkbookNormal=-4143,xlSYLK=2,xlTemplate=17,xlCurrentPlatformText=-4158,xlTextMac=19,xlTextMSDOS=21,xlTextPrinter=36,xlTextWindows=20,xlWJ2WD1=14,xlWK1=5,xlWK1ALL=31,xlWK1FMT=30,xlWK3=15,xlWK4=38,xlWK3FM3=32,xlWKS=4,xlWorks2FarEast=28,xlWQ1=34,xlWJ3=40,xlWJ3FJ3=41,xlUnicodeText=42,xlHtml=44};Word:TypeenumWdSaveFormat{wdFormatDocument=0,wdFormatTemplate=1,wdFormatText=2,wdFormatTextLineBreaks=3,wdFormatDOSText=4,wdFormatDOSTextLineBreaks=5,wdFormatRTF=6,wdFormatUnicodeText=7,wdFormatEncodedText=7,wdFormatHTML=8};PPT:enumPpSaveAsFileType{ppSaveAsPresentation=1,ppSaveAsPowerPoint7=2,ppSaveAsPowerPoint4=3,ppSaveAsPowerPoint3=4,ppSaveAsTemplate=5,ppSaveAsRTF=6,ppSaveAsShow=7,ppSaveAsAddIn=8,ppSaveAsPowerPoint4FarEast=10,ppSaveAsDefault=11,ppSaveAsHTML=12,ppSaveAsHTMLv3=13,ppSaveAsHTMLDual=14,ppSaveAsMetaFile=15,ppSaveAsGIF=16,ppSaveAsJPG=17,ppSaveAsPNG=18,ppSaveAsBMP=19};*//*0x32.删除本地文件HRESULTDeleteLocalFile([in]BSTRstrFilePath);参数:strFileName:文件本地路径,如c:\\11.doc*//*0x33.创建临时文件HRESULTGetTempFilePath([out,retval]BSTR*strValue);返回:临时文件的路径地址。
使用完后,用DeleteLocalFile删除*//*0x34.设置文档显示模式HRESULTShowView([in]longdwViewType,[out,retval]long*pbool);dwViewType的可取值为:enumWdViewType{wdNormalView=1,wdOutlineView=2,wdPrintView=3,wdPrintPreview=4,wdMasterView=5,//这个是大纲wdWebView=6};*///大纲模式document.all.FramerControl1.ShowView(5);/*0x39:下载远程文件HRESULTDownloadFile([in]BSTRstrRemoteFile,[in]BSTRstrLocalFile,[out,retval]BSTR*strValue);参数:strRemoteFile:远程路径地址,httporFtpstrLocalFile:本地保存地址,ifstrLocalFile==NULLthenCreateTempFileandreturnTempFile'sPath*//*0x40:增加Http上传时候的,附加其他文件HRESULTHttpAddPostFile([in]BSTRstrFileID,[in]BSTRstrFileName,[out,retval]long*pbool);参数:strFileID:文件的ID,供服务器端页面解析strFileName:本地文件地址*//*0x41,0x42.获取详细的修订信息。
GetRevCount([out,retval]long*pbool);GetRevInfo([in]longlIndex,[in]longlType,[out,retval]BSTR*pbool);例子如下*/varvCount;vCount=document.all.FramerControl1.GetRevCount();alert(vCount);varvOpt=0;varvDate;for(vari=1;i<=vCount;i++){vOpt=document.all.FramerControl1.GetRevInfo(i,2);if("1"==vOpt){vOpt="插入";}elseif("2"==vOpt){vOpt="删除";}else{vOpt="未知操作";}vDate=newString(document.all.FramerControl1.GetRevInfo(i,1));vDate=parseFloat(vDate);alert(vDate);dateObj=newDate(vDate);alert(dateObj.getYear()+"年"+dateObj.getMonth()+1+"月"+dateObj.getDate()+"日"+dateObj.getHours()+"时"+dateObj.getMinutes()+"分"+dateObj.getSeconds()+"秒");alert("用户:"+document.all.FramerControl1.GetRevInfo(i,0)+"\r\n操作:"+vOpt+"\r\n内容:"+document.all.FramerControl1.GetRevInfo(i,3));}/*0x43.设置基本信息:HRESULTSetValue([in]BSTRstrValue,[in]BSTRstrName,[out,retval]long*pbool);1.设置文件只读密码SetValue("password","::DOCPROP:PassWord");2.设置文件修改密码SetValue("password","::DOCPROP:WritePW");返回值:0正确-1:不支持此命令,请确定您的第二个参数没有传错-127:异常*///设置文件只读密码document.all.FramerControl1.SetValue("password","::DOCPROP:PassWord");//设置文件修改密码document.all.FramerControl1.SetValue("password","::DOCPROP:WritePW");/*0x44.设置文档变量,这个很少能用到HRESULTSetDocVariable([in]BSTRstrVarName,[in]BSTRstrValue,[in]longlOpt,[out,retval]long*pbool);strVarName:变量名strVlaue:变量值lOpt:操作类型,按位第一位为1:表示update域关联的第二位为1:表示如果没有这个变量则添加第三位为1:未来支持return:0:OK-127:异常*//*0x45:分页保存HRESULTSetPageAs([in]BSTRstrLocalFile,[in]longlPageNum,[in]longlType,[out,retval]long*pbool);strLocalFile:本地路径lPageNum:页数*/
2025/6/13 12:22:57 139KB web office word 在线
1
小时候的经典游戏,代码参考了github上的项目Mario-Level-1,使用pygame来实现,原项目实现了超级玛丽的第一个小关。
在原项目的基础上,游戏使用json文件来保存每一个关卡的数据,将数据和代码解耦合,目前已开发4个小关,后续关卡的扩展也很方便,只需要添加json文件和地图图片,支持新的怪物就行。
游戏还支持进入水管,到新的子地图。
2025/6/13 5:04:56 939KB python pygame
1
御剑扫描器专业版★新增存活预判(当目标无法连接3次自动撤销任务)★新增首页爬虫(只抓取首页的目录进行二次扫描)★新增文件存储(可以保存扫描结果到指定文位置)★新增跳过大小(可以设定要忽略的页面大小,min-max)★新增GET模式关键字词组过滤(使用GET模式和关闭自定义404才会生效,可以忽略包含指定关键词的页面)★默认参数和值初始化更加科学合理(不合理的设置会导致目标产生CC或者漏报)★优化扫描速度(比1.0提升速度大概5-10倍,通过maxspeed参数控制速度最大值)★优化内存占用(1000/s内存占用10-30M左右)
2025/6/12 14:08:13 2.47MB 爬虫
1
共 1000 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡