让注册表记住VFP应用程序的使用次数

FoxPro(VFP) 进阶指南:深入解析Visual FoxPro系统信息(SYS)函数的实战应用 本文深入解析Visual FoxPro中SYS函数的实战应用,涵盖系统环境侦察、程序调试、性能优化与高级技巧。通过获取磁盘信息、打印机状态、调用栈追踪、内存管理及Rushmore优化等具体案例,帮助开发者利用SYS函数解决兼容性、错误定位和资源管理等复杂问题,提升VFP应用的健壮性与效率。 阅读详情
  注册表是Windows操作系统中保存系统的硬件信息、应用程序信息和用户信息的一个数据库,它为应用程序提供了保存参数设置的最佳场所。在Windows操作系统中,当我们运行“RegEdit.exe”文件,从打开的注册表编辑窗口中可以看出,注册表由左右两个部分组成: 左侧各项目的第一层称为注册表的主键,双击各主键时延伸出的各键称之为子键;窗口的右侧是各子键的键值,每一个子键都有其相应的默认值和用不同的键值名表示的键值(其中默认值的键值名为一空串)。

  在VFP应用程序中读写注册表数据需借助WIN32API(即Windows 32位应用程序接口)函数,为了像使用其它VFP函数一样调用WIN32API函数,必须先用DECLARE命令对每一个被调用函数进行注册(声明),其格式为DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName] ;

  [cParamType1 [@] ParamName1,cParamType2 [@] ParamName2, ...]

  其中各参数的意义为:①cFunctionType为函数的返回值类型,可是SHORT、INTEGER或LONG、SINGLE、DOUBLE、STRING之一,如果函数没有返回值,则省略cFunctionType;②FunctionName指出被调用WIN32API函数名,请注意大小写,否则VFP将在.DLL库(LibraryName)中搜索不到该函数而出错, 如果该函数名与VFP的函数同名,可用AS子句另取一个合法的VFP函数名;③LibraryName指定外部Windows .DLL的名称,如取WIN32API,则VFP就在KERNEL32.DLL, GDI32.DLL, USER32.DLL, MPR.DLL和ADVAPI32.DLL中搜索FunctionName;④cParamType指定各参数的类型,可为INTEGER或LONG、SINGLE、DOUBLE、STRING之一,在VFP中向函数传递参数的方式有两种:按值传递和按名(引用)传递,前者只把变量(也可为常数)的值传给函数,因而在函数内部不能修改该变量的值;后者是把变量(不能用常数)的地址传给函数,因而在函数内部可修改该变量的值,适用于需要在函数内部修改该变量的值或在变量中放置返回值的情况。VFP中如在变量名前加“@”表示按引用传递参数,不加“@”表示按值传递参数。至于本示例程序中各参数是按引用传递还是按值传递,从DECLARE命令和函数调用语句中一看便知。
  下面的示例程序每运行一次,就将注册表中HKEY_CURRENT_USER/SOFTWARE/LYTAPP子键的TimesForUse名下的值加1,直到运行12次为止:

* 各主键与一个整数(INTEGER)值相对应,即:

#DEFINE HKEY_CLASSES_ROOT bitset(0,31) &&-2147483648
#DEFINE HKEY_CURRENT_USER bitset(0,31)+1 &&-2147483647
#DEFINE HKEY_LOCAL_MACHINE bitset(0,31)+2 &&-2147483646
#DEFINE HKEY_USER bitset(0,31)+3 &&-2147483645
#DEFINE HKEY_CURRENT_CONFIG bitset(0,31)+5 &&-2147483643
#DEFINE HKEY_DYN_DATA bitset(0,31)+6 &&-2147483642

* 键值的数据类型:1-字符串,3-二进制,4-整数

#DEFINE REG_SZ 1
#DEFINE REG_BINARY 3
#DEFINE REG_DWORD 4

* 当以下API函数返回0时,操作成功。

DECLARE Integer RegOpenKey IN Win32API ;
Integer nHKey, String @cSubKey, Integer @nResult

DECLARE Integer RegCreateKey IN Win32API ;
Integer nHKey, String @cSubKey, Integer @nResult

DECLARE Integer RegSetValueEx IN Win32API ;
Integer hKey, String lpszValueName, Integer dwReserved,;
Integer fdwType, String lpbData, Integer cbData

DECLARE Integer RegQueryValueEx IN Win32API ;
Integer nHKey, String lpszValueName, Integer dwReserved,;
Integer @lpdwType,string @lpbData, Integer @lpcbData

* DECLARE Integer RegDeleteKey IN Win32API ;
* Integer nHKey, String @cSubKey

* DECLARE Integer RegDeleteValue IN Win32API ;
* Integer nHKey, String cSubKey

* DECLARE Integer RegCloseKey IN Win32API ;
* Integer nHKey

