Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Открыть окно процесса, запущенного скрытым


Автор: kuzyaka 6.8.2008, 14:01
Запускаю процесс, который создает SSH туннель с удаленным компом.
Код

    MyProcessSSH.StartInfo.FileName = "putty.exe"
    MyProcessSSH.StartInfo.Arguments = "аргументы"
    MyProcessSSH.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    MyProcessSSH.Start()

Запускаю в скрытом режиме, чтобы не мешало работать.
Потом, по этому туннелю захожу на сервера удаленного компа - MySQL и VNC.
По окончании работ, мне нужно закрыть туннель, передав в окно putty команду "exit" с помощью
Код

   AppActivate(MyProcessSSH.Id)
   My.Computer.Keyboard.SendKeys("exit~", True)

Но это работает только когда окно видимо.
Вот тут и затык.

Как сделать видимым скрытый процесс?

Автор: nagg 6.8.2008, 17:52
можно послать окну сообщение WM_SHOWWINDOW c нужными параметрами (т.е. использовать WinAPI - SendMessage)

Автор: kuzyaka 6.8.2008, 18:10
Цитата(nagg @ 6.8.2008,  17:52)
можно послать окну сообщение WM_SHOWWINDOW c нужными параметрами (т.е. использовать WinAPI - SendMessage)


Попробовал.
Код

  Public Const WM_SHOWWINDOW = &H18

  Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
...
    Dim hwnd As IntPtr = MyProcessSSH.MainWindowHandle
    SendMessage(hwnd, WM_SHOWWINDOW, 1, 3)


Вообще никаких реакций на скрытое или открытое окно!!!

Попробовал функцию ShowWindow.
Код

  Public Const SW_HIDE = 0
  Public Const SW_SHOWMINIMIZED = 2
  
  Declare Function ShowWindow Lib "user32" Alias "ShowWindow" _
(ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer
...
    MyProcessSSH.StartInfo.FileName = "putty.exe"
    MyProcessSSH.StartInfo.Arguments = "аргументы"
    MyProcessSSH.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
    MyProcessSSH.Start()

   ;Необходима пауза, чтобы окно успело сформироваться
    System.Threading.Thread.Sleep(3000)

    Dim hwnd As IntPtr = MyProcessSSH.MainWindowHandle
    ShowWindow(hwnd, SW_HIDE)
...
    ShowWindow(hwnd, SW_SHOWMINIMIZED)
    AppActivate(MyProcessSSH.Id)
    My.Computer.Keyboard.SendKeys("exit~", True)
    MyProcessSSH.Close()

Результат - все прекрасно работает!!! smile 

Есть, правда одно НО!

Процесс нельзя стартовать в состоянии hidden!!!
А то функция ShowWindow не будет работать.
Это должна сделать сама функция ShowWindow, тогда она будет менять состояние окна по вашему усмотрению.

PS
Жаль  только, что без WinAPI не удалось обойтись. smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)