vfp中关于取本地 IP的问题?

KQX7381 2012-09-11 01:18:40
LOCAL ipsocket

ipsocket=CREATEOBJECT("MSWinsock.Winsock")
IF TYPE("ipsocket")="O"
WITH ipsocket &&as MSWinsockLib.Winsock
ipaddress=.LocalIP
localhost=.LocalHostName
ENDWITH
MESSAGEBOX("你的IP地址是:"+ipaddress+CHR(13)+CHR(10)+"你的服务器名是:"+localhost)
ELSE
MESSAGEBOX("系统未装winsock控件")
ENDIF
RELEASE ipsocket

在我本机上使用正常,安装到另外 一台机器上出错,提示:找不到MSWinsock.Winsock类定义。怎么办?多谢各位了。
...全文
386 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2012-09-11
  • 打赏
  • 举报
回复
在开发的机器上(安装了VFP)运行正常,而在没安装VFP的机子运行却提示“类别未授权使用”

因为开发的机子安装VFP时,取得了OCX授权,而在未安装VFP的机器上没有取得OCX授权

使用纯代码建立winsock对象,对于开发的那台机器没问题,别的机器都用不了。

所以这不是ocx的注册问题,而是ocx的授权问题。

解决方法:

对于mswinsck.ocx来说,如果想不报错,请不要用纯代码来建立winsock对象,改用可视化,即把这个ocx拖到表单上。

因为可视化建立的winsock连编成EXE时会自动带上授权密钥.



MS 很多控件都有这种设计/运行时授权的限制,要动态创建这些对象,运行的机器上必须有授权许可,而拖入表单中的控件已携带了授权许可,所以不需要。
把下列内容保存到一个 vbctrls.reg 文件中,然后双击它导入注册表,即可拥有动态创建时的授权许可:

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\Licenses]
@="Licensing: Copying the keys may be a violation of established copyrights."

[HKEY_CLASSES_ROOT\Licenses\12B142A4-BD51-11d1-8C08-0000F8754DA1]
@="aadhgafabafajhchnbchehfambfbbachmfmb"

[HKEY_CLASSES_ROOT\Licenses\190B7910-992A-11cf-8AFA-00AA00C00905]
@="gclclcejjcmjdcccoikjlcecoioijjcjnhng"

[HKEY_CLASSES_ROOT\Licenses\1F3D5522-3F42-11d1-B2FA-00A0C908FB55]
@="gcfjdjecpchcncdjpdejijgcrdoijjfcieod"

[HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d]
@="mlrljgrlhltlngjlthrligklpkrhllglqlrk"

