在Android应用开发中,集成百度地图API是一项常见的需求,它能为用户提供丰富的地图服务功能,如定位、导航、路线规划等。
本篇文章将详细介绍如何在Android项目中进行百度地图的开发,以及一些关键的技术点。
我们需要在百度地图开放平台(http://lbsyun.baidu.com/)注册账号并创建应用,获取API密钥。
这个API密钥是连接我们应用与百度地图服务的关键,确保了应用的合法性。
完成注册后,根据应用的包名和签名信息生成相应的密钥,并在项目中正确配置。
接下来,我们将在AndroidManifest.xml文件中添加必要的权限。
包括访问网络、读写外部存储、获取地理位置等,例如:```xml<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />```同时,添加百度地图SDK所需的库依赖:```xml<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="你的API_KEY" />```然后,在布局文件中加入MapView组件,这是显示百度地图的核心组件:```xml<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" />```在Activity或Fragment中初始化MapView,并设置地图的显示样式和级别:```javaMapView mapView = findViewById(R.id.bmapView);BaiduMap baiduMap = mapView.getMap();baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); // 设置为普通地图baiduMap.setZoom(15); // 设置地图缩放级别```为了让应用能够获取用户的位置信息,我们需要开启定位服务:```javaLocationClient locationClient = new LocationClient(this);locationClient.registerListener(new MyLocationListener()); // 自定义监听器locationClient.start(); // 开启定位```编写`MyLocationListener`类,重写`onReceiveLocation`方法,接收定位结果:```javapublic class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location != null) { // 使用获得的经纬度设置地图中心点 LatLng myLocation = new LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(myLocation); baiduMap.setMapStatus(update); } }}```为了给用户提供更丰富的地图交互体验,可以添加覆盖物(Overlay)、信息窗口(InfoWindow)等功能。
例如,自定义一个Marker来表示用户当前位置:```javaOverlayOptions markerOption = new MarkerOptions() .position(myLocation) .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker));baiduMap.addOverlay(markerOption);```此外,还可以通过百度地图API实现路线规划,比如驾车、步行、公交等。
调用`DrivingRoutePlanOption`、`WalkingRou
2025/6/15 22:19:09 5.65MB
1

在IT行业中,ZTree是一款广泛应用于Web开发的前端插件,尤其在文件管理、权限控制等领域,它提供了强大的树形展示功能。
标题提到的“ztree的使用”着重于介绍如何在项目中集成和操作ZTree。
由于描述中提到了项目基于SSH(Spring、Struts2、Hibernate)框架,我们可以推测这是一个Java Web项目,ZTree在此类项目中常用于后台数据的前端展示。
ZTree的基础概念需要理解。
ZTree是一个基于jQuery的插件,它可以将静态或动态的数据结构渲染成交互式的树形视图。
它的主要特点包括节点的多级展示、可选的异步加载、丰富的事件机制以及自定义的节点样式和图标。
在SSH框架中使用ZTree,首先你需要在项目中引入ZTree的CSS和JavaScript文件。
这些文件通常可以从ZTree的官方网站下载,包含所需的样式表和脚本。
然后,在HTML页面中引入这些资源,并设置一个div元素作为ZTree的容器。
接下来,你需要准备ZTree的数据源。
在基于SSH的项目中,数据通常通过Ajax请求从后端获取。
数据格式应遵循ZTree的规范,一般为JSON格式,包含节点ID、父节点ID、节点文本等关键信息。
例如:```json[ { "id": "1", "pId": "0", "name": "父节点1" }, { "id": "1_1", "pId": "1", "name": "子节点1_1" }, { "id": "1_2", "pId": "1", "name": "子节点1_2" }]```在JavaScript中,你可以使用$.fn.zTree.init方法初始化ZTree,传入刚才创建的容器div和数据源。
同时,你还需要配置ZTree的参数,如是否启用异步加载、节点展开方式、是否允许拖拽等。
例如:```javascriptvar setting = { async: { enable: true, url: yourAjaxUrl, autoParam: [id], otherParam: {type: typeValue} }, data: { simpleData: { enable: true } }};var zNodes = []; // 前面准备的JSON数据$.fn.zTree.init($("#treeDemo"), setting, zNodes);```ZTree还提供了丰富的事件监听,如onClick、onDblClick等,你可以根据需要绑定相应的处理函数来实现节点点击后的业务逻辑。
例如:```javascriptvar treeObj = $.fn.zTree.getZTreeObj("treeDemo");treeObj.bind("onClick", function(event, treeId, treeNode) { console.log(点击了节点:, treeNode.id);});```此外,ZTree支持动态加载和异步数据获取,这对于大型数据集非常有用。
你可以通过配置async参数来开启异步加载,并指定获取数据的URL。
当用户展开节点时,ZTree会自动发送请求获取子节点数据。
“ztree的使用”涵盖了前端展示、后端数据交互、事件处理等多个方面。
理解ZTree的工作原理和配置选项,能够帮助你在SSH项目中构建出高效、交互性强的树形界面。
通过不断实践和优化,ZTree可以成为项目中不可或缺的一部分,提升用户体验并简化后台数据管理。
2025/6/15 22:18:37 17KB
1
简介:
【北航C语言练习 晏海华】是北京航空航天大学C语言课程的一套练习题集,由命题人晏海华设计。
这套练习题旨在帮助学生深入理解和掌握C语言的基本概念、语法以及编程技巧。
根据文件名称列表,我们可以推测这包含8个不同难度级别的练习题目,分别标记为1至8,可能代表题目的递进难度。
C语言是一门基础且重要的编程语言,它以简洁、高效和强大的低级操作能力著称。
在北航的C语言课程中,学生通常会接触到以下几个方面的知识点:1. **基本语法**:包括变量声明、数据类型(如int、char、float等)、常量定义、运算符(算术、比较、逻辑、位运算符)以及表达式。
2. **控制结构**:学习如何使用条件语句(if-else)、循环语句(for、while、do-while)来控制程序的流程。
3. **函数**:了解函数的定义、调用、参数传递和返回值,以及如何使用函数实现模块化编程。
4. **数组与指针**:这是C语言的一大特色,理解数组的声明、初始化和操作,以及指针的概念、操作符(*、&)和指针的使用,如动态内存分配和数组操作。
5. **结构体与联合体**:学习如何定义和使用自定义数据类型,如结构体和联合体,以及它们在数据组织中的作用。
6. **文件操作**:掌握打开、读取、写入和关闭文件的基本方法,以及文件指针的使用。
7. **预处理指令**:了解宏定义、条件编译等预处理指令的作用。
8. **错误处理和调试**:学习如何使用断点、单步执行、查看变量值等调试技巧,以及处理运行时错误。
通过这套练习题,学生将有机会实际编写和调试代码,提升解决问题的能力。
每个题目可能涉及上述一个或多个知识点,让学生在实践中巩固理论知识。
例如,早期的题目可能侧重于基本语法和控制结构,而后期的题目可能会引入更复杂的概念,如指针操作和文件操作。
北航C语言练习的目的是使学生能够熟练地运用C语言进行程序设计,培养他们的逻辑思维能力和问题解决能力,为后续的计算机科学学习打下坚实的基础。
完成这套练习后,学生不仅应能编写出符合规范的C程序,还应具备调试和优化代码的能力。
2025/6/15 20:00:43 33KB
1
简介:
PHP实现Google和Baidu风格分页代码的知识点涵盖了分页算法、PHP类的创建和使用、以及基本的Web页面导航。
下面详细介绍这些知识点。
### 分页算法分页算法是分页功能的核心,它需要根据当前页码和每页显示的记录数来计算出总页数以及记录的起止位置。
1. **计算总页数**:需要根据记录总数(recorbTotal)和每页显示的记录数(pageSize)来计算总页数(pageTotal)。
通常是将记录总数除以每页记录数,然后向上取整。
2. **获取当前页的起止记录**:分页算法还需要确定当前页显示的数据从哪一条记录开始,到哪一条记录结束。
这需要根据当前页码(currentPage)来计算。
3. **设置上一页和下一页**:确定了当前页码后,可以很轻易地得到上一页(previous)和下一页(next)的页码。
4. **分页导航**:为了方便用户在不同页间跳转,分页算法应提供一个分页导航,显示从起始页到终止页的页码按钮,通常是显示当前页周围的一组页码。
### PHP类的创建和使用代码中定义了一个名为`Pager`的PHP类,这个类封装了分页的功能,方便在项目中复用。
1. **属性**:`Pager`类中定义了一系列属性(variables),用于存储分页所需的所有信息,如总页数(pageTotal)、当前页(currentPage)、记录总数(recorbTotal)等。
2. **构造函数**:类的构造函数(constructor)用于初始化对象,设置默认值,如当前显示页、记录总数和每页显示记录数。
3. **方法**:类提供了一系列方法(methods)来操作这些属性,比如`setRecorbTotal()`设置记录总数,`setPageSize()`设置每页显示的记录数,`setCurrentPage()`设置当前显示页等。
同时,`execute()`方法用于输出分页导航。
4. **分页导航的生成**:`Pager`类中的`execute()`方法会根据当前页码和其他参数生成分页导航。
它会计算出分页导航中应该显示的页码,并输出为HTML链接,允许用户点击跳转到指定的页码。
### 基本的Web页面导航实现分页功能需要与Web页面的导航相结合,允许用户通过点击分页链接跳转到不同的页面视图。
1. **分页链接**:每个分页导航项应该被构造成一个链接(URL),这个URL应该包含参数,比如当前页码(page),以便于PHP脚本能根据这个参数来获取相应页面的数据。
2. **URL构造**:分页导航中的链接通常包括基础URL(baseUri)和查询字符串,查询字符串用于指定当前页码,例如`page.php?page=2`。
3. **页面跳转**:分页链接点击后,用户被重定向到相应的页面,并且PHP脚本会根据URL参数来查询和显示对应的数据页。
### 总结以上是基于提供的文档内容生成的相关知识点。
文档中的PHP代码展示了一个分页类的实现,这个类可以用于生成类似Google或百度搜索引擎结果页风格的分页功能。
了解和掌握这些知识点,对实现Web应用中的分页功能有很大帮助。
在实际应用中,开发者需要根据具体需求调整分页算法和样式,以达到最佳用户体验。
2025/6/15 19:56:00 34KB
1
简介:
"Spring-Common-prj" 是一个与Spring框架相关的项目,可能是为了封装一些通用的功能或提供共用的服务。
Spring是Java开发中的一个核心框架,尤其在企业级应用开发中广泛使用,它提供了依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,AOP)以及一系列强大的功能,如数据访问、事务管理、远程服务支持等。
在这个项目中,我们可以推测开发者可能已经创建了一些Spring Bean,用于处理常见的业务逻辑或者提供公共服务。
Spring Bean是由Spring容器管理的Java对象,它们可以通过XML配置文件、注解或者Java配置类来定义和配置。
容器负责创建Bean实例、管理它们的生命周期以及处理Bean之间的依赖关系。
文件"spring-common-prj-main"可能包含了项目的主入口,这通常是启动Spring应用程序的关键部分。
在Java中,这个主入口通常是一个包含`main`方法的类,它会初始化Spring的ApplicationContext,加载配置文件,并启动应用。
Spring的ApplicationContext是Spring容器的主要实现,它负责读取配置元数据,创建和管理Bean,并提供事件发布等功能。
在Spring项目中,开发者可能会使用Spring Boot,这是一个简化Spring应用初始搭建以及开发过程的框架。
Spring Boot的特点是开箱即用,内置了Tomcat服务器,可以快速构建独立的、生产级别的基于Spring的应用。
同时,它还提供了自动配置功能,极大地减少了配置代码。
此外,Spring框架还包括Spring MVC,这是一个用于构建Web应用程序的模块。
Spring MVC通过模型-视图-控制器(Model-View-Controller,MVC)架构模式,实现了业务逻辑与用户界面的分离,使得开发更加灵活。
开发者可能会在项目中创建控制器类,处理HTTP请求,调用业务服务,然后返回视图结果。
Spring Data则提供了一种统一的方式来访问各种数据存储,包括JPA(Java Persistence API)用于ORM(Object-Relational Mapping),Spring Data JPA可以帮助我们更方便地操作数据库。
还有Spring Data MongoDB支持NoSQL数据库,提供了与MongoDB交互的便捷API。
在"Spring-Common-prj"中,可能还涉及了Spring AOP,这是Spring提供的面向切面编程支持。
通过AOP,开发者可以定义“切面”——一组相关或相互关联的横切关注点,如日志、事务管理等,并将它们模块化为可重用的组件。
"Spring-Common-prj"是一个可能包含了通用功能和服务的Spring项目,涵盖了Spring框架的核心特性,如依赖注入、面向切面编程、Web应用开发以及数据访问。
通过深入研究这个项目,我们可以学习到如何有效地使用Spring来构建和组织复杂的Java应用。
2025/6/15 19:51:11 4KB
1
简介:
在本文中,我们将深入探讨如何使用Qt框架与Video for Linux 2(V4L2)接口相结合,实现在Linux系统上显示摄像头视频流。
V4L2是Linux内核提供的一种标准接口,用于与视频捕获设备(如摄像头)进行交互,而Qt则是一个跨平台的C++图形用户界面应用程序开发框架。
我们需要了解V4L2的基本概念。
V4L2是V4L(Video4Linux)的升级版,提供了更多的功能,包括对多种视频格式的支持、多设备并发访问以及高级缓冲区管理。
它通过/dev/videoX设备节点与摄像头通信,X为设备编号。
接下来,我们要引入Qt。
Qt库提供了一套完整的图形用户界面工具,包括窗口、控件、布局等,以及多媒体模块(QMultimedia),可以方便地处理音频和视频数据。
在Qt中,我们可以通过QCamera类来操作摄像头,并使用QCameraViewfinder或QVideoWidget来显示视频流。
实现"v4l2摄像头显示视频流"的关键步骤如下:1. **初始化Qt环境**:确保系统已安装Qt库,然后创建一个Qt项目,选择合适的Qt版本和构建系统。
2. **导入相关模块**:在代码中导入必要的Qt模块,如`<QtWidgets>`(用于窗口和控件)、`<QCamera>`(摄像头操作)和`<QCameraViewfinder>`(显示视频流)。
3. **创建QCamera对象**:使用QCamera类创建一个摄像头对象,传入设备ID(通常是"/dev/video0")作为参数。
例如: ```cpp QCamera camera(new QCamera("/dev/video0", this)); ``` 如果需要检测可用摄像头,可以使用`QCameraInfo`类列出所有设备。
4. **设置视频源**:V4L2摄像头作为视频源,可以通过设置`QCamera::setCaptureDevice`方法来实现: ```cpp camera.setCaptureDevice(QCamera::CaptureDevice::DeviceType, "video0"); ```5. **启动相机**:在确保设置正确后,启动相机: ```cpp camera.start(); ```6. **显示视频流**:创建一个`QCameraViewfinder`实例并将其设置为相机的视图finder,然后将视图finder添加到窗口布局中: ```cpp QCameraViewfinder *viewfinder = new QCameraViewfinder(this); camera.setViewfinder(viewfinder); layout->addWidget(viewfinder); // 假设layout是窗口的布局 ```7. **处理错误和状态改变**:为QCamera对象添加信号连接,以便在出现错误或状态改变时进行相应的处理。
8. **关闭相机**:在应用退出或不再需要视频流时,记得停止并释放相机资源: ```cpp camera.stop(); delete camera; ```以上就是使用Qt结合V4L2显示摄像头视频流的基本步骤。
实际应用中可能还需要处理分辨率设置、帧率控制、色彩格式转换等更复杂的细节。
同时,为了保证兼容性和稳定性,可能需要针对不同的硬件和驱动进行适配。
此外,还可以利用QMediaPlayer和QVideoSurfaceFormat等类来实现自定义的视频播放器功能。
通过这些知识,开发者可以构建出功能丰富的摄像头应用,不仅限于简单的视频显示,还能进行录像、图像处理等多种功能。
对于嵌入式系统或者需要在Linux环境下处理摄像头数据的应用来说,Qt结合V4L2是一个高效且灵活的选择。
2025/6/15 19:50:07 12KB
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
御剑扫描器专业版★新增存活预判(当目标无法连接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
视点变换,旋转,加速减速,星空背景太阳,光晕各行星纹理#include#include#include#include#include#include#include#pragmacomment(lib,"winmm.lib")#pragmacomment(lib,"wininet")//纹理图像结构typedefstruct{intimgWidth;//纹理宽度intimgHeight;//纹理高度unsignedcharbyteCount;//每个象素对应的字节数,3:24位图,4:带alpha通道的24位图unsignedchar*data;//纹理数据}TEXTUREIMAGE;//BMP文件头#pragmapack(2)typedefstruct{unsignedshortbfType;//文件类型unsignedlongbfSize;//文件大小unsignedshortbfReserved1;//保留位unsignedshortbfReserved2;//保留位unsignedlongbfOffBits;//数据偏移位置}BMPFILEHEADER;#pragmapack()//BMP信息头typedefstruct{unsignedlongbiSize;//此结构大小longbiWidth;//图像宽度longbiHeight;//图像高度unsignedshortbiPlanes;//调色板数量unsignedshortbiBitCount;//每个象素对应的位数,24:24位图,32:带alpha通道的24位图unsignedlongbiCompression;//压缩unsignedlongbiSizeImage;//图像大小longbiXPelsPerMeter;//横向分辨率longbiYPelsPerMeter;//纵向分辨率unsignedlongbiClrUsed;//颜色使用数unsignedlongbiClrImportant;//重要颜色数}BMPINFOHEADER;//定义窗口的标题、宽度、高度、全屏布尔变量#defineWIN_TITLE"模拟太阳系各星球的转动"constintWIN_WIDTH=800;constintWIN_HEIGHT=600;BOOLisFullScreen=FALSE;//初始不为全屏#defineDEG_TO_RAD0.017453floatangle=0.0;staticGLdoubleviewer[]={0,0,0,0,0};//初始化视角GLUquadricObj*quadric;//建立二次曲面对象GLfloatangle_Z;//星空旋转角度boolg_bOrbitOn=true;//控制转动暂停floatg_fSpeedmodifier=1.0f;//时间控制floatg_fElpasedTime;doubleg_dCurrentTime;doubleg_dLastTime;GLfloatLightAmbient[]={1.0f,1.0f,1.0f,0.0f};//环境光参数GLfloatLightDiffuse[]={1.0f,1.0f,1.0f,0.0f};//漫射光参数GLfloatLightPosition[]={0.0f,0.0f,0.0f,1.0f};//光源的位置//纹理图象TEXTUREIMAGEskyImg;TEXTUREIMAGEsunImg;TEXTUREIMAGErayImg;TEXTUREIMAGEmercuImg;TEXTUREIMAGEvenusImg;TEXTUREIMAGEearthImg;TEXTUREIMAGEmarsImg;TEXTUREIMAGEjupiterImg;TEXTUREIMAGEsaturnImg;TEXTUREIMAGEuranusImg;TEXTUREIMAGEneptuneImg;TEXTUREIMAGEmoonImg;GLuinttexture[12];//纹理数组//星球速度定义staticfloatfSunSpin=0.0f;//太阳自转速度staticfloatfMercuSpin=0.0f;//水星自转速度staticfloatfMercuOrbit=0.0f;//水星公转速度staticfloatfVenusSpin=0.0f;//金星自转速度staticfloatfVenusOrbit=0.0f;//金星公转速度staticfloatfEarthSpin=0.0f;//地球自转速度staticfloatfEarthOrbit=0.0f;//地球公转速度staticfloatfMarsSpin=0.0f;//火星自转速度staticfloatfMarsOrbit=0.0f;//火星公转速度staticfloatfJupiterSpin=0.0f;//木星自转速度staticfloatfJupiterOrbit=0.0f;//木星公转速度staticfloatfSaturnSpin=0.0f;//土星自转速度staticfloatfSaturnOrbit=0.0f;//土星公转速度staticfloatfUranusSpin=0.0f;//天王星自转速度staticfloatfUranusOrbit=0.0f;//天王星公转速度staticfloatfNeptuneSpin=0.0f;//海王星自转速度staticfloatfNeptuneOrbit=0.0f;//海王星公转速度staticfloatfMoonSpin=0.0f;//月亮自转速度staticfloatfMoonOrbit=0.0f;//月亮公转速度voidMakeTexture(TEXTUREIMAGEtextureImg,GLuint*texName)//转换为纹理{glPixelStorei(GL_UNPACK_ALIGNMENT,1);//对齐像素字节函数glGenTextures(1,texName);//第一个参数指定表明获取多少个连续的纹理标识符glBindTexture(GL_TEXTURE_2D,*texName);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,textureImg.imgWidth,textureImg.imgHeight,0,GL_RGB,GL_UNSIGNED_BYTE,textureImg.data);}//初始化OpenGLvoidInitGL(void){glClearColor(0.0f,0.0f,0.0f,0.5f);//设置黑色背景glClearDepth(2.0f);//设置深度缓存glEnable(GL_DEPTH_TEST);//启动深度测试glDepthFunc(GL_LEQUAL);//深度小或相等的时候渲染glShadeModel(GL_SMOOTH);//启动阴影平滑glEnable(GL_CULL_FACE);//开启剔除操作效果glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//使用质量最好的模式指定颜色和纹理坐标的插值质量glLightfv(GL_LIGHT1,GL_AMBIENT,LightAmbient);//设置环境光glLightfv(GL_LIGHT1,GL_DIFFUSE,LightDiffuse);//设置漫反射光glEnable(GL_LIGHTING);//打开光照glEnable(GL_LIGHT1);//打开光源1//载入纹理glEnable(GL_TEXTURE_2D);//开启2D纹理映射MakeTexture(skyImg,&texture;[0]);MakeTexture(sunImg,&texture;[1]);MakeTexture(rayImg,&texture;[2]);MakeTexture(mercuImg,&texture;[3]);MakeTexture(venusImg,&texture;[4]);MakeTexture(earthImg,&texture;[5]);MakeTexture(marsImg,&texture;[6]);MakeTexture(jupiterImg,&texture;[7]);MakeTexture(saturnImg,&texture;[8]);MakeTexture(uranusImg,&texture;[9]);MakeTexture(neptuneImg,&texture;[10]);MakeTexture(moonImg,&texture;[11]);quadric=gluNewQuadric();//建立一个曲面对象指针gluQuadricTexture(quadric,GLU_TRUE);//建立纹理坐标gluQuadricDrawStyle(quadric,GLU_FILL);//面填充}voidDisplay(void){glLoadIdentity();//设置观察点的位置和观察的方向gluLookAt(viewer[0],viewer[1],viewer[2],viewer[3],viewer[4],-5,0,1,0);//摄像机x,摄像机y,摄像机z,目标点x,目标点y,目标点z,摄像机顶朝向x,摄像机顶朝向y,摄像机顶朝向z//获得系统时间使太阳系有动态效果g_dCurrentTime=timeGetTime();g_fElpasedTime=(float)((g_dCurrentTime-g_dLastTime)*0.0005);g_dLastTime=g_dCurrentTime;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_MODELVIEW);//指定GL_MODELVIEW是下一个矩阵操作的目标glTranslatef(0.0f,0.0f,-5.0f);//将坐标系移入屏幕5.0fglRotatef(10,1.0f,0.0f,0.0f);//将坐标系绕x轴旋转10度glEnable(GL_LIGHT0);//打开光源0/**********************************绘制背景星空********************************************/glPushMatrix();//当前模型矩阵入栈glTranslatef(-10.0f,3.0f,0.0f);glRotatef(angle_Z,0.0f,0.0f,1.0f);glEnable(GL_TEXTURE_2D);glBindTexture(GL_TEXTURE_2D,texture[0]);//星空纹理glBegin(GL_QUADS);glNormal3f(0.0f,0.0f,1.0f);glTexCoord2f(0.0f,0.0f);glVertex3f(-50.0f,-50.0f,-50.0f);glTexCoord2f(6.0f,0.0f);glVertex3f(50.0f,-50.0f,-50.0f);glTexCoord2f(6.0f,6.0f);glVertex3f(50.0f,50.0f,-50.0f);glTexCoord2f(0.0f,6.0f);glVertex3f(-50.0f,50.0f,-50.0f);glEnd();glBegin(GL_QUADS);glNormal3f(0.0f,0.0f,-1.0f);glTexCoord2f(6.0f,6.0f);glVertex3f(-50.0f,-50.0f,50.0f);glTexCoord2f(0.0f,6.0f);glVertex3f(50.0f,-50.0f,50.0f);glTexCoord2f(0.0f,0.0f);glVertex3f(50.0f,50.0f,50.0f);glTexCoord2f(6.0f,0.0f);glVertex3f(-50.0f,50.0f,50.0f);glEnd();glBegin(GL_QUADS);glNormal3f(0.0f,1.0f,0.0f);glTexCoord2f(0.0f,0.0f);glVertex3f(-50.0f,-50.0f,-50.0f);glTexCoord2f(6.0f,6.0f);glVertex3f(50.0f,-50.0f,50.0f);glTexCoord2f(6.0f,0.0f);glVertex3f(50.0f,-50.0f,-50.0f);glTexCoord2f(0.0f,6.0f);glVertex3f(-50.0f,-50.0f,50.0f);glEnd();glBegin(GL_QUADS);glNormal3f(0.0f,-1.0f,0.0f);glTexCoord2f(6.0f,6.0f);glVertex3f(-50.0f,50.0f,-50.0f);glTexCoord2f(0.0f,0.0f);glVertex3f(50.0f,50.0f,50.0f);glTexCoord2f(0.0f,6.0f);glVertex3f(50.0f,50.0f,-50.0f);glTexCoord2f(6.0f,0.0f);glVertex3f(-50.0f,50.0f,50.0f);glEnd();glBegin(GL_QUADS);glNormal3f(1.0f,0.0f,0.0f);glTexCoord2f(0.0f,0.0f);glVertex3f(-50.0f,-50.0f,-50.0f);glTexCoord2f(6.0f,6.0f);glVertex3f(-50.0f,50.0f,50.0f);glTexCoord2f(0.0f,6.0f);glVertex3f(-50.0f,-50.0f,50.0f);glTexCoord2f(6.0f,0.0f);glVertex3f(-50.0f,50.0f,-50.0f);glEnd();glBegin(GL_QUADS);glNormal3f(-1.0f,0.0f,0.0f);glTexCoord2f(6.0f,6.0f);glVertex3f(50.0f,-50.0f,-50.0f);glTexCoord2f(0.0f,0.0f);glVertex3f(50.0f,50.0f,50.0f);glTexCoord2f(6.0f,0.0f);glVertex3f(50.0f,-50.0f,50.0f);glTexCoord2f(0.0f,6.0f);glVertex3f(50.0f,50.0f,-50.0f);glEnd();glPopMatrix();//当前模型矩阵出栈/**********************************绘制太阳************************************************/glBindTexture(GL_TEXTURE_2D,texture[2]);//光晕纹理glEnable(GL_BLEND);//开启混合glDisable(GL_DEPTH_TEST);//关闭深度测试//绘制太阳光晕glDisable(GL_LIGHTING);//关闭光照glBlendFunc(GL_SRC_ALPHA,GL_ONE);//半透明混合函数glColor4f(1.0f,0.5f,0.0f,0.5f);//设置RGBA值glBegin(GL_QUADS);glNormal3f(0.0f,0.0f,1.0f);glTexCoord2f(0.0f,0.0f);glVertex3f(-1.0f,-1.0f,0.0f);glTexCoord2f(1.0f,0.0f);glVertex3f(1.0f,-1.0f,0.0f);glTexCoord2f(1.0f,1.0f);glVertex3f(1.0f,1.0f,0.0f);glTexCoord2f(0.0f,1.0f);glVertex3f(-1.0f,1.0f,0.0f);glEnd();glDisable(GL_BLEND);//关闭混合glEnable(GL_DEPTH_TEST);glEnable(GL_LIGHTING);//开启光照glLightfv(GL_LIGHT1,GL_POSITION,LightPosition);//设置光源1位置glBindTexture(GL_TEXTURE_2D,texture[1]);//太阳纹理//将坐标系绕Y轴旋转fSunSpin角度,控制太阳自转glRotatef(fSunSpin,0.0,1.0,0.0);gluSphere(quadric,0.3f,32,32);//绘制太阳球体/**********************************绘制水星************************************************/glDisable(GL_LIGHT0);glEnable(GL_TEXTURE_2D);//开启纹理glPushMatrix();//当前模型视图矩阵入栈//将坐标系绕Y轴旋转fMercuOrbit角度,控制水星公转glRotatef(fMercuOrbit,0.0f,1.0f,0.0f);glRotatef(-90.0f,1.0f,0.0f,0.0f);//将坐标系绕X轴旋转-90度glTranslatef(0.5f,0.0f,0.0f);//将坐标系右移0.5fglBindTexture(GL_TEXTURE_2D,texture[3]);//水星纹理//将坐标系绕Z轴旋转fMercuSpin角度控制水星自转glRotatef(fMercuSpin,0.0f,0.0f,1.0f);gluSphere(quadric,0.04f,32,32);//水星球体glPopMatrix();//当前模型视图矩阵出栈//绘制轨道glBegin(GL_LINE_LOOP);for(angle=0;angle=-6.0)viewer[0]-=0.5;break;case'u':case'U':if(viewer[1]=-6.0)viewer[1]-=0.1;break;case'+':case'='://加速,减速,暂停g_fSpeedmodifier+=1.0f;glutPostRedisplay();break;case'':g_bOrbitOn=!g_bOrbitOn;glutPostRedisplay();break;case'-'://按'-'减小运行速度g_fSpeedmodifier-=1.0f;glutPostRedisplay();break;caseVK_ESCAPE://按ESC键时退出exit(0);break;default:break;}}voidspecial_keys(ints_keys,intx,inty){switch(s_keys){caseGLUT_KEY_F1://按F1键时切换窗口/全屏模式if(isFullScreen){glutReshapeWindow(WIN_WIDTH,WIN_HEIGHT);glutPositionWindow(30,30);isFullScreen=FALSE;}else{glutFullScreen();isFullScreen=TRUE;}break;caseGLUT_KEY_RIGHT://视角上下左右旋转if(viewer[3]=-3.0)viewer[3]-=0.1;break;caseGLUT_KEY_UP:if(viewer[4]=-4.5)viewer[4]-=0.1;break;default:break;}}voidmouse(intbtn,intstate,intx,inty)//远近视角{if(btn==GLUT_RIGHT_BUTTON&&state==GLUT_DOWN)viewer[2]+=0.3;if(btn==GLUT_LEFT_BUTTON&&state==GLUT_DOWN&&viewer;[2]>=-3.9)viewer[2]-=0.3;}voidLoadBmp(char*filename,TEXTUREIMAGE*textureImg)//载入图片{inti,j;FILE*file;BMPFILEHEADERbmpFile;BMPINFOHEADERbmpInfo;intpixel_size;//初始化纹理数据textureImg->imgWidth=0;textureImg->imgHeight=0;if(textureImg->data!=NULL){delete[]textureImg->data;}//打开文件file=fopen(filename,"rb");if(file==NULL){return;}//获取文件头rewind(file);fread(&bmpFile;,sizeof(BMPFILEHEADER),1,file);fread(&bmpInfo;,sizeof(BMPINFOHEADER),1,file);//验证文件类型if(bmpFile.bfType!=0x4D42){return;}//获取图像色彩数pixel_size=bmpInfo.biBitCount>>3;//读取文件数据textureImg->data=newunsignedchar[bmpInfo.biWidth*bmpInfo.biHeight*pixel_size];for(i=0;idata+(i*bmpInfo.biWidth+j)*pixel_size+2,sizeof(unsignedchar),1,file);//绿色分量fread(textureImg->data+(i*bmpInfo.biWidth+j)*pixel_size+1,sizeof(unsignedchar),1,file);//蓝色分量fread(textureImg->data+(i*bmpInfo.biWidth+j)*pixel_size+0,sizeof(unsignedchar),1,file);//Alpha分量if(pixel_size==4){fread(textureImg->data+(i*bmpInfo.biWidth+j)*pixel_size+3,sizeof(unsignedchar),1,file);}}}//记录图像相关参数textureImg->imgWidth=bmpInfo.biWidth;textureImg->imgHeight=bmpInfo.biHeight;textureImg->byteCount=pixel_size;fclose(file);}//程序主函数voidmain(intargc,char**argv){//读图片LoadBmp("Picture//Sky.bmp",&skyImg;);LoadBmp("Picture//Sun.bmp",&sunImg;);LoadBmp("Picture//Ray.bmp",&rayImg;);LoadBmp("Picture//Mercu.bmp",&mercuImg;);LoadBmp("Picture//Venus.bmp",&venusImg;);//金星LoadBmp("Picture//Earth.bmp",&earthImg;);LoadBmp("Picture//Mars.bmp",&marsImg;);//火星LoadBmp("Picture//Jupiter.bmp",&jupiterImg;);//木星LoadBmp("Picture//Saturn.bmp",&saturnImg;);//土星LoadBmp("Picture//Uranus.bmp",&uranusImg;);//天王星LoadBmp("Picture//Neptune.bmp",&neptuneImg;);//海王星LoadBmp("Picture//Moon.bmp",&moonImg;);glutInit(&argc;,argv);//初始化GLUT库glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH);//初始化显示模式glutInitWindowSize(WIN_WIDTH,WIN_HEIGHT);//初始化窗口大小glutInitWindowPosition(20,20);//初始化窗口位置GLuintwindow=glutCreateWindow(WIN_TITLE);//建立窗口InitGL();//初始化OpenGLglutDisplayFunc(Display);glutReshapeFunc(Reshape);glutKeyboardFunc(keyboard);glutSpecialFunc(special_keys);glutMouseFunc(mouse);glutIdleFunc(Display);//设置窗口空闲时的处理函数glutMainLoop();//进入事件处理循环}
2025/6/8 20:47:10 3.53MB 三维动画 模拟太阳系
1
本源码包含公众号菜单初始化开发,菜单事件开发,普通token和网页授权token开发工具类,js_ticket获取和缓存,获取openid开发,公众号网络请求封装,xml格式转换工具类,文件上传工具类,关注事件/取消关注事件开发,模板消息等工具类源码
1
共 679 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