動態(tài)連接函數(shù)庫(DLLs)可以說是Windows系統(tǒng)的基礎,Windows系統(tǒng)或Windows的應用系統(tǒng)在執(zhí)行過程中,常常通過外部的動態(tài)連接函數(shù)庫支持其所需功能,如控制屏幕、打印機、鼠標、鍵盤等設備,若在設計過程中,將完成這些功能的程序都重復寫在系統(tǒng)中,就會使程序過大。另外一點,就是這些工作函數(shù)庫具有共享功能,也就是說可以利用Windows程 序開發(fā)工具,直接使用這些屬于Windows函數(shù)庫的功能,直接在程序中訪問,增加開發(fā)的 系統(tǒng)與Windows系統(tǒng)環(huán)境的結合能力。WindowsAPI的大約400多個API功能,大部分都可 供用戶調用,若能用好這些WindowsAPI功能,既可減少重復開發(fā),又能提高應用系統(tǒng)對 Windows環(huán)境的兼容性和系統(tǒng)性能。
在Windows環(huán)境中所提供的工作函數(shù)庫主要有下面三個文件:
·GDI.EXE———屏幕顯示及打印功能。
·USER.EXE———鼠標、鍵盤、通信端口、聲音及時鐘功能。
·KERNEL.EXE———文件及內存管理(核心部分)功能。
FOXTOOLS.FLL就是FOXPRO For Windows提供的訪問WindowsAPI函數(shù)的動態(tài)連接函數(shù)庫。
它提供下面兩個函數(shù):
RegFn()———WindowsAPI功能注冊函數(shù)。
CallFn()———WindowsAPI功能調用函數(shù)。
要使用WindowsAPI函數(shù)首先應該用RegFn()函數(shù)注冊該函數(shù),注冊成功后再用CallFn()函數(shù)調用之。RegFn()和CallFn()的語法如下。RegFn(<Function name>,<Argment Types>,<Return Types>,[DLL name]) CallFn(<Fn Num>,[<Arg1>,<arg2>....])
參數(shù)說明:
Function name為要調用的API函數(shù)的函數(shù)名稱。
Argment Types為要調用的API函數(shù)的參數(shù)類型說明。
Return Types為要調用的API函數(shù)的返回值類型說明。
DLL name為您要調用的API函數(shù)所在的動態(tài)連接函數(shù)庫名。必須包括擴展名,如.DLL或.DLL或.EXE(GDI.EXE、USER.EXE,KERNEL.EXE可省略擴展名)。
{Fn Num>是用RegFn()注冊成功的函數(shù),即RegFn()的返回值[<Arg1>,<arg2>...])為參數(shù)序列,注意參數(shù)類型必須與用RegFn()注冊的類型一致。
如果用RegFn()注冊一個WindowsAPI函數(shù)成功的話,會返回一個數(shù)值,若無法找到指定的 <DLL name>將返回-1,同時出現(xiàn)一個Windows錯誤窗口。所以如果您使WindowsAPI函數(shù),您必須保證您所調用的函數(shù)所在的動態(tài)連接函數(shù)庫存在,而且函數(shù)調用格式正確CallFn()缺省傳遞參數(shù)的方式為傳值,若要改為傳址,應在該參數(shù)前加上@強制符號。筆者曾經(jīng)因為鼠標器左鍵不好使而用WindowsAPI的SwapMouseButton()函數(shù)對換了鼠標器的左右鍵,下面就以此為例說一下RegFn()和CallFn()的用法。
SwapMouseButton()的語法如下:
SwapMouseButton(BOOL bSwap)bSwap為真值(1)時將鼠標器左右鍵對換,為假(0)時
將左右鍵恢復正常設置。
對換過程SwapMouse.prg
PARAMETERS Swap
SET LIBRARY TO SYS(2004)+"FOXTOOLS.FLL"
&&連入FOXTOOLS.FLL庫
Fn=RegFn("SwapMouseButton","I","I","USER.EXE")
&&注冊SwapMouseButton
IF Fn=-1
WAIT WINDOWS"注冊失敗!"NOWAIT
SET LIBRARY TO
RETURN
ENDIF
&&注冊成功
Result=CallFn(Fn,Swap)
SET LIBRARY TO
RETURN
在Windows環(huán)境中所提供的工作函數(shù)庫主要有下面三個文件:
·GDI.EXE———屏幕顯示及打印功能。
·USER.EXE———鼠標、鍵盤、通信端口、聲音及時鐘功能。
·KERNEL.EXE———文件及內存管理(核心部分)功能。
FOXTOOLS.FLL就是FOXPRO For Windows提供的訪問WindowsAPI函數(shù)的動態(tài)連接函數(shù)庫。
它提供下面兩個函數(shù):
RegFn()———WindowsAPI功能注冊函數(shù)。
CallFn()———WindowsAPI功能調用函數(shù)。
要使用WindowsAPI函數(shù)首先應該用RegFn()函數(shù)注冊該函數(shù),注冊成功后再用CallFn()函數(shù)調用之。RegFn()和CallFn()的語法如下。RegFn(<Function name>,<Argment Types>,<Return Types>,[DLL name]) CallFn(<Fn Num>,[<Arg1>,<arg2>....])
參數(shù)說明:
Function name為要調用的API函數(shù)的函數(shù)名稱。
Argment Types為要調用的API函數(shù)的參數(shù)類型說明。
Return Types為要調用的API函數(shù)的返回值類型說明。
DLL name為您要調用的API函數(shù)所在的動態(tài)連接函數(shù)庫名。必須包括擴展名,如.DLL或.DLL或.EXE(GDI.EXE、USER.EXE,KERNEL.EXE可省略擴展名)。
{Fn Num>是用RegFn()注冊成功的函數(shù),即RegFn()的返回值[<Arg1>,<arg2>...])為參數(shù)序列,注意參數(shù)類型必須與用RegFn()注冊的類型一致。
如果用RegFn()注冊一個WindowsAPI函數(shù)成功的話,會返回一個數(shù)值,若無法找到指定的 <DLL name>將返回-1,同時出現(xiàn)一個Windows錯誤窗口。所以如果您使WindowsAPI函數(shù),您必須保證您所調用的函數(shù)所在的動態(tài)連接函數(shù)庫存在,而且函數(shù)調用格式正確CallFn()缺省傳遞參數(shù)的方式為傳值,若要改為傳址,應在該參數(shù)前加上@強制符號。筆者曾經(jīng)因為鼠標器左鍵不好使而用WindowsAPI的SwapMouseButton()函數(shù)對換了鼠標器的左右鍵,下面就以此為例說一下RegFn()和CallFn()的用法。
SwapMouseButton()的語法如下:
SwapMouseButton(BOOL bSwap)bSwap為真值(1)時將鼠標器左右鍵對換,為假(0)時
將左右鍵恢復正常設置。
對換過程SwapMouse.prg
PARAMETERS Swap
SET LIBRARY TO SYS(2004)+"FOXTOOLS.FLL"
&&連入FOXTOOLS.FLL庫
Fn=RegFn("SwapMouseButton","I","I","USER.EXE")
&&注冊SwapMouseButton
IF Fn=-1
WAIT WINDOWS"注冊失敗!"NOWAIT
SET LIBRARY TO
RETURN
ENDIF
&&注冊成功
Result=CallFn(Fn,Swap)
SET LIBRARY TO
RETURN