2017-08-02 94 views
0

我想找回更多帮助。 几周前我仍然和我的问题在同一个项目上,但又陷入了另一个困境。Winmove()不适用于citrix应用程序

我有一个多屏幕(赢7)设置,并试图编写一个应用程序,将启动一些应用程序,并将其移动/调整到正确的位置。我正在做vb.net中的控制台应用程序。 在我收到我最后一个问题的帮助后,我现在可以启动,移动,调整大小,关闭我需要的所有应用程序。 不幸的是我需要通过Citrix运行两个应用程序。 一个是Excel工作表。 我可以找到这些窗口的窗口句柄,并选择它们或关闭它们,但MoveWin()或SetWindowPos()似乎没有做任何事情,虽然我想移动窗口的标题栏变成蓝色,所以我知道它是选择它.. 任何援助将不胜感激。 下面粘贴了一段代码。我在Excel目前测试此,我将它移植到对面我的控制台应用程序,一旦工作... 谢谢...

Public Declare Function SetWindowPos Lib "user32.dll" (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 

Public Const SWP_FRAMECHANGED = &H20 'Fully redraw the window in its new position. 

Sub MoveWin() 
    Dim retval As Long 
    Dim hwnd As Long 
    Dim RetWhnd As Long 

    hwnd = '123456' 

    retval = SetWindowPos(hwnd, RetWhnd, 0, 0, 600, 400, SWP_FRAMECHANGED) ' Application.hwnd 
End Sub 
+0

为什么我使用excel和vba可能会问?我写了一个方便的实用程序,其行为有点像spy ++ in。它列出了工作表上的所有进程和子进程,这样我可以单击一个句柄,然后单击关闭或移动等,然后测试我的代码不需要改变代码的不同应用程序。这就是我所知道的关闭移动等,对于直接在Windows中运行的应用程序工作正常,但不适用于通过citrix运行的应用程序。对我来说有趣的是我可以移动主要的Citrix窗口jut没有任何产生的过程... – perfo

+0

啊,我看到了关于vb.net的困惑我已经标记了问题vb.net。虽然我的测试不在vb.net,但我的最终解决方案是,我很乐意接受Vb.net或VB6的建议。我如何添加一个VB6标志到我的问题?谢谢 – perfo

+0

会有人对以下内容有任何意见。如果我将移动代码放到客户端应用程序中,以便在启动时将其自动移动到某个屏幕位置?这会工作吗?我怎么能发送它的信息告诉它去哪里尽管是否有可能将一些东西添加到命令行语句中?我在Citrix论坛上提出了这个问题,但我认为我是唯一的成员,并且我对自己没有任何帮助;-) – perfo

回答

0

我不是在我家的机器,所以我无法证实这个,但我相当确定VB 6在编译对话框(也许最后一个)上有一个标签,它有一个与citrix相关的选项复选框。如果它不在那里,它可能在项目属性中。

+0

你知道这是否在VBA环境中可用?我有一个很好的搜索,但目前看不到它。我想另一个问题是,你知道它是什么吗?感谢您的回复.... – perfo

+0

在我的会计应用程序中,我有一个使用Citrix的特定用户。我不知道它具体做了什么,但是我发现,既然我知道那个客户端,我会检查这个框,因为它只是说明了使应用程序符合Citrix标准的影响。它并没有影响我的整个用户群,所以我把它设置了。我怀疑它可用于VBA,我只在VB 6.0中看到它。 –

+0

谢谢,比尔,我似乎无法找到很多关于它的内容,但看起来它可能包含在已编译的应用程序中,以使其作为客户端应用程序表现得更好。但我没有任何问题运行其他vb.net或VBA的东西客户端,所以不知道它是什么。我会继续寻找。 – perfo

0

以防万一这可以帮助别人。我已经联系了思杰的人,他们基本上不知道答案。我至少想知道这是否可能。无论如何,据我所知,移动命令似乎不可能贯穿思杰的分歧。我提出的解决方案是将代码的实际移动部分留在远程运行的应用程序中。这是构建代码到Citrix运行的应用程序,以查看本地计算机上的ini文件并从中接收指令。 这现在工作的很好,但只适用于有能力运行容器语言或可以以某种方式包装的应用程序。