[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
@="kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"

[HKEY_CLASSES_ROOT\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905]
@="gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"

[HKEY_CLASSES_ROOT\Licenses\4F86BADF-9F77-11d1-B1B7-0000F8753F5D]
@="iplpwpnippopupiivjrioppisjsjlpiiokuj"

[HKEY_CLASSES_ROOT\Licenses\57CBF9E0-6AA7-11cf-8ADB-00AA00C00905]
@="aahakhchghkhfhaamghhbhbhkbpgfhahlfle"

[HKEY_CLASSES_ROOT\Licenses\6FB38640-6AC7-11cf-8ADB-00AA00C00905]
@="gdjkokgdldikhdddpjkkekgknesjikdkoioh"

[HKEY_CLASSES_ROOT\Licenses\72E67120-5959-11cf-91F6-C2863C385E30]
@="ibcbbbebqbdbciebmcobmbhifcmciibblgmf"

[HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9]

[HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9\11.0]

[HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9\11.0\Retail]
@="sbbcdcprktpjtapmmfdacmupasbhscddncgp"

[HKEY_CLASSES_ROOT\Licenses\78E1BDD1-9941-11cf-9756-00AA00C00908]
@="yjrjvqkjlqqjnqkjvprqsjnjvkuknjpjtoun"

[HKEY_CLASSES_ROOT\Licenses\7C35CA30-D112-11cf-8E72-00A0C90F26F8]
@="whmhmhohmhiorhkouimhihihwiwinhlosmsl"

[HKEY_CLASSES_ROOT\Licenses\80E80EF0-DBBE-11D0-BCE2-00A0C90DCA10]
@="qijimitpmpnpxplpvjnikpkpqoxjmpkpoivj"

[HKEY_CLASSES_ROOT\Licenses\899B3E80-6AC6-11cf-8ADB-00AA00C00905]
@="wjsjjjlqmjpjrjjjvpqqkqmqukypoqjquoun"

[HKEY_CLASSES_ROOT\Licenses\9E799BF1-8817-11cf-958F-0020AFC28C3B]
@="uqpqnqkjujkjjjjqwktjrjkjtkupsjnjtoun"

[HKEY_CLASSES_ROOT\Licenses\B1EFCCF0-6AC1-11cf-8ADB-00AA00C00905]
@="qqkjvqpqmqjjpqjjvpqqkqmqvkypoqjquoun"

[HKEY_CLASSES_ROOT\Licenses\BC96F860-9928-11cf-8AFA-00AA00C00905]
@="mmimfflflmqmlfffrlnmofhfkgrlmmfmqkqj"

[HKEY_CLASSES_ROOT\Licenses\BEA2ED97-562A-4510-974C-C4F20AE429AD]
"1"=hex:d2,00,57,01,18,01,7e,01,de,00,77,01,a5,00,9a,00,e1,00,16,01,9d,00,f1,\
00,4e,01,73,00,30,01,5c,00,23,01,c5,00

[HKEY_CLASSES_ROOT\Licenses\CDE57A55-8B86-11D0-b3C6-00A0C90AEA82]
@="ekpkhddkjkekpdjkqemkfkldoeoefkfdjfqe"

[HKEY_CLASSES_ROOT\Licenses\CEDD4F80-B43C-11cf-837C-00AA00573EDE]
@="gxwaezucfyqpwjgqbcmtsncuhwsnyhiohwxz"

[HKEY_CLASSES_ROOT\Licenses\DC4D7920-6AC8-11cf-8ADB-00AA00C00905]
@="iokouhloohrojhhhtnooiokomiwnmohosmsl"

[HKEY_CLASSES_ROOT\Licenses\E32E2733-1BC5-11d0-B8C3-00A0C90DCA10]
@="kmhfimlflmmfpffmsgfmhmimngtghmoflhsg"

[HKEY_CLASSES_ROOT\Licenses\ED4B87C4-9F76-11d1-8BF7-0000F8754DA1]
@="knlggnmntgggrninthpgmnngrhqhnnjnslsh
十豆三 2012-09-11
  • 打赏
  • 举报
回复
Local oWMI As Object,oLocal As Object,oHARDWARE As Object,object1 As Object,lcCPUID,LcMAC,lcHDID,lcSerial
oWMI=Createobject("WbemScripting.SWbemLocator")
oLocal=oWMI.ConnectServer(".", "root\cimv2")

oHARDWARE=oLocal.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled=1")
For Each object1 In oHARDWARE
LcIP=object1.Properties_('IPAddress').Value
Exit
Endfor
?'IP地址:',LcIP
taohua300 2012-09-11
  • 打赏
  • 举报
回复
以前用的一段代码,复制保存为getip.prg
DO decl

*| typedef struct _MIB_IPADDRTABLE {
*| DWORD dwNumEntries; // number of entries in the table
*| MIB_IPADDRROW table[ANY_SIZE]; // array of IP address entries
*| } MIB_IPADDRTABLE, *PMIB_IPADDRTABLE; total bytes = 4 + undef

*| typedef struct _MIB_IPADDRROW {
*| DWORD dwAddr; // IP address 0:4
*| DWORD dwIndex; // interface index 4:4
*| DWORD dwMask; // subnet mask 8:4
*| DWORD dwBCastAddr; // broadcast address 12:4
*| DWORD dwReasmSize; // re-assembly size 16:4
*| unsigned short unused1; // not currently used 20:2
*| unsigned short unused2; // not currently used 22:2
*| } MIB_IPADDRROW, *PMIB_IPADDRROW; total bytes = 24
#DEFINE MIB_IPADDRROW_SIZE 24

PRIVATE lWinsockEnabled
lWinsockEnabled = InitWinsock()

LOCAL lcBuffer, lnBufsize, lnEntries, lnIndex, lcEntryBuf
* allocate a space large enough to keep the data
lnBufsize = 8192

lcBuffer = Repli(Chr(0), lnBufsize)
= GetIpAddrTable (@lcBuffer, @lnBufsize, 1)
lnEntries = buf2dword(SUBSTR(lcBuffer, 1,4))

* resulting cursor
CREATE CURSOR cs (ipaddr C(15), iindex N(3), smask C(15),;
bcast C(15), rsize N(12), hostname C(50))

FOR lnIndex = 1 TO lnEntries
lcEntryBuf = SUBSTR(lcBuffer, 5+(lnIndex-1)*MIB_IPADDRROW_SIZE,;
MIB_IPADDRROW_SIZE)
= AddEntry (lcEntryBuf)
ENDFOR

IF lWinsockEnabled
= WSACleanup()
ENDIF

*!* GO TOP
*!* BROW NORMAL NOWAIT
* end of main

PROCEDURE AddEntry (lcEntryBuf)
LOCAL lcIPAddrBuf, lcIPAddr, lcHostName, lnIndex,;
lcMask, lcBCast, lnRSize

* IP address and the host name
lcIPAddrBuf = SUBSTR(lcEntryBuf, 1,4)
lcIPAddr = inet_ntoa(buf2dword(lcIPAddrBuf))
lcHostName = GetHostName(lcIPAddrBuf)

* the index of the interface associated with this IP address
lnIndex = buf2dword(SUBSTR(lcEntryBuf, 5,4))

* the subnet mask for the IP address
lcMask = inet_ntoa(buf2dword(SUBSTR(lcEntryBuf, 9,4)))

* the broadcast address
lcBCast = inet_ntoa(buf2dword(SUBSTR(lcEntryBuf, 13,4)))

* the maximum re-assembly size for received datagrams
lnRSize = buf2dword(SUBSTR(lcEntryBuf, 17,4))

INSERT INTO cs valueS (lcIPAddr, lnIndex, lcMask, lcBCast,;
lnRSize, lcHostName)
RETURN

FUNCTION GetHostName (lcAddrBuf)
#DEFINE AF_INET 2 && internetwork: UDP, TCP, etc.
#DEFINE HOSTENT_SIZE 16
LOCAL lcResult, lnHOSTENTptr, lcHOSTENT
lcResult = ""

IF lWinsockEnabled
lnHOSTENTptr = gethostbyaddr(lcAddrBuf, 4, AF_INET)
IF lnHOSTENTptr <> 0
lcHOSTENT = GetMemBuf (lnHOSTENTptr, HOSTENT_SIZE)
lcResult = GetMemStr(buf2dword(SUBSTR(lcHOSTENT, 1,4)))
ENDIF
ENDIF
RETURN lcResult

FUNCTION InitWinsock()
* Initializing the Winsock service for the application
#DEFINE WSADATA_SIZE 398
#DEFINE WS_VERSION 514 && 0x0202
LOCAL lcWSADATAln, lnInitResult
lcWSADATA = Repli(Chr(0), WSADATA_SIZE)
lnInitResult = WSAStartup (WS_VERSION, @lcWSADATA)
RETURN (lnInitResult = 0)

FUNCTION GetMemBuf (lnAddr, lnBufsize)
* returning data from a memory block
LOCAL lcBuffer
lcBuffer = Repli(Chr(0), lnBufsize)
= Heap2Str (@lcBuffer, lnAddr, lnBufsize)
RETURN lcBuffer

FUNCTION GetMemStr (lnAddr)
* returning data from a memory block
* before the first occurence of a zero byte
LOCAL lcBuffer
lcBuffer = GetMemBuf (lnAddr, 250)
RETURN SUBSTR(lcBuffer, 1, AT(Chr(0),lcBuffer)-1)

FUNCTION buf2dword (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
Asc(SUBSTR(lcBuffer, 2,1)) * 256 +;
Asc(SUBSTR(lcBuffer, 3,1)) * 65536 +;
Asc(SUBSTR(lcBuffer, 4,1)) * 16777216

PROCEDURE decl
DECLARE STRING inet_ntoa IN ws2_32 INTEGER in_addr
DECLARE INTEGER WSACleanup IN ws2_32
DECLARE INTEGER WSAStartup IN ws2_32 INTEGER wVerRq, STRING @lpWSAData

DECLARE INTEGER gethostbyaddr IN ws2_32;
STRING addr, INTEGER len, INTEGER type

DECLARE RtlMoveMemory IN kernel32 As Heap2Str;
STRING @Dest, INTEGER Src, INTEGER nLength

DECLARE INTEGER GetIpAddrTable IN iphlpapi;
STRING @pIpAddrTable, INTEGER @pdwSize, INTEGER bOrder



调用:
因为一个机器有时候要设置多个ip
所以用循环来取出
getip()
GO TOP
cIp = '|'
FOR i = 1 TO RECCOUNT('cs')
GO (i)
IF LEFT(ALLTRIM(cs.ipaddr),3) != '127' &&本机保留ip地址不要,即127.0.0.1
cIp = cIp + ALLTRIM(cs.ipaddr) + '|'
ENDIF
NEXT

cIp 中保存的就是以|分割的ip地址串
此文件是MyFll.fll文件不可分割的一部分,包含对MyFll函数库全部说明及示例。 MyFll是专为Microsoft Visual FoxPro设计的扩展库,部分函数来自任明汉(RMH myF1论坛)前辈提供的myDll代码翻译而成,由于很多功能利用VFP处理比较烦锁,或无法实现,使用此库可有效解决VFP的弱项。部分与Win32Api同名的函数,是Win32API的封装。部分函数自网上开源算法,在相关函数均有注明。 此源代码使用VC6 sp6开发,采用VFP9 Sp2的库文件,理论上可以应用于VFP6 7 8 9版本。 此库在第一次打开时自动添加智能感应功能已关闭。请在打开后,使用FllAddFoxCode()向智能感应库添加所有的函数原型(需要VFP7以上),此库存所有函数使用VFP推荐的命名规则,一般可以根据函数名和知能感应的提示参数来推测参数及返回值。 开发环境可以使用FllHelp()函数来检查函数信息: 得此版本函数个数:FllHelp() 得第x个函数的信息:?FllHelp(x) 显示提示信息:?FllHelp(x,.T.) 显示指定函数的信息:FllHelp("SendMessage",.T.) 显示Fll的版:?FllGetVersion() 添加智能感应代码:FllAddFoxCode() 版本信息:由于不定期更新,请及时核对版本(右键属性),版本为X.X.X.X,第一位为主版本号,第二位为函数个数,第三位为发布的年份,第四位为日期。当前版本为:1.179.9.811 版权:你可以自由使用、散发此函数库及此帮助,包括应用于你的商业软件。在转发时应注意帮助文件于函数库和帮助同在。不得对软件进行破解、反编译等破性或逆向工程。MyFll作者不承担可能由于技术原因或失误给你带来的错误或损失。发现错误可以与作者得联系共同改进。 感谢:我的帮助论坛http://www.myf1.net/bbs 梅子论坛 http://www.meizvfp.com/bbs 感谢:各位为Myfll做测试、编写帮助的热心网友。 作者:木瓜 ljyit@163.com 函数列表: 硬件相关函数: GetDiskSerial        读指定硬盘的序列号 GetCpuId           读CPU的序列号 GetMAC            读网卡的MAC地址 GetVolumeNumber       读指写磁盘的卷标 IsDiskInDrive        检查指定磁盘是否就绪 GetPort           读系统的串口、并口 ComOpen           打开串口 ComWrite           向串口输出信息 ComRead            从串口读信息 ComClose           关闭串口 GetGUID            获全球唯一ID AEthernet          枚举网卡的所有信息 加密解密函数: MD5File           计算一个文件的MD5效验和 MD5String          计算一个字符串的MD5效验和 CRC32File          计算一个文件的CRC32效验和 CRC32String         计算一个字符串的CRC32效验和 des             采用DES算法加密或解密一个字符串,长度为8位 des16            采用DES算法加密或解密一个字符串,长度为16位 des24            采用DES算法加密或解密一个字符串,长度为24位 EnDeString          双向加密解密字符串的函数 Encrypt           双向加密解密字符串 RSACalc           RSA计算函数 RSAGen            生成随机RSA密钥函数 RSACmp            比较两个十六进制值是否相等 URLEncode          URL编码 URLDecode          URL解码 QPEncode           Quoted-Printable QP编码 QPDecode           Quoted-Printable QP解码 压缩解压函数: Zip              压缩文件 UnZip             解压文件 UnZipFile           解压单个文件           ZipInfo            测试一个文件是否在压缩文件存在 ZipFileToStr         将压缩文件的文件解压到变量 ZipAFile           将zip文件的文件信息生成的数组 CompressString        压缩一个字符串 DeCompressString       解压字符串 数据库: CursorToStr         将Cursor生成变量 ChangesToStr         将Cursor的变动情况生成变量         StrToCursor         将变量还原为Cursor AppendFromStr        将变量的表追加到指定表 ACursorList         将变量的表信息生成数组 ACursorFields        将变量的指定表的字段信息生成数组 CRC32Record         计算一条记录的CRC32值 SQLCallBack         SQL回调函数载入 SQLCallReset         SQL回调函数卸载 PackMDB           压缩修复Access数据库 ReadMemo           读vfp大于16M的备注字段 网络相关函数: DownFile           从internet上下载文件到本地 DownFileX           线程方式从网上下载一个文件 HttpGetFileSize       读internet上的文件大小 HttpPostData         向http服务器Post数据 HttpOpen           打开一个Internet句柄 HttpAddParms         为Http句柄添加一个参数 HttpSend           发送Http句柄的Post数据 HttpClose          关闭Http句柄 FtpDownFile          从FTP服务器下载文件 FtpUploadFile        向FTP服务器上传文件 FtpConnect          连接FTP服务器 FtpDisconnect        断开FTP服务器连接 FtpAFile          枚举Ftp的所有文件 FtpCreateDir        在FTP服务器上创建一个文件夹         FtpSetCurrentDir      设置当前的文件夹 FtpDeleteDir        删除FTP服务器上的文件夹 FtpDelFile         删除FTP服务器上的文件 FtpRename          重命名FTP服务器上的文件 FtpFOpen          打开FTP服务器上的文件 FtpFClose         关闭FTP服务器上的文件 FtpFRead          读FTP服务器上的文件 FtpFWrite          写入FTP服务器上的文件 FtpSetPasv          设置FTP被动工作模式 ShareAdd           在局域网共享文件夹 ShareDel           删除共享文件夹的共享 ShareMapDrive         映射网络驱动器 ShareDelDrive         删除映射的网络驱动器 GetLocalIP          读本机IP DomainToIP          转换域名为IP地址 DialUp            建立拨号连接 DialDown           断开拨号连接 GetSqlServer         列出所有网络上的SQL Server IpToMAC           根据IP得到MAC地址 邮件函数: SmtpCreate          创建一个SMTP发送邮件的句柄 SmtpNewMail         在内存创建邮件内容,等待发送 SmtpSend           发送邮件 SmtpGetLastError       检测邮件最后的错误 Pop3Create          创建一个POP3接收邮件的句柄 Pop3Close          关闭句柄 Pop3AMailList        枚举POP3服务器上的邮件数量 Pop3DeleteMail        删除POP3邮件服务器上的邮件 Pop3GetMail         下载一封邮件 Pop3GetMailHeader      下载邮件头 Pop3DeleteMail        删除服务器上的邮件 打印相关函数: PaperAdd           添加自定义纸张并返回ID PaperDel           删除自定义纸张 PaperInfo          读所有纸张信息或指定纸张信息 APaper            枚举所有纸张生成数组 GetDefaultPrinter      得默认打印机的名称 SetDefaultPrinter      设置默认打印机 PrinterOpen         启用一个打印任务 PrinterOutPage        打印页对像 PrinterClose         结束打印 常用转换函数: ToPY             生成指写字符串的拼音首字 NToC             数字转人民币大写 hzbh             计算指定字符串的汉字笔划 StringToDword        将高底位存放的字符串,转换为字符型 DwordToString        将整型数值转换为字符型数值 NumConver          进制转换函数,能够将一个数字转换为2至36进制的字符串 ConverNum           将指定进制的字符串转换为数值型 GB2312ToBIG5         简体转繁体 BIG5ToGB2312         繁体转简体 FormToBmp          将表单保存为BMP图片 RectToBmp           指定屏幕区域保存为bmp图片 StrReverse          指定屏幕区域保存为bmp图片 ImageConver         转换图片格式 FTrim            删除字符串除指定字符以外的字符 Thumbnail          缩放图片 注册表读写函数: regRead           读注册表的设置 regWrite           向注册表写入设置 regDelKey          删除注册表的分支 regDelValue         删除注册表的设置 ini文件读写函数: iniRead           从ini文件设置 iniWrite           向ini文件写入一个设置 iniSet            设置默认的数据段和ini文件 iniSetSection        设置默认的数据段 iniSetFileName        设置默认的ini文件 系统托盘 SysTrayAdd          向系统托盘添加一个图标 SysTrayEdit         修改系统托盘的图标 SysTrayDel          删除系统托盘的图标 HotKeyAdd          向系统注册一个热键 HotKeyDel          删除向系统注册的热键 SysTrayShowMessage      显示托盘消息 文件操作 CopyFiles          复制文件 MoveFiles          移动文件 DeleteFiles         删除文件 CreateShortcut        创建快捷方式 GetIcon           释放exe或dll的图标 其它: SetVFPEvents         设置MYFLL内部函数回调功能 SetDateTime         设置Windows系统时间 ChangEres          更改屏幕的分辨率 idleLoad           开始加载空闲检测 idleSeconds         读系统空闲时间 idleUnload          卸载空闲检测 KillApp           终止指定进程 KillAllApp          终止所有进程,但排除指定标题的进程 KillProcessByName      根据程序文件名杀死一个进程 FindAllFile         查找指定文件夹下的所有文件 IsNum            检测函数是否是数字 CheckProcess         检测主程序是否重复运行 ProcLoad            载入一个VFP函数,得函数地址 ProcUnload          卸载函数 MemRead           读指定地址的内存 MemWrite           写入指写内存 PushError          系统错误处理压栈 PopError           系统错误处理出栈 Format            格式化输出字符串(类C语言) CreateLink          创建文件关联 DesktopHide         隐藏桌面 SystemKeySet         禁用系统键 RegisterFile         注册文件名解除文件注册 封装过的Win32 API函数: FindWindow          查找指定窗口的句柄 SendMessage         向指写窗口发送指定消息 PostMessage         将消息投递到指定句柄的消息队列 ShowWindow          显示指定窗口 ShowWindowAsync       显示指定窗口 SetWindowLong        设置窗口的扩展样式 SetLayeredWindowAttributes  设置窗口效果 SetForegroundWindow     激活指定窗口使这成为最前面的窗口 ShellExecute         调用系统关联,打开一个文件 ShellExecWait        调用一个程序,并等待执行结束 SuspendThread        暂停一个线程 ResumeThread         恢复一个线程 Beep             使电脑内喇叭发出beep声 ExitWindowsEx        退出Windows Sleep            程序挂起nMilliseconds毫秒 ExitProcess         终止当前进程 GetLastError         返回最后的错误号码 SetParent          设置窗口的父窗口 UpdateWindow         更新窗口

2,748

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