Function long GetExitCodeProcess(long hProcess, long lpexitcode) Library \定义实例变量:
Constant long STILL_ACTIVE = 259
Constant long PROCESS_QUERY_INFORMATION = 1024 定义窗口级函数
wf_ShellWait(string cCommandLine) long hShell ,hProc, lExit hShell = run(cCommandLine)
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell) Do
GetExitCodeProcess(hProc, lExit ) Yield ()
Loop until lExit = STILL_ACTIVE
//调用 ShellWait,控制权将不会交给一个过程,直到调用该过程的程序结束
27、如何为你的应用程序设置热键? 实现步骤:
外部函数引用声明:
Function long SendMessage (long hwnd , long wMsg , long wParam, long lParam) Library \
Function long DefWindowProc (long hwnd,long wMsg, long wParam, long lParam) Library \定义实例变量:
Constant long WM_SETHOTKEY = 50 Constant long WM_SHOWWINDOW = 24
Constant long HK_SHIFTA = 321//注释:Shift + A Constant long HK_SHIFTB = 322//注释:Shift * B
Constant long HK_CONTROLA = 577//注释:Control + A Constant long HK_ALTZ = 1114
//请注意组合键的值必须以低/高位字节的格式进行声明。也就是说是一个十六进制的数字。后两位是低端字节,如
41=a;前两位是高端字节,如01=1=shift。 窗口w_example的open事件: long erg
this.WindowState = Minimized!//注释:让windows知道你想要的热键。 erg = SendMessage(handle(this), WM_SETHOTKEY,HK_ALTZ, 0) //注释:检查函数是否执行成功 If erg <> 1 Then
messagebox(\提示\你需要重新注册另一个热键\) End If
//注释:告诉windows热键按下后做什么--显示窗口
erg = DefWindowProc(handle(this), WM_SHOWWINDOW,0, 0)
28、如何设定屏幕颜色数
//原则上,只改这一次,下一次开机会还原,但如果需重开机,才会Update Registry中的设定,并重开机。 如果要永久设定其设定值,请将
b = ChangeDisplaySettings(DevM, 0) 改成
b = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
//注:DevM.dmBitsPerPel 便是设定颜色数,其实应说每个Pixel要多少Bits来显示
//4 --> 16色 //8 --> 256色
//16 --> 65536色 以此类推 实现步骤: 定义结构:
type devmode from structure string dmdevicename integer dmspecversion integer dmdriverversion integer dmsize
integer dmdriverextra long dmfields
integer dmorientation integer dmpapersize integer dmpaperlength integer dmpaperwidth integer dmscale integer dmcopies
integer dmdefaultsource integer dmprintquantity integer dmcolor integer dmduplex
integer dmyresolution integer dmttoption integer dmcollate string dmformname
integer dmunusedpadding long dmbitsperpel long dmpelswidth long dmpelsheight long dmdisplayflags
long dmdisplayfrequency end type
定义外部函数引用声明:
Function long EnumDisplaySettings (long lpszDeviceName, long iModeNum , lpDevMode As DevMode) Library \\
Function long ChangeDisplaySettings (DevMode lpDevMode , long dwflags) Library \
Function long ExitWindowsEx (long uFlags , long dwReserved ) Library \定义实例变量:
Constant long EWX_REBOOT = 2// 注释: 重开机 Constant long CCDEVICENAME = 32 Constant long CCFORMNAME = 32
Constant long DM_BITSPERPEL = 262144
Constant long DISP_CHANGE_SUCCESSFUL = 0 Constant long DISP_CHANGE_RESTART = 1 Constant long CDS_UPDATEREGISTRY = 1
DevMode DevM 实现代码:
w_example窗口的命令按钮cb_1.clicked: boolean a long i long b long ans
a = EnumDisplaySettings(0, 0, DevM) //注释:Initial Setting DevM.dmBitsPerPel = 8 //注释:设定成256色 DevM.dmFields = DM_BITSPERPEL
b = ChangeDisplaySettings(DevM, 0) If b = DISP_CHANGE_RESTART Then
ans = messagebox(\提示\要重开机设定才能完成,重开?\question!,yesno!)
If ans = 1 Then
b = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
ExitWindowsEx(EWX_REBOOT, 0)//这个api函数只能在win98上使用,win nt以上须采用别的方法 End If Else
If b <> DISP_CHANGE_SUCCESSFUL Then Messagebox(\提示\设定有误\ End If End If
29、彩色BMP档转成灰度
将RGB想成3D之X,Y,Z轴,则BMP的RGB为(r,g,b)与座标(Y,Y,Y)距离最小时的Y即为灰度值
Y = 0.29900 * R + 0.58700 * G + 0.11400 * B
整数化
Y = ( 9798*R + 19235*G + 3735*B) / 32768 RGB(Y, Y, Y)就可以了 实现步骤:
外部函数引用声明:
Funcation long GetPixel (long hdc , long x , long Y) Library \Funcation long SetPixelV (long hdc , long x , long Y , long crColor ) Library \
Funcation long GetDC(long handle) library \定义实例变量: picture tmpPic
窗口w_example的open事件:
P_1.setredraw(false)// 注释:设定所有Pixel的改变不立即在pictureBox上显示
tmpPic = Picture1.Picture
窗口w_example的cb_1.clicked: long width5, heigh5, rgb5 long hdc5, i , j
long bBlue, bRed, bGreen long y
width5 = unitstopixels(P_1.Width,xunitstopixels!) heigh5 =unitstopixels(P_1.height,yunitstopixels!) hdc5 = getdc(handle(this) For i = 1 To width5 For j = 1 To heigh5
rgb5 = GetPixel(hdc5, i, j) bBlue = Blue(rgb5) bRed = Red(rgb5)
bGreen = Green(rgb5)
Y = (9798 * bRed + 19235 * bGreen + 3735 * bBlue) \\ 32768 rgb5 = RGB(Y, Y, Y)
SetPixelV (hdc5, i, j, rgb5) Next Next
P_1.setredraw(true)// 注释:此时才真正显示Picture End Sub
w_example窗口级函数:
Function long Red(long mlColor )
return wf_and(mlColor,255)//对mlcolor进行位与计算 Function long Green(long mlColor ) return wf_and((mlColor/256) ,255) Function long Blue(long mlColor)
return wf_and ((mlColor /65536) ,255)
30、如何将的游标显示成动画游标
动画在 Windows 底下是 .ani 格式的档案, 要显示此类游标,首先要利用LoadCursorFromFile API 载入.ani 档案, 然或利用 SetSystemCursor API 加以显示。 实现步骤: 定义实例变量
Constant long OCR_NORMAL = 32512 Constant long IDC_ARROW = 32512 外部函数引用声明
Function long LoadCursorFromFile (string lpFileName ) Library \
Function long LoadCursor (ref long hInstance , long lpCursorName) Library \//注释: modified
Function long SetSystemCursor (long hcur , long id ) Library \实现代码: long hCursor
hCursor = LoadCursorFromFile(\欲显示的 .ani 或 .cur 档案名称\SetSystemCursor(hCursor, OCR_NORMAL)
//若要将鼠标游标还原原状, 则是执行以下叙述: long ll_temp ll_temp=0
hCursor = LoadCursor(0, IDC_ARROW) SetSystemCursor(hCursor, OCR_NORMAL)