未公開API函式揭秘 通用對話方塊

2021-04-16 04:40:26 字數 1552 閱讀 9494

comdlg32.dll 為我們提供了一些很有用的對話方塊,但是仍然有部分我們可能會用到的系統對話方塊它卻沒有提供。如果試圖複製這些系統對話方塊將是一件麻煩的苦差事。幸好 shell32.dll為我們提供了這些對話方塊,本文將帶你去發掘一些未公開的api函式,以實現這些對話方塊。

在使用未公開的api函式之前,你必須知道宣告未公開的api函式與宣告那些公開的api函式略有不同,那就是,你必須用到未公開api函式的順序號 (ordinal number)。這個順序號就是未公開函式的別名。也就是說在宣告未公開api函式時,必須加上它的別名。例如下面要說到的pickicondlg函式的 順序號為62,它的別名就是"#62"。如果不這樣做,系統會提示你找不到函式的入口點。

選取圖示

bool winapi pickicondlg(

hwnd     hwndowner,

lpstr    lpstrfile,

dword    nmaxfile,

lpdword  lpdwiconindex);

該函式的順序號為62。

hwndowner擁有該對話方塊的視窗控制代碼 lpstrfile指向乙個緩衝,包含初始的檔名。函式返回後它就包含新的檔名。nmaxfile指定緩衝的大小,以字元為單位。 lpdwiconindex指向乙個變數其中包含基於零的圖示的索引。函式返回後它包含新圖示的索引值。 如果使用者選擇了圖示,則返回值為真,如果使用者選擇取消按鈕或是系統選單的關閉選項則返回值為假。

執行程式對話方塊

void winapi runfiledlg(

hwnd    hwndowner,

hicon   hicon,

lpcstr  lpstrdirectory,

lpcstr  lpstrtitle,

lpcstr  lpstrdescription,

uint    uflags);

該函式的順序號為61。在vb中可宣告如下:

private declare function runfiledlg lib "shell32" alias "#61" (byval hwndowner as long, byval hicon as long, byval lpstrdirectory as string, byval lpstrtitle as string, byval lpstrdescription as string, byval uflags as long) as long

其中uflags引數的可選值為

rff_nobrowse 0x01 removes the browse button.

rff_nodefault 0x02 no default item selected.

rff_calcdirectory 0x04 calculates the working directory from the file name.

rff_nolabel 0x08 removes the edit box label.

rff_noseparatemem 0x20 removes the separate memory space check box (windows nt only).

API通用對話方塊

include include include include include 7 5.h openfilename ofn 定義乙個openfilename結構 hinstance hinst lresult callback wndproc hwnd,uint,wparam,lparam int...

使用通用對話方塊

5.7 使用通用對話方塊 在windows系統中提供了一些通用對話方塊如 檔案選擇對話方塊 如圖,顏色選擇對話方塊 如圖,字型選擇對話方塊 如圖。在mfc中使用cfiledialog,ccolordialog,cfontdialog來表示。一般來講你不需要派生新的類,因為基類已經提供了常用的功能。而...

通用對話方塊QMessageBox

pyqt5中為我們提供了很多預設資訊框qmessagebox,注意為方便使用需要匯入模組。qmessagebox對話方塊包含型別只是圖示不同其他無太大差別 from pyqt5 import qtwidgets from pyqt5.qtwidgets import qmessagebox clas...