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

vb6 如何移动外部程序的无标题栏窗口?

有一个程序a.exe运行时的窗口没有标题栏。现在需要用另一个程序b.exe去实现对a.exe无标题栏窗口位置的控制,请问该如何编写b.exe --------------------编程问答-------------------- 补充一下:a.exe 虽然没有标题栏,但它的窗口类名已知且类名在当前所有打开的窗口的类名中是唯一的。

另外,b.exe 最好能有这样的功能: 

命令行运行 b.exe x y 即可将a.exe的窗口位置移动到屏幕坐标(100,100)处。 --------------------编程问答-------------------- 别沉啊 --------------------编程问答-------------------- 估计得用API --------------------编程问答-------------------- 要用到API,下面是源码。
天狼工作室
http://www.j2soft.cn/


Option Explicit

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

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private 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 Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Private Sub MoveForm(aStrTitle As String, x As Long, y As Long)
    Dim hWndFind As Long
    Dim rt As RECT
    
    hWndFind = FindWindow(vbNullString, aStrTitle)
    GetWindowRect hWndFind, rt
    MoveWindow hWndFind, x, y, rt.Right - rt.Left, rt.Bottom - rt.Top, True
End Sub
Private Sub Command1_Click()
    MoveForm "位置测试窗口", 100, 200
End Sub

Private Sub Form_Load()
    Dim arrPos As Variant

    arrPos = Split(Command, " ")

    If UBound(arrPos) < 1 Then Exit Sub

    MoveForm "位置测试窗口", CLng(arrPos(0)), CLng(arrPos(1))
End Sub


天狼工作室
http://www.j2soft.cn/ --------------------编程问答-------------------- 给你的代码支持手工点击按钮控制另一个窗口的位置,也可以接收命令行输入的参数。参数之间用空格分隔即可。

天狼工作室 
http://www.j2soft.cn/ --------------------编程问答-------------------- 利用 先查窗口句柄 再 movewindow  --------------------编程问答-------------------- 程序a.exe运行时的窗口没有标题栏,但它的窗口类名已知且类名在当前所有打开的窗口的类名中是唯一的。
后一句话错了!你打开的窗口是没有,但是,你不能保证系统打开的窗口中也没有吧!

--------------------编程问答-------------------- 感谢诸位的帮助,我先去试试看行不行。
先前我用 setwindowpos() 试过,发现只能移动有标题栏的窗口。MoveWindow 确实还没试过。
--------------------编程问答-------------------- 用 API:
 MoveWindow()应该可以搞定。
--------------------编程问答-------------------- 已经测试了,无法用 movewindow 移动。失败! --------------------编程问答-------------------- 吃着刚炒好的炒饭来顶........... --------------------编程问答-------------------- 如果你的标题设置的没问题的话,好像就是你自己那个无标题窗口的问题了。
因为我是在我本地测试没问题,才把代码发上来的~~~~~



天狼工作室
http://www.j2soft.cn/ --------------------编程问答--------------------    学习咯 --------------------编程问答-------------------- 哪个无窗体文件拿上来吧

我估计是窗体句柄的问题 --------------------编程问答-------------------- 其实我想要移动的是 ObjectDock Plus 的标签停驻栏。因为每次在我改变屏幕分辨率后它的位置就得手动调整,所以想做一个程序在后台监控屏幕分辨率是否改变,一旦分辨率改变则自动改变这个停驻栏的位置。
我自己写的代码能移动带标题栏的窗口,但怎么也无法移动这个 object dock 的标签停驻栏。郁闷了

ObjectDock Plus 下载地址: ftp://file1.myfiles.com.cn/myfiles/App/myfiles_HA_StardockObjectDockPlus_v13_Fix.rar

各位高手帮我看看,该怎么来移动它的标签停驻栏(标签停驻栏设置为非“附加到边缘”状态) --------------------编程问答--------------------


厉害,顶啦,学习~~

--------------------编程问答-------------------- 学习了,谢谢 --------------------编程问答-------------------- 果然不可以

这个程序自己处理了窗体的callback

因为他使用了异型窗体

所以你如果跟一下代码就知道

findwindow可以找到他的窗口句柄

但是不可以移动他

很可能是因为这个程序不接受windows的其他消息

只接受鼠标点击,所以如果你一定要实现,可能用sendmessage模拟鼠标点击可以完成你的要求 --------------------编程问答-------------------- 这个要学习一下的 --------------------编程问答-------------------- 下载速度怎么那么慢~~~~
:(
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,