csubkey='Software/lytapp'
nresult=0
if regopenkey(HKEY_CURRENT_USER,@csubkey,@nresult)#0
RegCreateKey(HKEY_CURRENT_USER,csubkey,@nresult)
endif

* 在nresult中存放了指向子键“HKEY_CURRENT_USER/Software/lytapp”的长整数值

lpdwtype=0
lpbdata=space(256)
lpcbdata=len(lpbdata)
if RegQueryValueEx(nresult,'TimesForUse',0,@lpdwtype,@lpbdata,@lpcbdata)=0
do case
case lpdwtype=REG_SZ
lpbdata=left(lpbdata,lpcbdata-1)
if val(lpbdata)<12
lpbdata=alltrim(str(val(lpbdata)+1))
messagebox('本程序在未注册之前只能使用12次!'+CHR(13)+' 您现在是第'+ ;
lpbdata+'次使用本程序。')
lpbdata=lpbdata+chr(0)
cbdata=len(lpbdata)
RegSetValueEx(nresult,'TimesForUse',0,REG_SZ,lpbdata,cbdata)
else
messagebox(" 程序已过期作废!"+CHR(13)+" 请与作者联系注册事宜。")
endif
case lpdwtype=REG_BINARY
messagebox('该键值为二进制数据。')
case lpdwtype=REG_DWORD
messagebox('该键值为长整数数据,请用 NN=0'+CHR(13)+'for i=1 to 4'+CHR(13)+ ;
'NN=NN+VAL(SUBSTR(lpbdata,i,1)*16^(2*i-2)'+CHR(13)+ ;
'endfor 读取此数值。')
otherwise
messagebox('未知数据!')
endcase
else
lpbdata='1'
messagebox('本程序在未注册之前只能使用12次!'+CHR(13)+' 您现在是第'+lpbdata+'次使用本程序。')
lpbdata=lpbdata+chr(0)
RegSetValueEx(nresult,'TimesForUse',0,REG_SZ,lpbdata,2)
endif

  * 警告:当用户不熟悉注册表时最好不要修改其中的内容,否则,可能造成系统的崩溃。若用户想对注册表修改,建议修改前最好将注册表备份。
Windows下Nginx安装启动与反向代理配置指南 Nginx作为高性能反向代理服务器,是Web架构中连接客户端与应用服务的核心组件。其事件驱动模型在Linux环境下表现出色,但在Windows开发场景中同样具备实用价值。许多开发者需要在本地复现生产环境行为,比如静态资源托管、接口转发或负载均衡演练,这都依赖对Nginx配置语法的深入理解。然而,Windows版Nginx在启动方式、目录结构和进程管理上存在差异,容易导致配置失效或端口冲突。掌握其安装路径、命令操作和常见排错方法,能让开发联调更贴近线上环境。从配置语法验证到反向代理转发,本文系统梳理了Wind 阅读详情

相关推荐

Windows 7下VC6兼容性实战:解决MFC遗留项目维护难题

在软件工程领域,向后兼容性是维护历史遗留系统的核心挑战之一,尤其在工业控制、嵌入式上位机等传统桌面软件领域。其技术原理涉及操作系统API演进、运行时库依赖以及开发环境与新版系统的交互机制。解决这类兼容性问题具有重要的技术价值,能显著降低项目迁移成本与风险,保障关键业务系统的稳定延续。典型的应用场景包括维护基于MFC框架的测控软件、数据采集平台等历史代码库。本文聚焦于Visual C++ 6.0这一经典开发环境,针对其在Windows 7系统下遇到的IDE闪退、调试器崩溃等典型兼容性问题,提供从安装配置、环境

weixin_34234721的博客 347

vfp:随windows启动而运行

#define HKEY_LOCAL_MACHINE -2147483646 clear menu all set sysme off Declare Integer RegSetValue In Win32API integer nHkey,STRING cSubKey, integer dwType,string@ lpDatainteger,integer@...

weixin_34192816的博客 137

VS Code配置STM32开发环境:从工具链解耦到稳定调试

嵌入式开发中,IDE选择已从封闭集成走向开放解耦——VS Code作为轻量级通用编辑器,通过GCC编译器、OpenOCD调试器与Cortex-Debug插件的协同,构建出高可复现、易CI/CD、强扩展性的STM32开发工作流。其核心价值在于将编译、烧录、调试等环节标准化为JSON配置与CLI命令,摆脱Keil等商业IDE的授权与生态束缚。技术原理上依赖ARM Cortex-M系列的GDB协议支持、SWD/JTAG底层通信机制及CMake跨平台构建系统;在工业控制、智能硬件等需多团队协作与持续集成的场景中优势

weixin_34034670的博客 321

VFP_读写注册表的自定义函数

