Выполнение программы с помощью runas и изменение заголовка окна

В эти дни я работаю с несколькими разными учетными записями домена, и у меня есть около дюжины программ, которые нужно запускать под определенными учетными записями. Некоторые из них необходимо запускать под одной учетной записью домена, чтобы получить доступ к «этому», и под другой учетной записью, чтобы получить доступ к «этому». Мое решение состояло в том, чтобы иметь ярлыки, которые используют runas с переключателем /user, и это сработало нормально.

Однако я хотел бы сделать еще один шаг вперед. Есть ли способ изменить заголовок окна программы, которую я открываю? Например, ССМС:

C:\Windows\System32\runas.exe /savecred /user:DOMAINA\username "C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\Ssms.exe"

Я пробовал несколько вариантов добавления «title MYTITLE» и еще много чего, но пока не нашел ничего, что работало бы.

Может быть, это возможно с помощью Powershell?


person tMole    schedule 25.09.2014    source источник


Ответы (2)


/savecred позволяет владельцу учетной записи выполнять любые команды от вашего имени. В вашем случае это не имеет значения, но имейте в виду. Это только в винде из соображений совместимости. В будущем он исчезнет.

Если это командная строка, запустите cmd и используйте команду title, затем запустите свою программу.

C:\Users\User>title /?
Sets the window title for the command prompt window.

TITLE [string]

  string       Specifies the title for the command prompt window.

Если программа с графическим интерфейсом, этот пример кода VB6 меняет заголовки. Вы можете использовать vb.net, чтобы сделать из него программу.

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Sub Main()
    On Error Resume Next
    hwindows = FindWindow(vbNullString, "Microsoft Works Calendar")
    Ret = SetWindowText(hwindows, "Calandar")
End Sub

Здесь показано, как создавать программы vb.net и преобразовывать vbs/vb6 http://social.msdn.microsoft.com/Forums/en-US/adcae113-4758-481a-a367-60d5d14d97d6/this-как-превратить-vbs-и-js-файлывexe-файлы-из-команднойстроки-без-сторонних-инструментов?forum=scripting

Это похоже на манипулирование Windows appactivate между несколькими экземплярами Internet Explorer (PS: В Win 7 и более поздних версиях sendmail является зарезервированным именем, поэтому его необходимо изменить).

В среде .NET (которую использует powershell) нет команд Windows, управление окнами других программ не соответствует философии .NET. Это, вероятно, единственная область, где .NET не отражает API Windows. Программы .NET могут манипулировать своими собственными окнами через свои объекты форм.

person Noodles    schedule 25.09.2014

Поскольку вы упомянули powershell, очень легко управлять его заголовком, просто введите эту команду в начало любого скрипта ps1. Когда он запустится, вы увидите измененный заголовок.

$host.ui.RawUI.WindowTitle = "Changed Title"

или вот повторно используемая функция powershell.

Function Change_Console_Title ($title) {$host.ui.RawUI.WindowTitle = "$title"}

Применение

Change_Console_Title -title "Woot"
person Knuckle-Dragger    schedule 26.09.2014