Одна программа загружается и делается невидимой (имею ввиду екзешник).
Я включаю вторую программу, которая должна сделать видимой первую программу. Как это сделать?
Мне уже в чате Вечный Юзер :) посоветовал путь, но тут возникла технологическая ошибка:
Const SW_HIDE = 1 Const SW_SHOW = 5 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 Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Sub Command1_Click() Dim a, b a = FindWindow("ThunderFormDC", vbNullString) b = FindWindowEx(a, 0, "ThunderFormDC", vbNullString) ShowWindow b, SW_SHOW
End Sub
По идее любую запущенную невидимую форму должно делать видимой, ппочему не пашет?
Я тебе написал что делает твой код, а ты сам должен был сделать выводы. Если не смог, так я тебе объясню. --- >Когда я делаю екзешник форма стает дочернмы окном? Если да ( а я практически уверен что это так) то чему оно стает дочерным окном? --- Ну ни бред ли это? "Форма стает дочерним окном". Ты сам себя запутал. "чему оно стает дочерным окном?". По умолчанию все окна дочерние рабочему столу (0) "я практически уверен". Практически уверенным можно быть только исходя из практики. === Если я тебя ещё больше запутал, то могу и распутать. Начнём с твоего непонятного высказывания. --- Вопрос "Когда я делаю екзешник форма стает дочернмы окном?" явно не может иметь ответа. Окна в Windows не зависят от того, когда ты делаешь экзешник. Виндовс - работает в динамическом режиме и ты можешь в любое время, когда Windows запущена, вызвать из библиотеки USER32.DLL функцию CreateWindowEx. В твоём случае VB делает это за тебя, а ты просто пишешь Load Form1 или шлёпаешь форму визуально. Чему окно дочерние определяет исключительно программист (даже в VB). А когда ты шлёпаешь форму в VB6, она как я уже говорил становится дочерней Десктопу. Остальные окна (контролы тоже являются окнами) программы могут быть либо дочерними твоему первому окну или Десктопу. VB распределяет окна так: MDI FORM - дочернее Рабочему столу; FORM - дочернее MDI FORM или Рабочему столу; Элемент управления (Control) - дочерний FORM или другому Control.
Если ты не можешь найти исходника FindWindowEx для Copy & Paste в свой VB-код, то ты не сможешь использовать эту API. Это верно будет до тех пор пока ты не выучишь основы какого нибудь языка (скрипты не в счёт), отличного от VB
Когда ты вызывал функцию поиска окна второй раз то в первым параметром у тебя был "a". Что такое "а" ты наверное не знаешь. Я тебе скажу - это hWnd найденного окна. Теперь смотрим как ты его применил:
=== Из MSDN HWND FindWindowEx( HWND hwndParent, // handle to parent window HWND hwndChildAfter, // handle to a child window LPCTSTR lpszClass, // pointer to class name LPCTSTR lpszWindow // pointer to window name );
hwndParent Handle to the parent window whose child windows are to be searched. If hwndParent is NULL, the function uses the desktop window as the parent window. The function searches among windows that are child windows of the desktop.
Windows NT 5.0 and later: If hwndParent is HWND_MESSAGE, the function searches all message-only windows. ===
Ты попросил Windows найти окно, у которого родитель "a". Что такое "a" описано выше.
=== И прочти то что написал NeForm@t. По поводу поиска MDI или SDI окна.
С чего ты взял что все окна "по умолчанию"(!! Это меня ещё больше смутило !!) дочерни дестктопу?
Ведь по сути у нас две поврехности - первая картинка, которая зависит исключильно от winlogon и порождённых ею процессов, а панель задач и рабочий стол(с пиктограммами)-это уже explorer.exe,если его убить то все окна остануться на месте, и никаким spy++ уже нельзя словить окно с картинкой, потому что это скорее даже не окно, а кусок памяти, содержащий рисунок
Короче меня запутала функция GetClassName - я запустил форму передал ей хэндл а она мне класс окна. Так вот оказывается форма запущенная с помощью ВБ имеет тип ThunderFormDC, в то время как єкзешная форма ThunderRT6FormDC, вот отсюда я и делал выводы( кто ж знал что класс меняется если создаешь екзешник?)...
Это потому что во время написания приложения окна создаёт редактор, в котором ты пишешь код, а в экзешнике - MSVBVM60.DLL.
Виртуальная машина совершенно не нужна редактору. Попробуй ради прикола переместить её в папку, путь к которой неизвестен винде. Редактор всё равно запустится и будет запускать твои программы.
Вот только теперь я прочитал твое сообщение мне...я смотрю что ты меня за полного ламера держишь(сообщение 5)... перед тем как использовать какие-то АПИ в крайнем случае я читаю их описание, и смотрю примеры с их использованием...так что можно сказать что ты меня оскорбил...