当前位置:编程学习 > VB >>

窗体尺寸控制

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的窗体尺寸啊


引用 3 楼 dujiaxu2009 的回复:
楼上的代码在窗体内打开CNEXT.exe之后
怎么用api函数改变CNEXT.exe的窗体尺寸啊

MoveWindow可以改变窗体位置与大小. SetWindowPos也可以改变窗体位置与大小.
引用 3 楼 dujiaxu2009 的回复:
楼上的代码在窗体内打开CNEXT.exe之后
怎么用api函数改变CNEXT.exe的窗体尺寸啊
用findwindow得到这个窗口的句柄。怎么用findwindow可以自己找找方法。 打开一些软件的时候软件不在窗体内是本意
如果要在窗体内,需要使用 SetParent函数
引用 7 楼 dbcontrols 的回复:
打开一些软件的时候软件不在窗体内是本意
如果要在窗体内,需要使用 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

这是什么啊???

引用 9 楼 veron_04 的回复:
模块代码

VB code
Option Explicit
Public lngKeyBoardPID As Long
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'过程功能:改变指定窗口的位置和大小。顶级窗口可能受最大或最小尺寸的限制,那些尺寸优先于这里设置的参数
'参数说明: hwnd -----------  L……
那是模块代码

引用 11 楼 dujiaxu2009 的回复:
这是什么啊???


引用 9 楼 veron_04 的回复:
模块代码

VB code
Option Explicit
Public lngKeyBoardPID As Long
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'过程功能:改变指定窗口的位置和大小。顶级窗口可能受最大或最小尺寸的限制,那些尺寸优先……
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,