pb+api实际应用(3)

2019-03-10 20:17

窗口w_example的open事件: long rtn

rtn = GetWindowLong(handle(this), GWL_EXSTYLE) //注释:取的窗口原先的样式

rtn = rtn + WS_EX_LAYERED //注释:使窗体添加上新的样式WS_EX_LAYERED SetWindowLong(handle(thios), GWL_EXSTYLE, rtn )// 注释:把新的样式赋给窗体

SetLayeredWindowAttributes(handle(this), 0, 192, LWA_ALPHA) //注释:把窗体设置成半透明样式,第二个参数表示透明程度 //注释:取值范围0--255,为0时就是一个全透明的窗体了

14、使窗体右上角的X按钮失效 外部函数声明

Function long GetSystemMenu(long hwnd, long bRevert) Library \//函数功能

//取得指定窗口的系统菜单的句柄。在powerbuilder,“系统菜单”的正式名称为“控制菜单”,即单击窗口左上角的控制框时出现的菜单 //返回值

//Long,如执行成功,返回系统菜单的句柄;零意味着出错。如bRevert设为TRUE,也会返回零(简单的恢复原始的系统菜单) //备注

//在powerbuilder里使用:系统菜单会向窗口发送一条WM_SYSCOMMAND消息,而不是WM_COMMAND消息 //参数表

//hwnd ----------- Long,窗口的句柄

//bRevert -------- Long,如设为TRUE,表示接收原始的系统菜单 Function long RemoveMenu(long hMenu, long nPosition, long wFlags) Library \//函数功能

//删除指定的菜单条目。如删除的条目属于一个弹出式菜单,那么这个函数不会

同时删除弹出式菜单。首先应该用GetSubMenu函数取得弹出式菜单的句柄,再在以后将其删除 //返回值

//Long,非零表示成功,零表示失败。会设置GetLastError //备注

//强烈建议大家使用powerbuilder菜单的visible属性从菜单中删除条目,而不要用这个函数,否则会造成指定菜单中其他菜单条目的visible属性对错误的菜单条目产生影响 //参数表

//hMenu ---------- Long,菜单的句柄

//nPosition ------ Long,欲改变的菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是 MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零)

//wFlags --------- Long,常数MF_BYCOMMAND或MF_BYPOSITION,取决于nPosition参数 实现代码:

w_example窗口的open事件: long R,mymenu

MyMenu = GetSystemMenu(handle(this), 0) RemoveMenu(MyMenu, 96, R)

//程序中用到了两个API函数GetSystemMenu、RemoveMenu,其中GetSystemMenu函数用来得到系统菜单的句柄,RemoveMenu用来删除指定的菜单条目,我们先来看看这个函数的声明和参数:

Function long GetSystemMenu(long hwnd, long bRevert) Library \Function long RemoveMenu(long hMenu, long nPosition, long wFlags) Library \

其中各GetSystemMenu参数的意义如下表: 参数 意义

hwnd Long 系统菜单所在窗口的句柄

bRevert Long 如设为TRUE,表示恢复原始的系统菜单

返回值 Long 如执行成功,返回系统菜单的句柄;零意味着出错。如bRevert设为TRUE,也会返回零(简单的恢复原始的系统菜单) 而RemoveMenu参数的意义如下表: 参数 意义

hMenu Long 菜单的句柄

nPosition Long 欲改变的菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是

MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零) wFlags Long 常数MF_BYCOMMAND=0或MF_BYPOSITION=1024,取决于nPosition参数

返回值 Long,非零表示成功,零表示失败

然后就可以在程序中使用这两个函数了,我们在窗体的Form_Load()过程中加入如下代码: MyMenu = GetSystemMenu(handle(this),0)//得到系统菜单的句柄,handle(this)表示当前窗体的句柄

RemoveMenu(MyMenu, 96, MF_BYCOMMAND)//移去“关闭”菜单项,96“关闭”菜单项的命令ID

15、如何获得屏幕保护程序的密码

// 如果屏幕保护程序设置了密码,密码将被加密,然后写到注册表的

