Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: FindWindow, FindWindowEx Добавлено: 26.01.04 16:15  

Автор вопроса:  NovichoK

Есть такая ситуация:

Одна программа загружается и делается невидимой (имею ввиду екзешник).

Я включаю вторую программу, которая должна сделать видимой первую программу. Как это сделать?

Мне уже в чате Вечный Юзер :) посоветовал путь, но тут возникла технологическая ошибка:

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

По идее любую запущенную невидимую форму должно делать видимой, ппочему не пашет?

Ответить

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

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



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 26.01.04 16:22
В твоём коде для того чтобы найти окно Б оно должно быть дочерним окну А. Перепиши код или перегрупируй элементы под код.

Ответить

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



Вопросов: 72
Ответов: 147
 Профиль | | #2 Добавлено: 26.01.04 16:29
Когда я делаю екзешник форма стает дочернмы окном? Если да ( а я практически уверен что это так) то чему оно стает дочерным окном?

Ответить

Номер ответа: 3
Автор ответа:
 NeForm@t



ICQ: 252999255 

Вопросов: 36
Ответов: 247
 Web-сайт: g--k.newmail.ru
 Профиль | | #3
Добавлено: 26.01.04 16:32

тут Ех вообще не нужен - ты же ищешь SDI - форму:

dim Hwnd1 as long

hwnd1=FindWindow("ThunderFormDC","Form1")'здесь один из параметров можно заменить vbNullString, Form1 - имя твоего окна

Ответить

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



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #4
Добавлено: 26.01.04 16:34

"По идее любую запущенную невидимую форму должно делать видимой, ппочему не пашет?"

Так как написан код, то найдет первую форму и сделает её видемой. Возможно, первым находит саму себя.

Возвращайся в чат :)

Ответить

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



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 26.01.04 19:02

Я тебе написал что делает твой код, а ты сам должен был сделать выводы.
Если не смог, так я тебе объясню.
---
>Когда я делаю екзешник форма стает дочернмы окном? Если да ( а я практически уверен что это так) то чему оно стает дочерным окном?
---
Ну ни бред ли это?
"Форма стает дочерним окном". Ты сам себя запутал.
"чему оно стает дочерным окном?". По умолчанию все окна дочерние рабочему столу (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 окна.

Ответить

Номер ответа: 6
Автор ответа:
 NeForm@t



ICQ: 252999255 

Вопросов: 36
Ответов: 247
 Web-сайт: g--k.newmail.ru
 Профиль | | #6
Добавлено: 27.01.04 13:41

2CyRax:

С чего ты взял что все окна "по умолчанию"(!! Это меня ещё больше смутило !!) дочерни дестктопу?

Ведь по сути у нас две поврехности - первая картинка, которая зависит исключильно от winlogon и порождённых ею процессов, а панель задач и рабочий стол(с пиктограммами)-это уже explorer.exe,если его убить то все окна остануться на месте, и никаким spy++ уже нельзя словить окно с картинкой, потому что это скорее даже не окно, а кусок памяти, содержащий рисунок

Ответить

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



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #7
Добавлено: 27.01.04 17:37
Ты не смущайся, а читай справочную литературу :)
И твой вопрос такой же бессмысленный как у Новичка.
Причём тут окна к процессам?

Ответить

Номер ответа: 8
Автор ответа:
 NeForm@t



ICQ: 252999255 

Вопросов: 36
Ответов: 247
 Web-сайт: g--k.newmail.ru
 Профиль | | #8
Добавлено: 27.01.04 17:56

а кто по твоему занимается прорисовкой окон и прочей графики(в частности картинки)

Ответить

Номер ответа: 9
Автор ответа:
 NeForm@t



ICQ: 252999255 

Вопросов: 36
Ответов: 247
 Web-сайт: g--k.newmail.ru
 Профиль | | #9
Добавлено: 27.01.04 17:57

а кто по твоему занимается прорисовкой окон и прочей графики(в частности картинки)?

Ответить

Номер ответа: 10
Автор ответа:
 NeForm@t



ICQ: 252999255 

Вопросов: 36
Ответов: 247
 Web-сайт: g--k.newmail.ru
 Профиль | | #10
Добавлено: 27.01.04 18:05

Ну да, извеняюсь, они становяться дочерними окну процесса csrss. Но как же тогда софтайс?

Ответить

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



Вопросов: 72
Ответов: 147
 Профиль | | #11 Добавлено: 27.01.04 21:22

to CyRax:

Короче меня запутала функция GetClassName  - я запустил форму передал ей хэндл а она мне класс окна. Так вот оказывается форма запущенная с помощью ВБ имеет тип ThunderFormDC, в то время как єкзешная форма ThunderRT6FormDC, вот отсюда я и делал выводы( кто ж знал что класс меняется если создаешь екзешник?)...

Ответить

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



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #12
Добавлено: 28.01.04 01:46

Это потому что во время написания приложения окна создаёт редактор, в котором ты пишешь код, а в экзешнике - MSVBVM60.DLL.

Виртуальная машина совершенно не нужна редактору. Попробуй ради прикола переместить её в папку, путь к которой неизвестен винде. Редактор всё равно запустится и будет запускать твои программы.

Ответить

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



Вопросов: 72
Ответов: 147
 Профиль | | #13 Добавлено: 31.01.04 17:27

to CyRax:

Вот только теперь я прочитал твое сообщение мне...я смотрю что ты меня за  полного ламера держишь(сообщение 5)...:) перед тем как использовать какие-то АПИ в крайнем случае я читаю их описание, и смотрю примеры с их использованием...так что можно сказать что ты меня оскорбил...

Ответить

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



ICQ: 307245054 

Вопросов: 5
Ответов: 7
 Web-сайт: google.com
 Профиль | | #14
Добавлено: 31.01.04 22:03
А может та программа, которая прячеться вообще бех формы... Если б я хотел свою прогу ныкать, то так бы и сделал...

Ответить

Страница: 1 |

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



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