Страница: 1 |
Страница: 1 |
Вопрос: Сообщения
Добавлено: 12.09.05 16:02
Автор вопроса: Softer | Web-сайт:
Подскажите кто-нить, плз, как мне запустив внешнюю прогу и зная ее заголовок послать ей сообщение свернутся. Спасибо
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #1
Добавлено: 12.09.05 16:53
FindWindow, SendMessage, WM_QUIT.
Номер ответа: 2
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #2
Добавлено: 12.09.05 16:54
Хотя в большинстве случаев вместо SendMessage лучше использовать TerminateProcess - он хвостов не оставляет
Номер ответа: 3
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #3
Добавлено: 12.09.05 17:42
Private Const WM_QUIT = &H12
Private Sub Command1_Click()
SendMessage Me.hwnd, WM_QUIT, 0, 0
End Sub
А чё то у меня воот этот код не пашет... из таймера тоже. может ты хотел сказать WM_CLOSE? но оно не помогает свернуться
Номер ответа: 4
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #4
Добавлено: 12.09.05 18:00
WM_QUIT Notification
--------------------------------------------------------------------------------
The WM_QUIT message indicates a request to terminate an application and is generated when the application calls the PostQuitMessage function. It causes the GetMessage function to return zero.
Syntax
WM_QUIT
WPARAM wParam
LPARAM lParam;
Parameters
wParam
Specifies the exit code given in the PostQuitMessage function.
lParam
This parameter is not used.
Return Value
This message does not have a return value because it causes the message loop to terminate before the message is sent to the application's window procedure.
Remarks
The WM_QUIT message is not associated with a window and therefore will never be received through a window's window procedure. It is retrieved only by the GetMessage or PeekMessage functions.
Do not post the WM_QUIT message using the PostMessage function; use PostQuitMessage.
Номер ответа: 5
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #5
Добавлено: 12.09.05 20:10
А при чём тут горячо обсуждаемый WM_QUIT ? Нужно же не закрыть программу, а свернуть окно.
Для этого есть ShowWindow + SW_HIDE
Номер ответа: 6
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #6
Добавлено: 12.09.05 20:11
Или WM_SYSCOMMAND + SC_MINIMIZE
Номер ответа: 7
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #7
Добавлено: 12.09.05 23:18
свернуть:
Public Function Window_show(hWnd As Long, ShowOptions As Byte)
'Куча действий с окном
'Значения ShowOptions:
'0 - Hide
'3 - MAXIMIZE
'6 - MINIMIZE
'9 - RESTORE
'5 - SHOW
'10 -SHOWDEFAULT
'3 - SHOWMAXIMIZED
'2 - SHOWMINIMIZED
'7 - SHOWMINNOACTIVE
'8 - SHOWNA
'4 - SHOWNOACTIVATE
'1 - SHOWNORMAL
ShowWindow hWnd, ShowOptions
End Function
найти зная текст в заголовке
Private Function EnumWinProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
'Поиск hwnd процесса на панели задач
Dim k As Long, sName As String
If lParam <> 0 Then
If IsWindowVisible(hWnd) And GetParent(hWnd) = 0 Then
sName = Space$(128)
k = GetWindowText(hWnd, sName, 128)
If k > 0 Then
sName = Left$(sName, k)
If UCase(sName) Like UCase(sPattern) Then
hFind = hWnd
EnumWinProc = 0
Exit Function
End If
End If
End If
Else
sName = Space$(128)
k = GetWindowText(hWnd, sName, 128)
If k > 0 Then
sName = Left$(sName, k)
If UCase(sName) Like UCase(sPattern) Then
hFind = hWnd
EnumWinProc = 0
Exit Function
End If
End If
End If
EnumWinProc = 1
End Function
Public Function FindWindowWild(sWild As String, Optional OnlyTaskBar As Boolean = True) As Long '(Вызывать эту!)
'Возвращает hwnd процесса на панели задач по имени
sPattern = sWild
EnumWindows AddressOf EnumWinProc, OnlyTaskBar
FindWindowWild = hFind
End Function
'-----------------------------------------
Номер ответа: 8
Автор ответа:
Softer
ICQ: 203660381
Вопросов: 29
Ответов: 205
Web-сайт:
Профиль | | #8
Добавлено: 13.09.05 13:01
2 HOOLIGAN: спасибо, что объяснил это им раньше меня!
2HACKER: "Invalid use of AddressOf operator"...
PS: мне нужем универсальный способ для 9х и ХР систем.
Номер ответа: 9
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #9
Добавлено: 13.09.05 14:16
Если программа запущена, и её заголовок известен, то callback'и и adressof'ы не нужны. Просто
ShowWindow hWnd,SW_HIDE
И плюс не забыть декларацию FindWindow, ShowWindow и SW_HIDE
А "Invalid use of AddressOf operator" - это видимо от того, что код вписал не в модуле.
Номер ответа: 10
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #10
Добавлено: 13.09.05 15:00
2 Softer
То у тебя в ДНК глюки... пиши это в модуле, понаходи все нужные API, FindWindowWild чуть круче чем FindWindow, ей можно указывать шаблоново, типа "*Mi??OSoFt In[s-u]ernet*" (...Microsoft Internet...), также можно указать какие окна искать, только в таскебаре или абсолютно все... ну а далее когда хендел получишь, ShowWindow ...