“HKEY_CURRENT_USER\\Control Panel\\Desktop\\ScreenSave_Data”位置。屏保密码的最大长度为128位。加密方式是将密码与一特定字符串异或后得到密文,经 过参考有关资料,笔者利用VB成功地破解了屏保的密码。 外部函数声明:

Function long RegOpenKeyEx(long hKey, string lpSubKey, long ulOptions, long samDesired, long phkResult) Library \\

Function long RegCloseKey(long hKey) Library \Function long RegQueryValueEx(long hKey,string lpValueName, long

lpReserved,long lpType,any lpData,long lpcbData) Library \Alias for \

Function long RegSetValueEx(long hKey, string lpValueNames, long

Reserved,long dwType, any lpData, long cbData) Library \Aliasfor \//以上api可以使用powerbuilder提供的注册表函数替代

实例变量声明:

//注释:加密和解密所用的字符串 Constant string Key =

\E31B718D3463EB91C3240FB7C2F8E3B6544C3554E7C94928A385110B2C68FBEE7DF66CE39C2DE47

2C3BB851A123C32E36B4F4DF4A924C8FA78AD23A1E46D9A04CE2BC5B6C5EF935CA885

2B413772FA

574541A1204F80B3D52302643F6CF10F\

Constant long HKEY_CURRENT_USER = 2147483649 Constant long REG_SZ = 1

Constant long KEY_READ = &H20019 窗口自定义函数:

//注释:自定义函数,找到屏保密码 Function string GetScreenSaverPwd()

string EncryptedPassword ,DecryptedPassword,strRetVal,strreturn long lngResult,lngHandle,lngcbData

//注释:从注册表中读取已经加密的屏保密码

RegOpenKeyEx(HKEY_CURRENT_USER, \lngHandle)

RegQueryValueEx(lngHandle, \strRetVal, lngcbData )

strRetVal = Space(lngcbData)

lngResult = RegQueryValueEx(lngHandle, \ByVal strRetVal, lngcbData) RegCloseKey (lngHandle)

EncryptedPassword = strRetVal //注释:解密,得到密码

If Len(EncryptedPassword) <> 1 Then

EncryptedPassword = Left(EncryptedPassword, Len(EncryptedPassword) - 1) //注释:每2位与Key进行异或运算,得到密码 For i = 1 To Len(EncryptedPassword) Step 2 DecryptedPassword =

wf_or(DecryptedPassword,wf_Xor(Mid(EncryptedPassword, i, 2),Mid(Key, i, 2)))//这个是随便写的,可能有问题的:) Next

str_return = DecryptedPassword Else

str_return = \End If

If str_return = \未设置屏保密码。\return str_return

16、设置本地机器的时间 外部函数引用声明:

Function long SetSystemTime(stc_systemtime lpSystemTime) Library \结构声明:

type stc_systemtime from structure integer wyear integer wmonth

integer wdayofweek integer wday integer whour integer wminute integer wsecond

integer wmilliseconds end type 实现代码:

public function boolean of_setsystemtime (datetime adt_datetime); stc_systemtime lstc_systemtime date ld_date time lt_time

ld_date=date(adt_datetime) lt_time=time(adt_datetime)

lstc_systemtime.wyear=year(ld_date)//设置结构变量的年 lstc_systemtime.wmonth=month(ld_date)//设置结构变量的月 lstc_systemtime.wday=day(ld_date)//)//设置结构变量的天

lstc_systemtime.wdayofweek=daynumber(ld_date)//设置结构变量的星期数 lstc_systemtime.whour=hour(lt_time)//设置结构变量的小时 lstc_systemtime.wminute=minute(lt_time)//设置结构的秒数 lstc_systemtime.wsecond=minute(lt_time)//设置结构的分钟数 lstc_systemtime.wmilliseconds=0//设置结构的微秒数

return setsystemtime(lstc_systemtime)<>0//返回是否设置成功 end function


pb+api实际应用(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2011届高考政治复习阶段重点掌握的考点

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: