Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: vb.net скрыть другую программу Добавлено: 22.06.10 01:45  

Автор вопроса:  Nevep
Здравствуйте. Подскажите как скрыть форму (или все формы другой программы).
Запускаю преобразование из rar архива в sfx:
RetVal = Shell("C:\Program Files\WinRAR\WinRAR.exe s 1.rar", vbHide)

Выскакивает окошка преобразовывания, несмотря на то, что стоит vbHide.
Я предполагаю, что это дочернее окно программы winrar, на которое vbHide не действует. Почитал ваш форум, решил скрыть форму с помощью api, но немогу узнать хэндл этой формы.
Такой код к примеру выдаёт каждый раз разные значения (одно из них 2786320828818522112) независимо запущен калькулятор или нет.
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MsgBox(FindWindow(vbNullString, "Калькулятор Плюс"))
End Sub

Я предполагал, что FindWindow должно возвратить false если титл ненайден.

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 22.06.10 10:21
Запускай на другом десктопе.

Ответить

Номер ответа: 2
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #2
Добавлено: 22.06.10 16:07
CreateProcess и в STARTUPINFO скрывать окно.

Ответить

Номер ответа: 3
Автор ответа:
 Nevep



Вопросов: 6
Ответов: 25
 Профиль | | #3 Добавлено: 22.06.10 21:05
CreateProcess и в STARTUPINFO скрывать окно.

Делаю так, но всё равно ошибка:

  1. Structure PROCESS_INFORMATION
  2.         Dim hProcess As Integer
  3.         Dim hThread As Integer
  4.         Dim dwProcessID As Integer
  5.         Dim dwThreadId As Integer
  6.     End Structure
  7.     Structure STARTUPINFO
  8.         Dim cbSize As Integer
  9.         Dim lpReserved As Integer
  10.         Dim lpDesktop As String
  11.         Dim lpTitle As String
  12.         Dim dwX As Integer
  13.         Dim dwY As Integer
  14.         Dim dwXSize As Integer
  15.         Dim dwYSize As Integer
  16.         Dim dwXCountChars As Integer
  17.         Dim dwYCountChars As Integer
  18.         Dim dwFillAttribute As Integer
  19.         Dim dwFlags As Integer
  20.         Dim wShowWindow As Integer
  21.         Dim cbReserved2 As Integer
  22.         Dim lpReserved2 As Integer
  23.         Dim hStdInput As Integer
  24.         Dim hStdOutput As Integer
  25.         Dim hStdError As Integer
  26.     End Structure
  27.     Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" ( _
  28.         ByVal lpApplicationName As String, _
  29.         ByVal lpCommandLine As String, _
  30.         ByRef lpProcessAttributes As Integer, _
  31.         ByVal lpThreadAttributes As Integer, _
  32.         ByVal bInheritHandles As Integer, _
  33.         ByVal dwCreationFlags As Integer, _
  34.         ByRef lpEnvironment As Integer, _
  35.         ByVal lpCurrentDirectory As String, _
  36.         ByRef lpStartupInfo As STARTUPINFO, _
  37.         ByRef lpProcessInformation As PROCESS_INFORMATION) As Integer
  38.  
  39. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  40. Dim proc As PROCESS_INFORMATION
  41.         Dim start As STARTUPINFO
  42.         start.cbSize = Len(start)
  43.         start.wShowWindow = 0
  44.         If CreateProcess(Nothing, "c:\windows\system32\cmd.exe", 0, 0, 0, vbNull, 0, Nothing, start, proc) = 0 Then
  45.             MsgBox(Err.LastDllError, MsgBoxStyle.Critical)
  46.         End If
  47.  End Sub


