1. 如何使pb視窗總在最上層
通過setwindowpos函式吧視窗的顯示層次修改為hwnd_topmost,就可以使指定視窗永遠不會被其他視窗覆蓋,該函式宣告為:
function long setwindowpos(long hwnd, long ord, long x, long y, long dx, long dy, long uflag) library 「user32.dll」
引數1為要頂層顯示的視窗控制代碼,引數2指定顯示的層次,引數7為附加選項,其餘引數指定視窗位置和大小,均可忽略。在視窗的open或activate事件中加入如下函式呼叫:
setwindowpos(handle(this),-1,0,0,0,0,3)
引數2取-1表示在最頂層顯示視窗,取1表示在最底層顯示;最後乙個引數若取1,表示視窗大小保持不變,取2表示保持位置不變,因此,取3(=1+2)表示大小和位置均保持不變,取0表示將視窗的大小和位置改變為指定值。
2. 在pb中如何獲得光碟碟符
通過getdrivetype函式可以獲取驅動器(如:軟碟機、硬碟、光碟機、網路對映驅動器等)的資訊,該函式宣告為:
function unit getdrivetypea(string drive) library 「kernel32.dll」
引數為乙個碟符(如「c:」),返回值:1表示未知,2表示軟碟機,3表示本地硬碟,4表示網路驅動器,5表示光碟機。因此如下**可以獲得光碟的碟符:
for i=asc(『d』) to asc(『z』)
//列舉所有可能的cdrom的驅動器
if getdrivetypea(char(i)+」:」) = 5 then
//若找到cdrom
messagebox(「cdrom」,char(i)+」:」)
//顯示光碟碟符
exit //退出迴圈
end if
next
3. 在pb中如何獲取目錄資訊
(1)獲取當前目錄。通過getcurrentdirectory函式可以獲取當前目錄,該函式宣告為:
function ulong getcurrentdirectory(ulong buflen,ref string dir)
library 「kernel32.dll」
string curdir
curdir=space(256)
//為字元緩衝區開闢記憶體空間
getcurrentdirectory(256,curdir)
messagebox(「當前路徑」,curdir)
(2)獲取windows及系統目錄。
要用到getwindowsdirectory和getsystemdirec tory兩個函式,須作如下宣告:
function uint getwindowsdirectorya(ref string dir,uint buflen)
library kernel32.dll」
function uint getsystemdirectorya(ref string dir,uint buflen)
library "kernel32.dll」
4. 在pb中如何登出當前使用者、關閉計算機、重啟計算機
通過exitwindow***函式可實現這三個功能,首先作如下宣告:
function long exitwindow***(long uflag, long nouse) library "user32.dll」
引數2保留不用,可取0;引數1取0可以登出當前使用者,取1可以關閉計算機,取2可以重啟計算機,其值再加4表示強制結束「未響應」的程序。
5. 控制由run執行的程式(簡稱run程式)
在pb程式設計中,可以用run()來執行一些程式。但run程式無法與pb主程式協調工作,若使用者多次呼叫,就會啟動run程式的多個例項,主程式退出時,run程式依然執行。可以用如下函式使它們協調工作:
function ulong findwindowa(ulong classname, string windowname) library "user32.dll」
function long setparent(long childwin, long parentwin) library "user32.dll」
(1) 使run程式只執行乙個例項
handle = findwindowsa(nul,wtitle)
//查詢run程式是否已經執行,wtitle為run程式的視窗標題
if handle > 0 then return
//若已經在執行就返回
run(「c:\luhan.chm」)
//否則執行run程式
(2) pb主程式退出時,run程式也關閉
handle = findwindowa(nul,wtitle)
setparent(handle,handle(w_main))
//使run程式視窗成為pb主程式的子視窗
6. 對映網路驅動器
若要在程式中把遠端主機的資源對映到本地驅動器,可以用如下函式:
function long wnetaddconnectiona(string path, string pwd, string drv) library 「mpr.dll」
如下**可以把遠端主機alexander上的共享資料夾my documents對映到本地的j 盤:
wnetaddconnectiona(「\\ alexander\ my documents」,」」,」j:」) //引數2為訪問口令
它的作用相當於在dos提示符下執行:net use j: \\ alexander\ my documents
7. 顯示或隱藏windows的工作列
要顯示或隱藏工作列,首先要得到它的視窗控制代碼。工作列是乙個特殊的視窗,它的視窗類為:shell_traywnd,沒有標題,故只能用findwindowex函式來取得它的控制代碼:
function long findwindowex(long ph, long ch, ref string cn, ref
string wn) library 「user32.dll」
function long showwindow(long hwnd, long ncmdshow) library 「user32.dll」
用showwindow來顯示或隱藏視窗,其第二個引數為0表示隱藏,為5表示顯示:
handle = findwindowex(0,0,」 shell_traywnd」,wn) //wn為空串
showwindow(handle,0) //隱藏工作列
8. 如何將長檔名轉換為短檔名
通過getshortpathname函式可以把上檔名轉換為8.3格式,其宣告為:
function long getshortpathnamea(string lf, ref string sf, long
buflen)
library 「kernel32.dll」
引數1為長檔名,引數2為儲存短檔名的緩衝區,引數3為緩衝區長度。例如:
getshortpathnamea(「c:\my document\powerbuilder程式設計實踐.doc」,sf,256)
\ //sf = spcace(256)
9. 如何在pb中實現延時
延時函式很有用,pb雖然沒有提供,但可以通過wind32的sleep函式來擴充套件:
function long sleep(long ms) library 「kernel32.dll」
呼叫:sleep(1000) //延時1秒
function long playsound(string filename, int mod, int flags) library
「 winmm.dll」
多執行緒程式設計win32 API
win32 提供了一系列的api函式來完成執行緒的建立 掛起 恢復 終結以及通訊等工作。下面將選取其中的一些重要函式進行說明。1 handle createthread lpsecurity attributes lpthreadattributes,dword dwstacksize,lpthre...
使用Win32API開始openGL程式設計
其實windows下opengl程式設計更多的是使用win32api結合opengl函式的方式,下面做一些介紹 二 使用win32api開始opengl程式設計 這其實只是涉及到win32api和wgl函式,前者建立起執行的視窗環境,後者建立opengl執行環境,網上的文章更多,這裡節選了nehe ...
WIN32 API程式設計之 透明static
createwindow可以直接建立乙個staitc,但這個static是不透明的,如果我們把視窗背景設定為gray brush,則static會很明顯的有乙個白色背景,一般來說這樣肯定很難看。可以先給 static設定乙個ws ex transparent的擴充套件屬性,然後在訊息 函式中攔截 w...