Szybkie szukanie
Słowo kluczowe:
niedziela, 01 sierpień 2010
Start arrow Tips & Tricks arrow KillHim - modul do zamykania programu
Google
 
KillHim - modul do zamykania programu Drukuj E-mail
Napisał Administrator   
wtorek, 24 styczeń 2006
'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

End Function

'==========================koniec: GetClass===============================================

Komentarze

Aby dodać komentarz zaloguj się. Jeśli nie masz konta, załóż je sobie.
Tylko zarejestrowani użytkownicy mogą pisać komentarze.

Powered by AkoComment 2.0!

< Poprzedni   Następny >

Menu główne
Start
Teoria
VB.NET
Api
Tips & Tricks
Warsztat
VBMagazine
Pliki
Forum
Literatura
Ankiety
Linki
Szukaj
Wyślij program
Napisz do nas
Redakcja
Logowanie
Login

Hasło

Zapamiętaj mnie
Nie pamiętasz hasła?
Nie masz konta? Załóż je sobie
Gościmy
Aktualnie jest 27 gości online
Statystyka
Użytkownicy: 10811
Newsy: 230
Odnośniki: 47
Odwiedzających: 3426937
Mambo is Free Software released under the GNU/GPL License.