用FindWindow查找窗体
再用SetWindowPos设置坐标
FindWindow VB声明 
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
说明 
寻找窗口列表中第一个符合指定条件的顶级窗口(在vb里使用:FindWindow最常见的一个用途是获得ThunderRTMain类的隐藏窗口的句柄;该类是所有运行中vb执行程序的一部分。获得句柄后,可用api函数GetWindowText取得这个窗口的名称;该名也是应用程序的标题) 
返回值 
Long,找到窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 
参数表 
参数 类型及说明 
lpClassName String,指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示接收任何类 
lpWindowName String,指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示接收任何窗口标题 
注解 
很少要求同时按类与窗口名搜索。为向自己不准备参数传递一个零,最简便的办法是传递vbNullString常数
 
示例 
Dim hw&, cnt&
Dim rttitle As String * 256
hw& = FindWindow("ThunderRT5Main", vbNullString) ' ThunderRTMain under VB4
cnt = GetWindowText(hw&, rttitle, 255)
MsgBox Left$(rttitle, cnt), 0, "RTMain title" 
SetWindowPos VB声明 
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 
说明 
这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。该函数与DeferWindowPos函数相似,只是它的作用是立即表现出来的(在vb里使用:针对vb窗体,如它们在win32下屏蔽或最小化,则需重设最顶部状态。如有必要,请用一个子类处理模块来重设最顶部状态 
返回值 
Long,非零表示成功,零表示失败。会设置GetLastError 
参数表 
参数 类型及说明 
hwnd Long,欲定位的窗口 
hWndInsertAfter Long,窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一: 
HWND_BOTTOM 将窗口置于窗口列表底部 
HWND_TOP 将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序 
HWND_TOPMOST 将窗口置于列表顶部,并位于任何最顶部窗口的前面 
HWND_NOTOPMOST 将窗口置于列表顶部,并位于任何最顶部窗口的后面 
x Long,窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示 
y Long,窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示 
cx Long,指定新的窗口宽度 
cy Long,指定新的窗口高度 
wFlags Long,包含了旗标的一个整数 
SWP_DRAWFRAME 围绕窗口画一个框 
SWP_HIDEWINDOW 隐藏窗口 
SWP_NOACTIVATE 不激活窗口 
SWP_NOMOVE 保持当前位置(x和y设定将被忽略) 
SWP_NOREDRAW 窗口不自动重画 
SWP_NOSIZE 保持当前大小(cx和cy会被忽略) 
SWP_NOZORDER 保持窗口在列表的当前位置(hWndInsertAfter将被忽略) 
SWP_SHOWWINDOW 显示窗口 
SWP_FRAMECHANGED 强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变 
注解 
窗口成为最顶级窗口后,它下属的所有窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有下属和物主窗口也会转为非最顶级。Z序列用垂直于屏幕的一根假想Z轴量化这种从顶部到底部排列的窗口顺序

解决方案 »

  1.   

    非常感谢您的回复,但我还是不知如何用。
    调用计算器: 
        iWks = Shell(sysPath & "\CalC.exe", vbNormalFocus)
    API声明:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long然后设置:
                    
    Dim hw&, cnt&, tt As Long
    Dim rttitle As String * 256
    hw& = FindWindow("ThunderRTMain", "计算器")
    cnt = GetWindowText(hw&, rttitle, 255)
    MsgBox Left$(rttitle, cnt), 0, "RTMain title"
    tt = SetWindowPos(???? 
      

  2.   

    '用FindWindow查找窗体,再用SetWindowPos控制窗体位置。
    '函数声明:
    Private Declare Function SetWindowPos Lib "user32" _
        (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
        ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
        ByVal cy As Long, ByVal wFlags As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Const SWP_NOSIZE = &H11
    Const HWND_TOPMOST = -1'代码:
    Dim hWnd As Long
    Call Shell("C:\WINDOWS\CALC.EXE", vbNormalFocus)
    hWnd = FindWindow(vbNullString, "计算器")
    Call SetWindowPos(hWnd, HWND_TOPMOST, 250, 250, 0, 0, SWP_NOSIZE)
      

  3.   

    Private Declare Function SetWindowPos Lib "user32" _
        (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
        ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
        ByVal cy As Long, ByVal wFlags As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Const SWP_NOSIZE = &H11
    Const HWND_TOPMOST = -1'代码:
    Dim hWnd As Long
    Call Shell("C:\WINDOWS\CALC.EXE", vbNormalFocus)
    hWnd = FindWindow(vbNullString, "计算器")
    Call SetWindowPos(hWnd, HWND_TOPMOST, 250, 250, 0, 0, SWP_NOSIZE)
      

  4.   

    Dim hWnd As Long
    a=Shell("C:\WINDOWS\CALC.EXE", vbNormalFocus)
    hWnd = FindWindow(vbNullString, a)
    Call SetWindowPos(hWnd, HWND_TOPMOST, 250, 250, 0, 0, SWP_NOSIZE)
      

  5.   

    csdn又出什么问题了?为什么发出的回复只能显示两行?还是我的电脑出了什么问题?
      

  6.   

    请问如何使用 HOOK ?
      

  7.   

    我这里有一个对shell的疑问
    大家都知道shell可以运行任意一个存在的程序,也可以使用程序的参数。
    可是怎么样将一个变量传递给shell,让shell调用程序时,那个程序能将这个变量作为自己的参数来运行呢?
    我想这应该是一个很有实际意义的问题。我希望知道解决方法的人能给大家一个答案。
      

  8.   

    “闪动”的解决方法:
    1 ,以窗体隐藏的方式 SHELL “计算器”
    2   隐藏中移动窗体到你想要的地方
    3   窗体.show
      

  9.   

    star sysPath & "\CalC.exe",