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

來源:互聯網
上載者:User
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).

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.