《PowerBuilder编程Win32API函数调用.pdf》由会员分享,可在线阅读,更多相关《PowerBuilder编程Win32API函数调用.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Win32 API 函数与函数与 PB 编程编程 在 PB 编程实践中,如何获取当前目录?如何得到光盘的盘符?如何控制由 Run 运行的程序?对于此类 PB 不能直接解决的问题,可以求助于 Win32 API 函数。其实 PB 编程的大部分 FAQ 都可以通过 Win32 API 函数来解决。下面是一些典型的应用。1如何使 PB 窗口总在最上层(Always On Top)1如何使 PB 窗口总在最上层(Always On Top)通过 SetWindowPos 函数把窗口的显示层次修改为 HWNDTOPMOST,就可使指定窗口永远不会被其它窗口覆盖,该函数声明为:Function Long
2、SetWindowPos(Long hwnd,Long ord,Long x,Long y,Long dx,Long dy,Long uflag)Library user32 参数 1 为要顶层显示的窗口句柄,参数 2 指定显示的层次,参数 7 为附加选项,其余参数指定窗口位置和大小,均可忽略。在窗口的 Open 或 Activate 事件中加入如下函数调用:SetWindowPos(Handle(This),1,0,0,0,0,3)参数 2 取1 表示在最顶层显示窗口,取 1 表示在最底层显示;最后一个参数若取 1,表示窗口大小保持不变,取 2 表示保持位置不变,因此,取 3(=12)表示大
3、小和位置均保持不变,取 0 表示将窗口的大小和位置改变为指定值。2在 PB 中如何获得光盘盘符 2在 PB 中如何获得光盘盘符 通过 GetDriveType 函数可以获取驱动器(如:软驱、硬盘、光驱、网络映射驱动器等)的信息,该函数声明为:Function Uint GetDriveTypeA(String drive)Library kernel32.dll 参数为一个盘符(如“C:),返回值:1 表示未知,2 表示软驱,3 表示本地硬盘,4 表示网络驱动器,5 表示光驱。因此如下代码可以获得光盘的盘符:For i=Asc(D)to Asc(Z)/列举所有可能的 CDROM 驱动器 If
4、GetDriveTypeA(Char(i):)=5 Then /若找到 CDROM MessageBox(CDROM,Char(i):)/显示光盘盘符 Exit/退出列举 End If Next 3在 PB 中如何获取目录信息 3在 PB 中如何获取目录信息 获取当前目录。通过 GetCurrentDirectory 函数可以获取当前目录,该函数声明为:Function Ulong GetCurrentDirectoryA(Ulong buflen,ref String dir)Library kernel32.dll 参数 2 为接收当前目录的字符缓冲区,前面必须加 ref 表示地址引用;参
5、数 1 用来指定字符缓冲区的长度。调用过程为:String curdir curdir=Space(256)/为字符缓冲区开辟内存空间 GetCurrentDirectoryA(256,curdir)MessageBox(Current Directory,curdir)获取 Windows 及系统目录。要用到 GetWindowsDirectory 和 GetSystemDirectory 两个函数,须作如下声明:Function Uint GetWindowsDirectoryA(ref String dir,Uint buflen)Library kernel32.dll Functio
6、n Uint GetSystemDirectoryA(ref String dir,Uint buflen)Library kernel32.dll 4在 PB 中如何注销当前用户、关闭计算机、重启计算机 4在 PB 中如何注销当前用户、关闭计算机、重启计算机 通过 ExitWindowsEx 函数可实现这三个功能,首先作如下声明:Function Long ExitWindowsEx(Long uflag,Long nouse)Library user32.dll 参数 2 保留不用,可取 0;参数 1 取 0 可以注销当前用户,取 1 可以关闭计算机,取 2 可以重启计算机,其值再加 4
7、表示强制结束“未响应的进程。5控制由 Run 运行的程序(简称 Run 程序)5控制由 Run 运行的程序(简称 Run 程序)在 PB 程序设计中,可以用 Run()来运行一些程序。比如用户按了 F1,就运行一个 chm 文件。但 Run 程序无法与 PB 主程序协调工作,若用户按了多次 F1,就会启动 Run 程序的多个实例,主程序退出时,Run 程序依然运行。可以用如下函数来使它们协调工作:Function Ulong FindWindowA(Ulong classname,String windowname)Library user32.dll Function Long SetPar
8、ent(Long childwin,Long parentwin)Library user32.dll 使 Run 程序只运行一个实例 handle=FindWindowA(nul,wtitle)/查找 Run 程序是否已经运行,wtitle 为 Run 程序的标题 IF handle0 Then Return /若已经在运行就返回 Run(C:Program FilesJointJoint.chm)/否则运行 Run 程序 PB 主程序退出时,Run 程序也关闭 handle=FindWindowA(nul,wtitle)SetParent(handle,Handle(wmain)/使 Ru
9、n 程序窗口成为 PB 主程序的子窗口 6映射网络驱动器6映射网络驱动器 若要在程序中把远程主机的资源映射到本地驱动器,可以用如下函数:Function long WNetAddConnectionA(String path,string pwd,String drv)Library mpr.dll 如下代码可以把远程主机 Alexander 上的共享文件夹 My Documents 映射到本地的 J 盘:WNetAddConnectionA(AlexanderMy Documents,J:)/参数 2 为访问口令 它的作用相当于在 DOS 提示符下执行:Net Use J:Alexander
10、My Documents 7显示或隐藏 Windows 的任务栏7显示或隐藏 Windows 的任务栏 要显示或隐藏任务栏,首先要得到它的窗口句柄。任务栏是一个特殊的窗口,它的窗口类为:ShellTrayWnd,没有标题,故只能用 FindWindowEx 函数来取得它的句柄:Function long FindWindowEx(long ph,long ch,ref String cn,ref String wn)Library user32 Function Long ShowWindow(Long hWnd,Long nCmdShow)Library user32 用 ShowWindo
11、w 来显示或隐藏窗口,其第二个参数为 0 表示隐藏,为 5 表示显示:handle=FindWindowEx(0,0,ShellTrayWnd,wn)/wn 为空串 ShowWindow(handle,0)/隐藏任务栏 8如何将长文件名转换为短文件名8如何将长文件名转换为短文件名 通过 GetShortPathName 函数可以把长文件名转换为 8.3 格式,其声明为:Function Long GetShortPathNameA(String lf,ref String sf,Long buflen)Library kernel32 参数 1 为长文件名,参数 2 为保存短文件名的缓冲区,参
12、数 3 为缓冲区长度。例如:GetShortPathNameA(C:My DocumentsPowerBuilder 编程实践.Doc,sf,256)/sf=Space(256)9如何在 PB 中实现延时 9如何在 PB 中实现延时 延时函数很有用,PB 虽然没有提供,但可以通过 Win32 的 Sleep 函数来扩展:Function Long Sleep(Long ms)Library kernel32 调用:Sleep(1000)/延时 1 秒 10如何在 PB 中播放音乐10如何在 PB 中播放音乐 PB 没有提供任何多媒体函数,要播放音乐只能通过 Win32 API 的 PlaySound 来实现:Function Long PlaySound(String Filename,Int Mod,Int Flags)Library winmm.dll 参数 1 为 wav 文件名,参数 2 必须取 0,参数 3 取 1 表示后台播放,取 8 表示循环播放,因此取 9(=18)表示在后台循环播放。