'Zamykanie okna programu
'http://vb4all.canpol.pl/tips/tips.htm
'możesz skopiować ten kod żywcem do modułu VB lub MS Access
'Zamykanie okna programu za pomocą funkcji KillHim możliwe jest na dwa sposoby:
' 1. wg parametru Caption
' 2. wg parapetru Class
' Caption to w uproszczeniu nazwa okna, widoczna w belce okna.
' posługiwanie sie ta nazwą jest o tyle niewygodne, że różne wersje językowe
' danego programu mają różne wartości Caption dla z pozoru tego samego proramu.
' Np. dla kalkulatora w Win95PL parametr Caption="Kalkulator".
' W wersji angielskiej Caption="Calculator".
' Class to nazwa klasy dowolnego elementu okna oraz samego okna.
' Nas interesuje fakt, że Class pokazuje również nazwę klasy okna programu, która
' w odróżnieniu od Caption jest zazwyczaj jednakowa dla różnych wersji programu.
'
' Jeśli chcemy zamykać konkretny program, którego nazwę (Caption) znamy, można skorzystać
' z zamykania wg parametru Caption.
' W przeciwnym razie należy znaleźć wartość Class dla okna i zamykać wg tego parametru.
' Wartość Class jak i Caption dla danego okna (obiektu) można znaleźć np. za pomocą programu HANDLE SPY.
' (powinien być dostępny w vb4All - miniFTP, gdzie go przesłałem).
' Można też skorzystać z umieszczonej poniżej funkcji GetClass
'(p)1999 Carampuc
'email:
'
'Autor nie ponosi odpowiedzialności za ewentualne szkody wynikłe
'z używania poniższego kodu ;-)
'=============================================================================
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam
As Any) As Long
Private Declare Function GetClassName Lib "user32" Alias
"GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal
nMaxCount As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Const WM_CLOSE = &H10
Const SW_SHOWNORMAL = 1
'==========================================================================================
' KillHim
'
' Zamknięcie okna programu
'==========================================================================================
' Działanie funkcji polega na wysłaniu komunikatu WM_CLOSE do okna wybranego programu.
'
' wywołanie: KillHim(Class,Caption)
' IN: Class - nazwa klasy okna programu
' Caption - tytuł okna programu
' UWAGA: wywołanie funkcji powinno zawierać wyłącznie jeden parametr
' np: zamknięcie kalkulatora
' Call KillHim("SciCalc")'każde Windows
' Call KillHim(,"Kalkulator") 'tylko Windows PL
' UWAGA: jeśli zamykamy aplikację, która powinna zapamiętać przed zamknięciem jakieś dane
' (np. notepad po wpisaniu i niezapisaniu jakiegoś tekstu) aplikacja taka wyświetli
' własny komunikat o chęci zapisania danych.
' Użycie ShowWindow powoduje, że w takim przypadku aplikacja taka pokaże się nam.
Public Sub KillHim(Optional Class As String = vbNullString, Optional Caption As String = vbNullString)
Dim wHwnd As Long
wHwnd = FindWindow(Class, Caption)
If wHwnd <> 0 Then
ShowWindow wHwnd, SW_SHOWNORMAL
PostMessage wHwnd, WM_CLOSE, 0&, 0&
End If
End Sub
'==========================koniec: KillHim=================================================
'==========================================================================================
' GetClass
'
' Znalezienie klasy okna programu wg jego nazwy na belce okna (Caption)
'==========================================================================================
'
' wywołanie: GetClass(Caption)
' IN: Caption - tytuł okna programu
' UWAGA: program musi buć uruchomiony
' np. dla kalkulatora:
' s=GetClass("Kalkulator")
' OUT: nazwa klasy okna programu
' lub łańcuch pusty, jeśli program o podanym Caption nie jest aktualnie uruchomiony
' UWAGA: jak wynika z wartości OUT procedura ta może również służyć do sprawdzenia, czy jakiś
' program jest aktualnie uruchomiony.
Public Function GetClass(Caption As String) As String
Dim klasa As String
Dim wHwnd As Long, ret As Long
wHwnd = FindWindow(vbNullString, Caption)
klasa = Space(256)
ret = GetClassName(wHwnd, klasa, 256)
GetClass = klasa