📄 9924.txt
字号:
End If
End Function
Function RegSetStringValue(ByVal hKey As Long, ByVal strValueName As String,
ByVal strData As String, Optional ByVal fLog) As Boolean
Dim lResult As Long
On Error GoTo 0
lResult = OSRegSetValueEx(hKey, strValueName, 0&, REG_SZ, ByVal strData,
LenB(StrConv(strData, vbFromUnicode)) + 1)
If lResult = 0 Then
RegSetStringValue = True
Else
RegSetStringValue = False
End If
End Function
Function StripTerminator(ByVal strString As String) As String
Dim intZeroPos As Integer
intZeroPos = InStr(strString, Chr$(0))
If intZeroPos > 0 Then
StripTerminator=Left$(strString, intZeroPos - 1)
Else
StripTerminator = strString
End If
End Function
Function RegQueryStringValue(ByVal hKey As Long, ByVal strValueName As String,
strData As String) As Boolean
Dim lResult As Long
Dim lValueType As Long
Dim strBuf As String
Dim lDataBufSize As Long
RegQueryStringValue = False
On Error GoTo 0
lResult = OSRegQueryValueEx(hKey, strValueName, 0&, lValueType, ByVal 0&,
lDataBufSize)
If lResult = ERROR_SUCCESS Then
If lValueType = REG_SZ Then
strBuf = String(lDataBufSize, “”)
lResult = OSRegQueryValueEx(hKey, strValueName, 0&, 0&, ByVal strBuf,
lDataBufSize)
If lResult = ERROR_SUCCESS Then
RegQueryStringValue = True
strData = StripTerminator(strBuf)
End If
End If
End If
End Function
5、双击Command1,编写Click事件代码。
Private Sub Command1_Click()
Dim hKey As Long
Dim MyReturn As Long
Dim MyData As String
MyReturn = OSRegOpenKey(HKEY_CLASSES_ROOT, “.exc”, hKey)
MyReturn=RegQueryStringValue(hKey,“”,MyData)
MyReturn=OSRegOpenKey(HKEY_CLASSES_ROOT, MyData+“\shell\open\command”,hKey)
MyReturn = RegSetStringValue(hKey,“”,“c:\visio.exe 1%”, False)
If MyReturn Then
MsgBox “改变文件打开方式成功!”, vbInformation, “请注意”
Else
MsgBox “改变文件打开方式失败!”, vbExclamation, “请注意”
End If
OSRegCloseKey (hKey)
End Sub
6、按F5运行程序,在简体中文Windows95/NT/98、VB5.0/6.0环境中调试通过。
㈡利用Delphi编程
1、在Delphi3.0 IDE中,新建工程Project1,在Form1上添加按钮Button1。
2、在uses子句中添加Registry。
3、双击Button1,编写Click事件代码。
procedure TForm1.Button1Click(Sender: TObject);
var
MyRegistry : TRegINIFile;
Return:string;
begin
try
MyRegistry := TRegINIFile.Create(`');
MyRegistry.RootKey := HKEY_CLASSES_ROOT;
Return:=MyRegistry.ReadString (`.gid',`',`No! Not Found the Key!');
MyRegistry.WriteString(Return,`',`这只是一个演示!');
MyRegistry.WriteString(Return+`\DefaultIcon',`',`c:\visio.exe,1');
MyRegistry.WriteString(Return+`\shell\open\command',`',`c:\visio.exe %1');
finally
MyRegistry.Free;
end;
ShowMessage(`改变文件打开方式成功!');
end;
4、按F9运行程序,在简体中文Windows95/NT/98、Delphi3.0/4.0环境中调试通过。
****************************************************************
在Foxpro中恢复已删除数据
山东省莱阳中心医院微机中心(265200) 方建军
对Foxpro数据库中的数据进行删除大约有以下三种方法:
·在DOS下用Del命令或在Foxpro中用DELETE FILE命令直接删除数据库文件。
·在Foxpro中打开数据库,用PACK命令清除已作删除标记的记录。
·在Foxpro中打开数据库,用ZAP命令删除数据库中的所有记录。
对于第一种方法,可用DOS提供的UNDELETE命令直接恢复。对于第二种方法,由于
Foxpro 删除数据的过程是先将未作删除标记的记录及库头拷贝成一个新文件,然
后再删除原数据库 文件,所以,对用PACK命令误删除的数据仍然可用DOS提供的
UNDELETE命令直接恢复。对于第 三种方法,有些报刊报导过用PCTools等工具软
件恢复,但方法繁琐,不适合普通读者理解和使 用,而且若操作不当有可能破坏其
他数据。笔者在充分研究了Foxpro数据库结构的基础上,利 用Foxpro的低级格式
文件编制了以下通用恢复程序。
该程序的关键在于恢复数据库文件的大小和数据库中的记录数。文件的大小可由
函数F CHSIZE()直接恢复;记录数可根据数据库的大小和记录的长度求得,它存放
在数据库头部的第 5~8个字节,且低位字节在前,高位字节在后,用二进制数表示
(一般Foxpro数据库的书籍中均 有介绍,在此不再赘述)。程序清单如下:
clear
clear all
set talk off
name=space(12)
size=0
@10,20 say‘请输入预恢复数据库的全名:'get name
@12,20 say‘请输入预恢复数据库的大小:'get sizepict‘9999999999'
read
use &name
head=header () &&求数据库的头部所占的字节数
reclen=recsize() &&求数据库中记录的长度
jls=int((size-head-1)/reclen) &&根据数据库大小和记录长度求得记录数
zjs1=chr(mod(jls,256)) &&数据库头第5个字节的内容
jls=int((jls/256)
zjs2=chr(mod(jls,256)) &&数据库头第6个字节的内容
jls=int(jls/256)
zjs3=chr(mod(jls,256)) &&数据库头第7个字节的内容
jls=int(jls/256)
zis4=chr(mod(jls,256)) &&数据库头第8个字节的内容
jls=int(jls/256)
use
handle=fopen(name,2)
=fchsize(handle,size) &&改变文件的大小
=fclose(handle)
handle=fopen(name,2)
=fseek(handle,4,0)
=fwrite(handle,zjs1) &&改变文件的记录数
=fwrite(handle,zjs2)
=fwrite(handle,zjs3)
=fwrite(handle,zjs4)
=fclose(handle)
delete file &name
filename=‘?'+alltrim(substr(name,2,10))
run undelete &filename/all
run ren &filename &name
retu
使用该程序时,首先输入误删数据库的全名,然后输入删除以前数据库文件的大小
(若知 道文件大小直接输入即可恢复全部数据;或不知道文件大小可先输入一估
计值,用该估计值恢 复后,打开数据库查看数据,若数据恢复不全,说明估计值过
小,用ZAP重新删除数据,增大估计 值重新恢复直至数据全部恢复为止)。
该程序在LX-P5/75PCI机上、DOS6.22下、Foxpro2.6 for DOS环境下运行通过,有
兴趣的 读者不妨一试。
****************************************************************
用Foxpro 实现爆炸式窗口
南昌铁路材料总厂计算机室(330002) 孙勇
了解Foxpro程序设计的人都知道,在设计窗口显示过程中,往往要经过定义窗口、
激活 窗口、显示、关闭或释放窗口这几步,重复写这些步骤显得非常繁琐,而且
界面不统一、缺 乏动感。
在实践中我参照一些优秀的西文软件界面(如NORTON等),显示爆炸式窗口,用Foxpro
提供的窗口功能便可很方便地实现。该程序嵌入开发的应用程序中,使用效果很好。
下面简单介绍设计原理:首先,由调用参数给出窗口坐标,计算出窗口中心点。由于
屏幕处于文本方式,为了能达到显示的平滑效果,程序中要经过判断是"扁方"或"长
方"形,再由小 到大依次定义窗口,然后激活窗口,而退出则由大到小将窗口依次释
放。
以下是显示爆炸窗口的原程序,本程序在COMPAQ 4/66上运行通过。
CLEA &&调用演示
SET TALK OFF
DO popwin WITH 'o',3,0,22,79,'爆炸窗口演示','按任意键退出'
wait ''
do popwin with 's',3,0,22,79
RETU
参数说明:
mark———打开,关闭标志
ar1,ac1,ar2,ac2———窗口坐标
tt———窗口标题
ft———窗口注脚
PROC popwin
PARA mark,ar1,ac1,ar2,ac2,tt,ft
PRIV POW1,POW2,COL1,COL2,i,k,num
STOR(ar1+ar2)/2 TO ROW1,ROW2
STOR(ac1+ac2)/2 to COL1,COL2
IF(ar2-ar1)/2<(ac2-ac1)/2
num=(ac2-ac1)/2
ELSE
num=(ar2-ar1)/2
ENDI
IF mark='o' &&打开
FOR i=1 TO num
k=ltri(str(i))
DO CASE
CASE num=(ac2-ac1)/2.AND.COL1>ac1+(ar2-ar1)/2 &&扁方形
ROW1=(ar1+ar2)/2-1
ROW2=(ar1+ar2)/2+1
COL1=COL1-1 &&提高速度可减2
COL2=COL2+1
CASE num=(ar2-ar1)/2.AND.ROW1>ar1+(ac2-ac1)/2 &&长方形
COL1=(ac1+ac2)/2-1
COL2=(ac1+ac2)/2+1
ROW1=ROW1-1
ROW2=ROW2+1
OTHE
ROW1=ROW1-1
COL1=COL1-1
ROW2=ROW2+1
COL2=COL2+1
ENDC
DEFI WIND zzz&k FROM ROW1,COL1 TO ROW2,COL2;
TITL tt FOOT ft SHAD DOUB COLO SCHE 8
ACTI WIND zzz&k
ENDF
ELSE &&关闭
FOR i=num to 0 STEP -1
k=ltri(str(i))
IF i>=num-3
s=inkey(0.0001) &&延时
ENDI
RELE WIND zzz&k &&释放窗口
ENDF
ENDI
RELE mark,ar1,ac1,ar2,ac2,tt
RETU
****************************************************************
用VC++5.0定制和调用动态链接库
山东省泰安市 杨波
----动态链接库(dll)是包含共享函数库的二进制文件,可以被多个应用程序同时使用。
建立应用程序的可执行文件时,不必将DLL连接到应用程序中,而是在运行时动态装载
DLL,装载时DLL被映射到调用进程的地址空间中。通常我们在调用DLL时所需的DLL文件
必须位于以下三个目录之一:
----(1)Windows的系统目录:\windows\system;
----(2)DOS中path所指出的任何目录;
----(3)程序所在的目录;
一.动态链接库(DLL)结构
----DLL中定义有两种函数:导出函数(export function)和内部函数(internal function),
导出函数可以被其他模块调用,内部函数只能在DLL内部使用。我们在用C++定制DLL文件
时,需要编写的就是包含导出函数表的模块定义文件(.DEF)和实现导出函数功能的C++文
件。下面以Sample.dll为例介绍DEF文件和实现文件的结构:
----1.模块定义文件(.DEF)是由一个或者多个用于描述DLL属性的模块语句组成的文本文
件,每个.DEF文件至少必须包含以下模块定义语句:
第一个语句必须是LIBRARY语句,指出DLL的名字。
EXPORTS语句列出被导出函数的名字。
可以使用DESCRIPTION语句描述DLL的用途(此句可选)。
";"对一行进行注释(可选)
----2.实现文件(.cpp文件为例)
----实现入口表函数的.cpp文件中,包含DLL入口点处理的API函数和导出函数的代码。
二.创建Sample.dll
----1.首先创建Sample.dll的工程,启动VC++5.0按以下步骤生成DLL工程:
在菜单中选择File\New\Project
在工程列表中选择Win32 Dynamic-Link Library
在Project Name中输入工程名:Sample
单击Location右边按钮,选择c:\sample目录
单击OK完成,至此已创建了Sample.dll的工程文件
----2.创建Sample.def文件
在菜单中选择File\New\Text File
输入以下完代码后保存文件名"Sample.def"
;Sample.def
;指出DLL的名字Sample,链接器将这个名
字放到DLL导入库中
LIBRARY Sample
;定义导出函数ShowMe()为例
EXPORTS
ShowMe
;def文件结束
----3.创建Sample.cpp
.在菜单中选择File\New\C++ Source File项
.输入以下代码后保存文件名"Sample.cpp"
//Sample.cpp
#include < windows.h >
int ShowMe(void);
//DllEntryPoint为DLL入口点函数,
负责初试化并终止DLL
BOOL WINAPI DllEntryPoint(HINSTANCE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -