使用 Powershell 最大化 Lync 窗口?
Posted
技术标签:
【中文标题】使用 Powershell 最大化 Lync 窗口?【英文标题】:Maximizing Lync Window Using Powershell? 【发布时间】:2015-05-08 14:23:01 【问题描述】:我创建了一个脚本,它会自动与我选择的用户发起视频通话。
运行时,脚本会停止视频通话,同时 lync 视频通话窗口会闪烁。
如何在脚本运行时让这个窗口最大化并进入全屏模式?
非常感谢您的帮助。
下面是我的代码
$assemblyPath = “C:\Program Files (x86)\Microsoft Office 2013\LyncSDK\Assemblies\Desktop\Microsoft.Lync.Model.DLL”
Import-Module $assemblyPath
$LyncClient = [Microsoft.Lync.Model.LyncClient]::GetClient()
$StartVideoCallMethod =
$Conversation = $this.ConversationManager.AddConversation();
$contact = $LyncClient.ContactManager.GetContactByUri("useremailhere")
[void]$Conversation.AddParticipant($contact);
[void]$Conversation.Modalities['AudioVideo'].BeginConnect(, 0);
;
Add-Member -InputObject $LyncClient -MemberType ScriptMethod -Name StartVideoCall -Value $StartVideoCallMethod -Force;
# Initiate the video call
$Conversation = $LyncClient.StartVideoCall();
【问题讨论】:
看看这个函数。我过去曾在 Lync 上成功使用过它:gist.github.com/jakeballard/11240204 【参考方案1】:我没有 Lync,但这样的东西应该可以工作。我正在使用进程名称(或我猜的名称)来获取 Lync 窗口的 MainWindowHandle,然后发送该命令以最大化(cmd=3,请参阅此处以获取完整的值列表:https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx )。
如果多个进程按名称匹配,此代码可能会中断,但它应该可以帮助您开始;如果您可以获得 PID 或其他更好的唯一标识符,请使用它。只是弄乱 Get-Process 的输出,您应该会看到许多选项,并记住您始终可以使用 Where 子句来过滤输出。或者当然,如果有某种方法可以直接从 $LyncClient 获取 MainWindowHandle,那就更好了。
$w = Get-Process -Name "Lync"
$Win32ShowWindowAsync = Add-Type –memberDefinition `
'[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);' `
-name “Win32ShowWindowAsync” -namespace Win32Functions –passThru
$Win32ShowWindowAsync::ShowWindowAsync($w.MainWindowHandle,3) | Out-Null
【讨论】:
埃里克,非常感谢你。我现在遇到的问题是,有时它会最大化 lync 窗口本身,而另一些则会最大化视频通话窗口。我尝试添加一个睡眠时间(你在最后看到的那个),它在 lync 已经运行时工作正常,但一开始的异常处理程序将打开 lync 如果它不是会导致它在需要时完美工作到。这绝对是因为我没有指定进程“lync”的哪个窗口。谢谢你的代码。绝对有所作为。 显然我的代表不够高,无法在下面评论您的答案(今天刚刚创建了这个帐户),但如果您还没有,我会考虑检查 $LyncClient(使用$LyncClient | Get-Member
来查看它的属性、方法等),看看你是否可以以某种方式从中提取 PID 或其他一些唯一标识符。或者在 Lync 运行时单独从 shell 运行 Get-Process
,看看是否有任何关于返回的信息可以使用。【参考方案2】:
这是我到目前为止的代码。
仍然需要一些调整来完善它,但它可以完成工作。
调整将指定最大化哪个窗口,因为它有时会最大化 lync 联系人窗口。
代码
$assemblyPath = “C:\Program Files (x86)\Microsoft Office 2013\LyncSDK\Assemblies\Desktop\Microsoft.Lync.Model.DLL”
Import-Module $assemblyPath
$exePath = "C:\Program Files\Microsoft Office 15\root\office15\lync.exe"
if(!(get-process | ?$_.path -eq $exePath))
Start-Process -FilePath $exePath -WindowStyle Maximized
Start-Sleep -s 10
$LyncClient = [Microsoft.Lync.Model.LyncClient]::GetClient()
$StartVideoCallMethod =
$Conversation = $this.ConversationManager.AddConversation();
$contact = $LyncClient.ContactManager.GetContactByUri("ernesto.gomila@quirchfoods.com")
[void]$Conversation.AddParticipant($contact);
[void]$Conversation.Modalities['AudioVideo'].BeginConnect(, 0);
;
Add-Member -InputObject $LyncClient -MemberType ScriptMethod -Name StartVideoCall -Value $StartVideoCallMethod -Force;
# Initiate the video call
$Conversation = $LyncClient.StartVideoCall();
#Maximize window
$w = Get-Process -Name "lync"
$Win32ShowWindowAsync = Add-Type –memberDefinition @"
[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@ -name “Win32ShowWindowAsync” -namespace Win32Functions –passThru
Start-Sleep -s 2
$Win32ShowWindowAsync::ShowWindowAsync($w.MainWindowHandle,3) | Out-Null
【讨论】:
以上是关于使用 Powershell 最大化 Lync 窗口?的主要内容,如果未能解决你的问题,请参考以下文章
使用 PowerShell 通过 AD 组成员授予 Lync 策略
使用PowerShell更新 Lync/Skype边缘服务器内网证书
在 Powershell 中迭代字符串的通用列表(Lync 聊天室成员)