WAIT WINDOW registry(1,3,"SOFTWARE\Microsoft\visualfoxpro",,"abc","19821207",1)***FOR VFP ***以下读写注册表的自定义函数:*------------------------------------------------*操作注册表*语法:*创建子键:registry(0,主键序号,子键名,新建子键名)...

weixin_34361881的博客 318

ARM Compiler 5.01 b94 Linux安装包:含armcc/armasm/armlink/fromelf等全套工具链

适用于Linux系统的ARM Compiler 5.01第94次构建版本,专为ARM DS-5或已有ARM Compiler 5环境升级设计。安装前需确认已激活对应许可证。支持与同系列其他功能版本(如5.00、5.02)共存,但不支持同一功能版本下的多个更新包(如5.01u1和5.01u2)并行安装。压缩包内含完整命令行工具集:C编译器armcc、C++编译器armcpp、链接器armlink、ARM汇编器armasm、ELF格式转换工具fromelf、静态库归档工具armar,以及配套头文件和标准C/C+

android的专栏 257

vfp 读写注册表(有例子)

vfp读写注册表vfp读写注册表vfp读写注册表

ARM交叉编译核心原理:ABI、架构与工具链协同实战

ARM交叉编译不是简单替换gcc前缀,而是涉及指令集架构(ARMv7/ARMv8)、应用二进制接口(ABI)和GNU工具链的深度协同。从基础概念看,ARMv8-A引入64位寄存器、AAPCS64调用约定与16字节栈对齐;ABI如gnueabihf中的hf(hard-float)直接决定浮点性能与.so兼容性;工具链版本差异(如GCC 9.3 vs 13.2)引发libstdc++二进制不兼容,导致Qt或nginx移植失败。其技术价值在于保障跨平台二进制可执行性与硬件级性能释放,广泛应用于嵌入式Linux开发

weixin_33928137的博客 248

不只是CPU主频:深入解析英飞凌Aurix TC3xx各外设时钟树(CAN、以太网、Flash时序如何配置)

本文深入解析英飞凌Aurix TC3xx系列微控制器的外设时钟树配置,涵盖CAN、以太网和Flash时序的优化方法。通过详细分析时钟系统架构、关键外设配置及多外设协同设计策略,帮助工程师实现高性能汽车电子控制单元(ECU)开发。特别关注系统时钟的灵活配置与EMC优化技巧,提升系统实时性和可靠性。

weixin_29189373的博客 400

一步一步安装VB.Net(图片较多,请稍等)

如果你得到的6张CD,只有前面3张是有用的,后面3张是2000年6月的MSDN(有VB6的资料,E文) ?!! 一。首先请先安装office sr1 找下个空间足够的磁盘(至少1.5M)。打开资源管理器,新建一个文件夹,把磁盘的所有目录拖到新建文件夹。使根目录除 了新建文件夹外没有别的目录,拷贝CD 1到根目录,拷贝CD 2到根目录,如果弹出对话框问是否覆盖,选择覆盖即可。 二。查...

weixin_30621711的博客 106

从AD到HFSS:Gerber文件驱动的PCB三维电磁仿真全流程解析

本文详细解析了从AD到HFSS的Gerber文件驱动的PCB三维电磁仿真全流程,重点介绍了Gerber文件作为桥梁的重要性、AD端Gerber文件导出实战指南、HFSS 3D Layout导入技巧及高级问题排查方法。通过实际案例和技巧分享,帮助工程师高效完成PCB电磁仿真,提升设计验证效率。

weixin_33735077的博客 260

Unity物理引擎实战:从刚体重心到碰撞体,打造真实不倒翁交互

刚体(Rigidbody)是Unity物理系统的核心组件,它定义了游戏对象的物理属性,如质量、阻力和碰撞响应。其原理基于牛顿力学,通过物理引擎(如PhysX)实时计算物体的运动状态。在游戏开发中,刚体的价值在于能够模拟真实世界的物理行为,为玩家提供沉浸式的交互体验。碰撞体(Collider)则定义了物体的形状边界,用于检测与其他物体的接触。通过精细调整刚体的重心(Center of Mass)和碰撞体形状,开发者可以模拟出各种有趣的物理现象,例如低重心物体的动态平衡。这在休闲游戏、物理玩具模拟等场景中尤为实

weixin_33976326的博客 355

如何在程序执行前插入可执行代码(算是吾爱的作业吧,活学活用)

0x01准备(爱盘可以下载) 1.OD 2.stud_PE 0x02 给程序增加一个为xxx的区段 也可以在程序空着的地方添加程序不...

墨鱼菜鸡 604

【vLLM-性能洞察】基于Ascend Profiler的端到端推理瓶颈定位与优化实践

本文详细介绍了如何利用Ascend Profiler对vLLM-Ascend大模型推理服务进行端到端的性能瓶颈定位与优化。通过实战案例,阐述了从数据采集、可视化分析到诊断低效算子、内存管理、计算通信重叠及框架调度等常见瓶颈的全过程,为基于昇腾NPU的AI推理性能调优提供了系统性的方法论和实用工具指南。

