Win32 API 與PB程式設計

2021-06-05 03:03:40 字數 4026 閱讀 4119

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...