2015-05-08 3 views
1

Я создал сценарий, который автоматически инициирует видеозвонок с пользователем по своему выбору.Максимизация окна Lync с использованием Powershell?

При запуске сценарий оставляет за собой стыковку видеовстречи, при этом мигает окно видеовызова 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(); 
+0

Посмотрите на эту функцию. Я использовал его с Lync в прошлом: https://gist.github.com/jakeballard/11240204 –

ответ

1

У меня нет Lync, но что-то, как это должно работать. Я использую имя процесса (или то, что я предполагаю), чтобы получить MainWindowHandle для окна Lync, а затем отправил команду для максимизации (cmd = 3, см. Здесь полный список значений: https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx).

Этот код может быть поврежден, если несколько процессов совпадают по имени, но оно должно начать работу; если вы можете получить PID или какой-либо другой, лучший уникальный идентификатор, используйте это. Просто беспорядок с выходом Get-Process, и вы должны увидеть ряд опций, и помните, что всегда можно использовать предложение Where для фильтрации вывода. Или, конечно, если есть какой-то способ получить MainWindowHandle непосредственно из $ LyncClient, еще лучше.

$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 
+0

Эрик, Большое вам спасибо. Теперь у меня возникают проблемы с тем, что иногда он максимизирует само lync-окно, а другие - в окне видеовызовов. Я попытался добавить время сна (тот, который вы видите в конце), и он отлично работает, когда lync уже запущен, но обработчик исключений в начале, который откроет lync, если он не будет, заставит его работать отлично, когда он захочет к. Его определенно причина, я не указываю, в каком окне происходит процесс «lync». Спасибо за ваш код. Определенно сделал разницу. – Walking

+0

По-видимому, мой представитель не достаточно высоко, чтобы прокомментировать ваш ответ ниже (только что создал эту учетную запись сегодня), но если вы еще этого не сделали, я бы рассмотрел рассмотрение $ LyncClient (используйте '$ LyncClient | Get-Member', чтобы увидеть его свойства , методы и т. д.) и посмотреть, можете ли вы как-то вытащить из него ПИД или какой-либо другой уникальный идентификатор. Либо это, либо запустить 'Get-Process' из оболочки сам по себе во время работы Lync и посмотреть, есть ли что-нибудь о возвращенной информации, которую вы можете использовать. –

0

Здесь код, который у меня есть.

Все еще нуждается в некоторых настройках, чтобы улучшить его, но он выполняет эту работу.

В настройках будет указано, какое окно нужно максимизировать, поскольку оно иногда увеличивает окно контактов 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("[email protected]") 
     [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 
Смежные вопросы