cc789的博客 521

一步一步安装VB.Net(图片较多,请稍等) (转)

一步一步安装VB.Net(图片较多,请稍等) (转)[@more@] 如果你得到的6张CD,只有前面3张是有用的,后面3张是2000年6月的MSDN(有vb6的资料,E文) ?!! 一。首先请先安装O...

congmi8078的博客 204

深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计

大家好,我是微学AI ,今天给大家介绍一下深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计。高中数学自适应测试系统旨在通过精准评估学生能力,用最少的题目发现其薄弱环节,并提供定制化的学习计划,帮助学生快速提升成绩。同时,系统结合了AI大模型实现自动判卷、生成报告,减轻教师负担,并支持个性化作业布置,使教学更加高效。学生可以清晰了解自身学习状态,教师也能获得精准的学生画像,实现差异化教学。

微学AI的博客 444

YOLO26改进策略【卷积层】| DWRSeg :高效获取多尺度上下文信息,二次改进C3k2

本文记录的是利用DWR 模块改进 YOLO26 的特征提取部分。(Dilation-wise Residual)通过两步残差流程(区域残差化-语义残差化)与分支化空洞卷积结合,引导解码器处理特征与跳接特征的多尺度精准融合。本文利用模块,通过区域残差化生成简洁区域型特征图以简化融合基础,再通过分支化空洞卷积捕捉多尺度空间上下文,同时依托残差连接保留原始特征信息,对YOLO26中不同尺度目标特征进行针对性强化、抑制无效背景特征干扰,在特征融合阶段实现多尺度语义与细节信息的高效互补,避免传统多感受野卷积的冗余计算

Limiiiing的博客 159

Visual Studio 6.0 镜像下载与安装全攻略:老系统维护必备

软件开发工具的演进往往让旧版环境成为维护历史项目的拦路虎。Visual Studio 6.0 作为上世纪九十年代末的经典开发套件,至今仍是大量遗留系统的构建基础。理解其镜像文件的构成、版本差异以及安装原理,是复现老环境的核心前提。通过合法渠道获取完整ISO,借助虚拟机实现纯净隔离,配合正确的兼容性设置与组件选择,能够有效规避安装失败、编译异常等常见问题。无论是企业旧系统维护、教学环境搭建,还是技术档案收藏,掌握这套安装流程都能大幅降低老代码的维护成本。本文基于实际工程经验,系统梳理了Visual Studi

weixin_27791839的博客 248

预编码算法(个人总结)

预编码算法是无线通信系统中的关键技术,通过在发送端对信号进行处理,可以有效减少干扰,提高系统性能。预编码算法在5G、Wi-Fi、卫星通信等领域具有广泛的应用前景,同时,随着深度学习、大规模MIMO和物理层安全等技术的发展,预编码算法的研究将进一步推动无线通信技术的发展。CSI的准确性直接影响到预编码的效果。预编码是一种在发送端对信号进行线性变换的技术,以优化信号的空间分布,使得接收端能够更好地接收和解码信号。预编码算法,特别是基于矩阵分解的预编码算法,计算复杂度较高,限制了其在实际系统中的应用。

年糕的博客 5288

Windows 2000虚拟机中搭建VC++6.0开发环境全攻略

在软件开发和系统维护领域,遗留系统维护和经典开发环境搭建是常见且重要的技术需求。其核心原理在于保持特定历史时期编译器、库文件和操作系统之间的精确兼容性,以确保遗留代码能够正确编译和运行。这一技术对于维护工业控制、金融核心等关键遗留系统具有不可替代的价值,尤其在需要复现特定编译行为或依赖旧版MFC/ATL库的场景中。通过虚拟机技术,可以在现代硬件上安全、隔离地重构Windows 2000与Visual C++ 6.0这一经典组合,有效解决了**环境兼容性**和**系统稳定性**难题。本文详细拆解了从虚拟机配置

huqiyes的专栏 318

Python数据可视化 Pyecharts 制作 Map 地图

大家好,我是Mr数据杨。想象一下,作为一名军师,如诸葛亮或郭嘉,'Map’就如同那战争的沙盘,兵马行动的轨迹,都需要准确的地图作为基础。‘基本设置’,就如同摆设这张战争沙盘,规定棋子的起始位置。‘数据配置选项’和’地图数据项’,就好比是军师们手中的情报,了解各路诸侯的兵力、粮草、地形等重要信息,以便于他们更好地布局。‘Demo’则代表着练兵之地,军师们可以在此基于已有数据,试验各种战术。

Mr数据杨 4万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: vfp对象和类
下一篇: 在VFP中调用API实现拨号上网
vin2000
博客等级 码龄22年 22粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值