VB6 侧边栏应用程序
VB6 sidebar app
全部。
我正在尝试使用 vb6 开发一个 'sidebar' 应用程序,我希望它的行为类似于 windows Vista 的小工具侧边栏或 Google 桌面侧边栏,就其他 windows 无法最大化它。
我知道这种情况发生的可能性可能很小,但我问是为了以防万一。
目前,我有一个具有多个控件的表单,并在加载时运行一个函数,它使自己成为屏幕的精确高度,减去任务栏,并且它的 '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
明确地说,我不想要 'always on top' 函数。我已经有了它,它让我发疯,因为我必须关闭或最小化表单才能最大化、最小化或关闭它后面的另一个程序(即 chrome、word 等)。此表单必须不允许其他程序对其进行最大化,例如,如果用户最大化 Chrome,chrome 将最大化负 form1.width。
我怀疑这是可能的,因为就我而言,这意味着控制 chrome,并从本质上使其最大化功能
me.height = screen.height - ((ABD.rc.Bottom - ABD.rc.Top) * 12)
me.width = screen.width - form1.width
这是不可能的。
无论如何,希望有人能提供帮助。正如我所说,我严重怀疑这项工作的可能性,但如果是这样,那就更好了。
提前致谢!
全部。
我正在尝试使用 vb6 开发一个 'sidebar' 应用程序,我希望它的行为类似于 windows Vista 的小工具侧边栏或 Google 桌面侧边栏,就其他 windows 无法最大化它。 我知道这种情况发生的可能性可能很小,但我问是为了以防万一。
目前,我有一个具有多个控件的表单,并在加载时运行一个函数,它使自己成为屏幕的精确高度,减去任务栏,并且它的 '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
明确地说,我不想要 'always on top' 函数。我已经有了它,它让我发疯,因为我必须关闭或最小化表单才能最大化、最小化或关闭它后面的另一个程序(即 chrome、word 等)。此表单必须不允许其他程序对其进行最大化,例如,如果用户最大化 Chrome,chrome 将最大化负 form1.width。 我怀疑这是可能的,因为就我而言,这意味着控制 chrome,并从本质上使其最大化功能 me.height = screen.height - ((ABD.rc.Bottom - ABD.rc.Top) * 12) me.width = screen.width - form1.width 这是不可能的。
无论如何,希望有人能提供帮助。正如我所说,我严重怀疑这项工作的可能性,但如果是这样,那就更好了。
提前致谢!