vb 通过句柄将外部程序 设为本程序的子窗体 并 改变其窗体大小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb 通过句柄将外部程序 设为本程序的子窗体 并 改变其窗体大小相关的知识,希望对你有一定的参考价值。
如题 我现在可以获得其句柄 实现设为子窗体, 但如何改变其窗体大小呢?(外部程序没有边框)
望写出代码供参考 谢谢。
有两个Win 32 的API能够改变窗口大小,跟目标窗口有没边框无关:
MoveWindow( ) 和 SetWindowPos( )
比如用 MoveWindow( ) 的:
Option ExplicitPrivate 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
Private Sub Command1_Click()
Dim hWinWND As Long
hWinWND = &HC018A '实际窗口句柄你自己处理
Call MoveWindow(hWinWND, 30, 120, 510, 300, 1)
End Sub追问
额 这个不行啊 只是窗体位置发生了变化 但是尺寸并没改变 返回值为1
是不是要先改变外部程序的边框样式(.Borderstyle),改为可调尺寸的边框然后在进行这一命令呢?或者用SetWindowPos()可以实现么?
如果真是这样,这也不是API的问题。
而是你的“目标窗口”自己在控制窗口大小!
不信,你可以自己用VB做一个窗口无边框的程序来试一下。
或者,你也可以新建一个标准EXE工程,画一个按钮,
然后再画一个TextBox、PictureBox等有句柄的控件。
把这个控件的句柄传给它,让它处理。
你都能看到,它不仅可以移动控件的位置,也能改变控件的大小。
如果MoveWindow( ) 不能直到作用,你用 SetWindowPos( ) 同样也不行。
那有什么办法可以解决吗 谢谢了
追答晕,能有什么办法!
如果它自己随时在“维护窗口的大小”,你却偏要去改变,那不是自找麻烦?
你去分析它的程序文件吧,看它在哪“作怪”,你把它那段代码跳过(或全部NOP掉),就可以了。
(不知道你有这个功力没。反正我是做不到了 -_-!!! )
就是面对 非常、非常长 的一大片汇编代码,然后改它的指令…………
(用反编译工具来处理)
以上是关于vb 通过句柄将外部程序 设为本程序的子窗体 并 改变其窗体大小的主要内容,如果未能解决你的问题,请参考以下文章