Выводит 1305 ошибку :(

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 22.06.10 22:00
Зачем такие извращения с API? В NET все гораздо проще..
  1.  
  2.             ProcessStartInfo info = new ProcessStartInfo("rar")
  3.             {
  4.                 WindowStyle = ProcessWindowStyle.Hidden,
  5.                 WorkingDirectory = @"C:\Program Files\WinRAR",
  6.                 Arguments = "a archive \"E:\\Мусор\""
  7.             };
  8.             using (Process process = Process.Start(info))
  9.             {
  10.                 process.WaitForExit();
  11.             }

Ответить

Номер ответа: 5
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #5
Добавлено: 22.06.10 22:07
Судя по его коду, он попутал разделы.

Ответить

Номер ответа: 6
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #6
Добавлено: 22.06.10 22:08
Неверно, смотри значение dwFlags в STARTUPINFO. Флаг призван показать, какие поля этой структуры используются.

Ответить

Номер ответа: 7
Автор ответа:
 Nevep



Вопросов: 6
Ответов: 25
 Профиль | | #7 Добавлено: 22.06.10 22:24
Судя по его коду, он попутал разделы.

Да, код на С. Но всё равно спасибо. И это не работает...
При создании архива всё норм, окно не выскакивает
  1. Dim startInfo As New ProcessStartInfo
  2.         iFileName$ = "1.exe"
  3.         iArhivName$ = "1.rar"
  4.         startInfo.FileName = "C:\Program Files\WinRAR\WinRAR.exe"
  5.         startInfo.Arguments = " a """ & iArhivName$ & """ """ & iFileName$ & """ -z1.txt"
  6.         startInfo.WindowStyle = ProcessWindowStyle.Hidden
  7.  
  8.         Process.Start(startInfo)

Но когда преобразовываю в sfx выскакимает на долю секунды окно
  1. Dim startInfo As New ProcessStartInfo
  2.         startInfo.FileName = "C:\Program Files\WinRAR\WinRAR.exe"
  3.         startInfo.Arguments = " s 1.rar"
  4.         startInfo.WindowStyle = ProcessWindowStyle.Hidden
  5.  
  6.         Process.Start(startInfo)

Т.е. либо ProcessWindowStyle.Hidden не скрывает дочерние окна
либо это окно винрара не дочернее (хз бывает ли так:))

Ответить

Номер ответа: 8
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #8 Добавлено: 22.06.10 23:59
Может он ещё одну свою копию стартует?

Ответить

Номер ответа: 9
Автор ответа:
 Nevep



Вопросов: 6
Ответов: 25
 Профиль | | #9 Добавлено: 23.06.10 00:06
Может быть...
Поэтому я хотел по названию этой формы узнать её хэндл, а потом уже пытаться скрыть форму зная хэндл окна. Но код из первого сообщения неработает :(

Ответить

Номер ответа: 10
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #10 Добавлено: 23.06.10 00:30
Но когда преобразовываю в sfx выскакимает на долю секунды окно

Это потому что ты юзаешь WinRAR.. а он имеет гуй. А тебе надо юзать консольную версию архиватора,она лежит в том же каталоге и называется просто Rar. Главное окно(консольное) мы скрываем при старте процесса, а других окон у нее нету и выскакивать больше нечему..

ProcessWindowStyle.Hidden не скрывает дочерние окна

А с какого перепуга он их скрывать будет?? Это абсолютно другие окна со своими стилями и своими аттрибутами..

Ответить

Номер ответа: 11
Автор ответа:
 Nevep



Вопросов: 6
Ответов: 25
 Профиль | | #11 Добавлено: 23.06.10 00:41
Действительно, переименовал
  1. startInfo.FileName = "C:\Program Files\WinRAR\WinRAR.exe"

на
  1. startInfo.FileName = "C:\Program Files\WinRAR\RAR.exe"

и заработало. Всем спасибо

Ответить

Номер ответа: 12
Автор ответа:
 Lim



ICQ: 397722597 

Вопросов: 1
Ответов: 7
 Профиль | | #12 Добавлено: 24.06.10 07:41
теперь можешь вернуться к свеому первоначальному, более простому варианту:
  1. RetVal = Shell("C:\Program Files\WinRAR\RAR.exe s 1.rar", vbHide)

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 24.06.10 10:14
теперь можешь вернуться к свеому первоначальному, более простому варианту:

простой - совсем не значит правильный..

Ответить

Номер ответа: 14
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #14
Добавлено: 24.06.10 14:21
Я бы вообще компонентом распаковал. А эти твои игры с хайдами не очень нравятся антивирусам.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам