窗体尺寸控制
vb怎么控制用vb打开的其他软件的窗体尺寸vb本身能做的只能简单设置最大化最小化等,例如:
shell "notepad",VbMaximizedFocus'打开时设置窗口最大化
其他相关标记:
常量 值 描述
vbHide 0 窗口被隐藏,且焦点会移到隐式窗口。
VbNormalFocus 1 窗口具有焦点,且会还原到它原来的大小和位置。
VbMinimizedFocus 2 窗口会以一个具有焦点的图标来显示。
VbMaximizedFocus 3 窗口是一个具有焦点的最大化窗口。
VbNormalNoFocus 4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。
VbMinimizedNoFocus 6 窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。
如果要精确控制大小的话可以先得到窗口句柄,然后用api函数设置:
Private Declare Function MoveWindow Lib "user32" Alias "MoveWindow" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
本帖最后由 bcrun 于 2011-03-15 11:18:06 编辑 楼上的代码在窗体内打开CNEXT.exe之后
怎么用api函数改变CNEXT.exe的窗体尺寸啊
MoveWindow可以改变窗体位置与大小. SetWindowPos也可以改变窗体位置与大小. 用findwindow得到这个窗口的句柄。怎么用findwindow可以自己找找方法。 打开一些软件的时候软件不在窗体内是本意
如果要在窗体内,需要使用 SetParent函数 他代码里已经用了这个函数了。有些不在窗体内可能是这个程序有多个窗口,而你用mWnd = InstanceToWnd(Pid)得到的窗口并不是你看到的这个窗口的句柄。可以用将这个值打印出来,结合spy++查看窗口句柄比较下。 模块代码
Option Explicit窗体代码:
Public lngKeyBoardPID As Long
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'过程功能:改变指定窗口的位置和大小。顶级窗口可能受最大或最小尺寸的限制,那些尺寸优先于这里设置的参数
'参数说明: hwnd ----------- Long,欲移动窗口的句柄
' :x -------------- Long,窗口新的左侧位置
' :y -------------- Long,窗口新的顶部位置
' :nWidth --------- Long,窗口的新宽度
' :nHeight -------- Long,窗口的高宽度
' :bRepaint ------- Long,如窗口此时应重画,则设为TRUE(非零)。
' FALSE(零)则表明应用程序会自己决定是否重画窗
'返回说明: Long,非零表示成功,零表示失败
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Public Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal bRepaint As Long) As Long
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'过程功能:寻找窗口列表中第一个符合指定条件的顶级窗口(在vb里使用:FindWindow最常见的一个用途是获得
' :ThunderRTMain类的隐藏窗口的句柄;该类是所有运行中vb执行程序的一部分。获得句柄后,可用api
' :函数GetWindowText取得这个窗口的名称;该名也是应用程序的标题)
'参数说明: lpClassName ---- String,指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示
' :接收任何类
' :lpWindowName --- String,指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为
' :零,表示接收任何窗口标题
'返回说明:Long,找到窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'函数功能:移动指定的窗口
'参数说明:strWindowName:要移动的窗口的标题
' :Left:左位置
' :Top:顶位置
' :Width:窗体宽度
' :Height:窗体高度
'返回说明:移动成功返回:True 失败返回:False
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Public Function funMoveWindow(ByVal strWindowName As String, _
ByVal left As Long, _
ByVal top As Long, _
ByVal Width As Long, _
ByVal Height As Long) As Boolean
Dim lngP As Long
On Error GoTo errFun
funMoveWindow = False
lngP = FindWindow(vbNullString, strWindowName)
If lngP = 0 Then Exit Function
lngP = MoveWindow(lngP, left, top, Width, Height, True)
If lngP = 0 Then Exit Function
funMoveWindow = True
Exit Function
errFun:
funMoveWindow = False
End Function
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'过程功能:读取屏幕分辨率
'功能描述:默认返回1024*768
'返回类型:返回ScreenXY自定义类型,包含了屏幕的分辨率
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'Public Function funReadScreenXY() As ScreenXY
'On Error GoTo errFun
' funReadScreenXY.ScreenHeight = 768
' funReadScreenXY.ScreenWidth = 1024
' funReadScreenXY.ScreenHeight = Screen.Height \ Screen.TwipsPerPixelY
' funReadScreenXY.ScreenWidth = Screen.Width \ Screen.TwipsPerPixelX
' Exit Function
'errFun:
' funReadScreenXY.ScreenHeight = 768
' funReadScreenXY.ScreenWidth = 1024
'End Function
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'过程功能:显示系统软键盘
'参数说明:strFormCaption:窗体标题
' :lngLeft:系统键盘的左位置
' :lngTop:系统键盘的上位置
' :lngWidth:宽
' :lngHeight:高
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Public Sub subShowKeyBoard(ByVal strFormCaption As String, _
ByVal lngLeft As Long, _
ByVal lngTop As Long, _
ByVal lngWidth As Long, _
ByVal lngHeight As Long)
Dim bolP As Boolean
Dim lngP As Long
On Error GoTo errSub
lngP = FindWindow(vbNullString, strFormCaption)
If lngP = 0 Then lngKeyBoardPID = Shell(App.Path & "\osk.exe", vbNormalNoFocus)
Rem 移动窗体
bolP = funMoveWindow("屏幕键盘", lngLeft, lngTop, lngWidth, lngHeight)
Exit Sub
errSub:
End Sub
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'过程功能:关闭屏幕软键盘
'参数说明:strFormCaption:屏幕软键盘的标题
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Public Sub subCloseKeyBoard(ByVal strFormCaption As String)
Dim bolP As Boolean
Dim lngP As Long '系统软键盘PID
On Error GoTo errSub
lngP = FindWindow(vbNullString, strFormCaption)
If lngP <> 0 And lngKeyBoardPID <> 0 Then
Shell "ntsd -c q -p " & CStr(lngKeyBoardPID)
lngKeyBoardPID = 0
End If
Exit Sub
errSub:
End Sub
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'过程功能:设置窗体透明度
'参数说明:lngHandle:要设置的对象的句柄,该对象一般是窗体
' :byteTransparence:透明度 0~255 透明度依次递减
'返回说明:执行成功返回:True 失败返回:False
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'Public Function funSetWindowTransparence(ByRef lngHandle As Long, ByVal byteTransparence As Byte) As Boolean
' Dim lngP As Long
'On Error GoTo errFun
' If byteTransparence < 0 Then byteTransparence = 0
' If byteTransparence > 255 Then byteTransparence = 255
' funSetWindowTransparence = False
' lngP = GetWindowLong(lngHandle, GWL_EXSTYLE)
' lngP = SetWindowLong(lngHandle, GWL_EXSTYLE, lngP Or WS_EX_LAYERED)
' lngP = SetLayeredWindowAttributes(lngHandle, 0, byteTransparence, LWA_ALPHA)
' funSetWindowTransparence = True
' Exit Function
'errFun:
' funSetWindowTransparence = False
'End Function
这是什么啊???
Option Explicit
Private Sub Command1_Click()
Call subShowKeyBoard("屏幕键盘", 174, 361, 675, 270)
End Sub
Private Sub Command2_Click()
Call subCloseKeyBoard("屏幕键盘")
End Sub
那是模块代码
补充:VB , 基础类