我有一個主窗體的訪問應用程序。當您打開應用程序時,AutoExec宏通過Windows API apiShowWindow隱藏應用程序。然後,AutoExec打開設置爲Popup的主窗體。這一切都很漂亮。我的數據庫內容被隱藏起來,表單打開並且漂浮。訪問應用程序,帶窗體的隱藏應用程序窗口任務欄圖標
但是,當訪問數據庫被隱藏時,會丟失任務欄圖標。我在Options \ Current Database \ Application Icon設置中設置了一個自定義圖標。如果我不隱藏數據庫,該圖標在任務欄中顯示得很好。
我發現了一個API解決方法,只在窗體的任務欄中顯示一個圖標。它有點像這樣:
Public Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Declare Function SetWindowPos Lib "user32" _
(ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long
Public Sub AppTasklist(frmHwnd)
Dim WStyle As Long
Dim Result As Long
WStyle = GetWindowLong(frmHwnd, GWL_EXSTYLE)
WStyle = WStyle Or WS_EX_APPWINDOW
Result = SetWindowPos(frmHwnd, HWND_TOP, 0, 0, 0, 0, _
SWP_NOMOVE Or _
SWP_NOSIZE Or _
SWP_NOACTIVATE Or _
SWP_HIDEWINDOW)
Result = SetWindowLong(frmHwnd, GWL_EXSTYLE, WStyle)
Debug.Print Result
Result = SetWindowPos(frmHwnd, HWND_TOP, 0, 0, 0, 0, _
SWP_NOMOVE Or _
SWP_NOSIZE Or _
SWP_NOACTIVATE Or _
SWP_SHOWWINDOW)
End Sub
這種方法確實有效;我在任務欄中獲得專用於該表單的圖標。但是,任務欄中的圖標是標準的Access圖標。
爲了應對這個問題,我添加使用SendMessageA另一個API調用:
公開聲明函數SendMessage32庫 「USER32」 別名_ 「SendMessageA」(BYVAL的hWnd長,BYVAL WMSG長, _ BYVAL的wParam 長,BYVAL lParam的長),只要
這樣執行的:
Private Const WM_SETICON = &H80
Private Const ICON_SMALL = 0&
Private Const ICON_BIG = 1&
Dim icoPth As String: icoPth = CurrentProject.Path & "\MyAppIcon.ico"
Dim NewIco As Long: NewIco = ExtractIcon32(0, icoPth, 0)
Dim frmHwnd As Long: frmHwnd = Me.hwnd 'the form's handle
SendMessage32 frmHwnd, WM_SETICON, ICON_SMALL, NewIco
SendMessage32 frmHwnd, WM_SETICON, ICON_BIG, NewIco
SendMessage32 hWndAccessApp, WM_SETICON, ICON_SMALL, NewIco
SendMessage32 hWndAccessApp, WM_SETICON, ICON_BIG, NewIco
請記住,我已經嘗試了以上四行'SendMessages'的AppTasklist Sub內部和外部,頂部和底部的各種命令,無濟於事。
它似乎在應用程序級別上工作,但它似乎從未在表單級別工作。
對於那些熟悉這種特殊困境的人,讓我列出一些我嘗試過的VBA之外的其他選項。
1.)Taskbar \ Properties \ Taskbar按鈕。我已將此菜單選項更改爲「無法合併」和「合併時任務欄已滿」。所以,基本上,這是行得通的。我現在得到我的圖標只是文件夾和小標籤。但(!),只有當用戶在他們的最後檢查這些設置時纔有效。根據我的經驗,幾乎沒有人使用除「總是組合,隱藏標籤」之外的任何選項。
2.)更改註冊表設置。您可以更改以下注冊表項以更改應用程序使用的默認圖標:「HKEY_CLASSES_ROOT \ Access.Application.14 \ DefaultIcon(默認)」。但是,大多數用戶(包括我自己)都無法訪問註冊表的HKEY_CLASSES_ROOT部分。此外,我將不得不編寫一些代碼來找到正確的密鑰,然後對其進行更改(我可以這樣做),但是,目前還不清楚這種更改是否會立即生效 - 更不用說我必須在退出時更改它應用。 3.)右鍵單擊固定的應用程序,然後右鍵單擊菜單中的應用程序會在「快捷方式」選項卡中爲您提供一個名爲「更改圖標...」的按鈕的屬性菜單。但是,對於像Access這樣的程序,這個按鈕是灰色的。
我正在使用Windows 7和Access 2010。
是否可以將上述場景中的任務欄圖標強制爲標準訪問圖標以外的其他內容?
我覺得以太有一點我缺少的東西,或者一個可以使用的API函數,或者一個更好的SendMessage常量,或者說,也許它只是無法完成。
任何幫助將不勝感激。
此外,作爲免責聲明(我猜):顯然上面的代碼是從這個論壇和其他人的帖子中提取的。大部分是從我得到它沒有歸屬。我做了一些微小的推文,使其在Access工作,而不是其他微軟軟件,繼續在我的搜索結果,所以我不會在這裏命名它。
謝謝!