我想听听你对这个问题的看法:我的桌面上有两个Citrix Receiver/Workspace会话,我想根据它们的窗口标题来调整窗口的大小。
我知道通过进程id执行此操作的解决方案,例如
Get-Process | Where-Object {$。名称-eq 'CDVIEWER' -和$。MainWindowTitle -like 'Window1'} | set-window -X 0 -y 0 -width3850 -height 1150 -passthru
问题是所有的Citrix工作空间客户端窗口具有相同的进程id。这导致的结果是,我只能调整前台的Citrix Windows的大小。
是否有一种方法来设置窗口大小的标题,而不是它的进程id?
谢谢,托马斯。
你需要使用从user32.dll导入的本地函数来访问各个窗口-我认为你不能单独从powershell中做到这一点。从上面的链接签出函数EnumChildWindows
,GetWindowText
和MoveWindow
-这些是您所需功能的构建块。
过程类似于
-
获取
MainWindowHandle
-例如[System.IntPtr] $WindowHandle =(get-process -Name notepad).MainWindowHandle
(但用于citrix进程)。 -
使用
EnumChildWindows
和上面的句柄来定位它的所有子窗口 -
遍历子窗口并使用
GetWindowText
找到所需的窗口(特别是它的句柄)。只看带有句柄的窗口0 -可能有多个其他无效或不可见的窗口。 -
使用
MoveWindow
来实际改变窗口的位置(使用上面的窗口句柄)。
我建议你搜索上面的每一个,以及如何从powershell执行,而不是试图自己将API调用移植到powershell。使用这些外部函数可能有点棘手,但它们要强大得多。
如果你自己写,总是用try…catch…最后要确保你的总是清理资源。Powershell不能用这些功能为你做到这一点。如果你打开它,关闭它,如果你分配内存,之后释放它等等。
我无法访问Citrix,但以上功能应该为您指明正确的方向。