2017-04-05 102 views
0

全部。VB6側邊欄應用程序

我試圖開發一個vb6的'側邊欄'應用程序,我想要像Windows Vista的小工具側邊欄或Google桌面側邊欄一樣行事,其他窗口無法最大限度地發揮它的作用。 我知道發生這種情況的可能性很小,但我只是爲了以防萬一。

目前,我有一個表單,它有多個控件,並在加載時運行一個函數,使其自身成爲屏幕的精確高度,減去任務欄,並且它的'left'位置由計時器設置爲'screen.width - me.width',所以它將從屏幕最右側的全高處開始,並且不能移動。如果有必要,代碼如下所示。

Declare Function GetUserNameA Lib "advapi32.dll" (ByVal lpBuffer As String, nSize As Long) As Long 

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 SetLayeredWindowAttributes Lib "user32" (_ 
      ByVal hwnd As Long, _ 
      ByVal crKey As Long, _ 
      ByVal bAlpha As Byte, _ 
      ByVal dwFlags As Long) As Long 

Public Const GWL_STYLE = (-16) 
Public Const GWL_EXSTYLE = (-20) 
Public Const WS_EX_LAYERED = &H80000 
Public Const LWA_COLORKEY = &H1 
Public Const LWA_ALPHA = &H2 


Private Const ABM_GETTASKBARPOS = &H5 

Private Type RECT 
Left As Long 
Top As Long 
Right As Long 
Bottom As Long 
End Type 

Private Type APPBARDATA 
cbSize As Long 
hwnd As Long 
uCallbackMessage As Long 
uEdge As Long 
rc As RECT 
lParam As Long 
End Type 

Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long 

Function Fixheight() 
Dim ABD As APPBARDATA 

SHAppBarMessage ABM_GETTASKBARPOS, ABD 

Form1.Height = Screen.Height - ((ABD.rc.Bottom - ABD.rc.Top) * 12) 
If Form1.Height <= 600 Then 
Form1.Height = Screen.Height 
End If 
End Function 

要說清楚,我不想要一個'永遠在上面'的功能。我已經擁有了這一點,並且這讓我瘋狂,因爲爲了最大限度地減少關閉其背後的另一個程序(即鉻版,單詞等),表單必須關閉或最小化。此表單必須不允許其他程序在其上最大化,因此,例如,如果用戶最大化Chrome,則Chrome會最大化減去form1.width。 我懷疑這是可能的,因爲就我而言,這將意味着控制鉻,並基本上使其功能最大化爲 me.height = screen.height - ((ABD.rc.Bottom - ABD。 rc.Top)* 12) me.width = screen.width - form1.width 這是不可能的。

無論如何,希望有人可以幫助。正如我所說,我認真懷疑做這項工作的可能性,但如果是這樣,那就更好了。

在此先感謝!

+0

你永遠不會手動在你自己的代碼中實現它。有一個API,請參閱[SHAppBarMessage]的MSDN文檔(https://msdn.microsoft.com/en-us/library/windows/desktop/bb762108(v = vs.85).aspx)。 –

+0

正確...你可以使用[ABM_NEW](https://msdn.microsoft.com/en-us/library/windows/desktop/bb787959(v = vs.85).aspx)註冊AppBar,然後設置它是[ABM_SETPOS](https://msdn.microsoft.com/en-us/library/windows/desktop/bb787959(v = vs.85).aspx)的位置,在[APPBARDATA](https)中指定「ABE_RIGHT」 ://msdn.microsoft.com/en-us/library/windows/desktop/bb773184(v = vs.85).aspx)您傳入的結構。 –

回答

0

感謝Ken White,我搜索了SHAppBarMessage並找到了以下的website,提供了一個我需要的特性的可下載源代碼。我只需要現在就執行它!

很高興我問了!謝謝!

編輯:發現這個西班牙文website,雖然需要谷歌翻譯的一些幫助,但更適合我的需求。只需要弄清楚如何使它在右手邊工作!再次感謝!