有一个程序a.exe运行时的窗口没有标题栏。现在需要用另一个程序b.exe去实现对a.exe无标题栏窗口位置的控制,请问该如何编写b.exe

解决方案 »

  1.   

    补充一下:a.exe 虽然没有标题栏,但它的窗口类名已知且类名在当前所有打开的窗口的类名中是唯一的。另外,b.exe 最好能有这样的功能: 命令行运行 b.exe x y 即可将a.exe的窗口位置移动到屏幕坐标(100,100)处。
      

  2.   

    要用到API,下面是源码。
    天狼工作室
    http://www.j2soft.cn/
    Option ExplicitPrivate Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypePrivate 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 LongPrivate 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 SubPrivate 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/
      

  3.   

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

  4.   

    利用 先查窗口句柄 再 movewindow 
      

  5.   

    程序a.exe运行时的窗口没有标题栏,但它的窗口类名已知且类名在当前所有打开的窗口的类名中是唯一的。
    后一句话错了!你打开的窗口是没有,但是,你不能保证系统打开的窗口中也没有吧!
      

  6.   

    感谢诸位的帮助,我先去试试看行不行。
    先前我用 setwindowpos() 试过,发现只能移动有标题栏的窗口。MoveWindow 确实还没试过。
      

  7.   

    用 API:
     MoveWindow()应该可以搞定。
      

  8.   

    已经测试了,无法用 movewindow 移动。失败!
      

  9.   

    如果你的标题设置的没问题的话,好像就是你自己那个无标题窗口的问题了。
    因为我是在我本地测试没问题,才把代码发上来的~~~~~天狼工作室
    http://www.j2soft.cn/
      

  10.   

    其实我想要移动的是 ObjectDock Plus 的标签停驻栏。因为每次在我改变屏幕分辨率后它的位置就得手动调整,所以想做一个程序在后台监控屏幕分辨率是否改变,一旦分辨率改变则自动改变这个停驻栏的位置。
    我自己写的代码能移动带标题栏的窗口,但怎么也无法移动这个 object dock 的标签停驻栏。郁闷了ObjectDock Plus 下载地址: ftp://file1.myfiles.com.cn/myfiles/App/myfiles_HA_StardockObjectDockPlus_v13_Fix.rar各位高手帮我看看,该怎么来移动它的标签停驻栏(标签停驻栏设置为非“附加到边缘”状态)
      

  11.   

    果然不可以这个程序自己处理了窗体的callback因为他使用了异型窗体所以你如果跟一下代码就知道findwindow可以找到他的窗口句柄但是不可以移动他很可能是因为这个程序不接受windows的其他消息只接受鼠标点击,所以如果你一定要实现,可能用sendmessage模拟鼠标点击可以完成你的要求