Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Сообщения Добавлено: 12.09.05 16:02  

Автор вопроса:  Softer | Web-сайт: hware.org.ua | ICQ: 203660381  
Подскажите кто-нить, плз, как мне запустив внешнюю прогу и зная ее заголовок послать ей сообщение свернутся. Спасибо

Ответить

  Ответы Всего ответов: 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-сайт: xury.zx6.ru
 Профиль | | #3
Добавлено: 12.09.05 17:42
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
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-сайт: hware.org.ua
 Профиль | | #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'ы не нужны. Просто

hWnd = FindWindow(vbNullstring, "заголовок";)
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 ...

Ответить

Страница: 1 |

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



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