Windows api закрыть окно

What is the FindWindow Function?

The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings.

This function does not search child windows. This function does not perform a case-sensitive search.

Find Window(string lpClassName,string lpWindowName).

Finding ClassName and WindowName using Spy++

Spy++ (SPYXX.EXE) is a Win32-based utility that gives you a graphical view of the system’s processes, threads, windows, and window messages. With the Window Finder Tool, you can find the properties of a selected window.

Step 1. Arrange your windows so that Spy++ and the subject window are visible.

Step 2. From the Spy menu, choose Find Window to open the Find Window dialog box.

Step 3. Drag the Finder Tool to the desired window. As you drag the tool, window details display in the dialog box. (Handle, Caption(Window Name), Class Name).

Example

using System;
using System.Runtime.InteropServices;
public class YourClassName
{
    [DllImport("user32.dll")]
    public static extern int FindWindow(string lpClassName, string lpWindowName);
    [DllImport("user32.dll")]
    public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
    public const int WM_SYSCOMMAND = 0x0112;
    public const int SC_CLOSE = 0xF060;
    private void button1_Click(object sender, EventArgs e)
    {
        // Retrieve the handler of the window
        int iHandle = FindWindow("Notepad", "Untitled - Notepad");
        if (iHandle > 0)
        {
            // Close the window using API
            SendMessage(iHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
        }
    }
}

Closing google window

private void button2_Click(object sender, EventArgs e)
{
    // Closing Google window
    int googleHandle = FindWindow("IEFrame", "Google - Microsoft Internet Explorer provided by Cognizant");
    if (googleHandle > 0)
    {
        // Close the window using API
        SendMessage(googleHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#include "header.h"
 
HWND hWnd, hWnd1, hWnd2;
 
HINSTANCE hInst;
 
BOOL NewWindowClass(WNDPROC Proc, TCHAR szName[],UINT brBackground,UINT icon, UINT cursor, UINT menu)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = Proc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInst;
    wcex.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor        = LoadCursor(hInst,(LPCSTR) NULL);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = (LPCSTR)menu;
    wcex.lpszClassName  = szName;
    wcex.hIconSm        = LoadIcon(hInst,(LPCSTR) NULL);
 
    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL,
            _T("Call to RegisterClassEx failed!"),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
}
 
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    hInst = hInstance; 
 
    if (!NewWindowClass(WndProc,szWindowClass,COLOR_WINDOW,IDI_ICON1,IDC_CURSOR1,NULL)) return FALSE;
    if (!NewWindowClass(WndProc1,WinClass1,COLOR_WINDOW,IDI_ICON1,IDC_CURSOR1,IDR_MENU1)) return FALSE; 
    if (!NewWindowClass(WndProc2,WinClass2,COLOR_WINDOW,IDI_ICON1,IDC_CURSOR1,IDR_MENU1)) return FALSE; 
 
    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 150, 150, x, y, NULL, NULL, hInst, NULL);
 
    if (!hWnd)
    {
        MessageBox(NULL,
            ("Call to CreateWindow failed!"),
            ("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);
 
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if(!TranslateAccelerator(hWnd, hw, &msg))
        {
        
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        }
    }
    return (int) msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND hButton_00_01;  // дескриптор для кнопоки
 
    static int x0=150,y0=150;
 
    switch (message)
    {
    case WM_CREATE: 
        {
            hButton_00_01 = CreateWindow("button", "Вестерос", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON, 50, 20, 160, 50, hWnd, (HMENU)ID_BUTTON_00_01, hInst, NULL);
        return 0;
        }
    case WM_COMMAND: 
        { 
 
            switch(LOWORD(wParam)) 
            { 
                case ID_BUTTON_00_01:
                {   
                    if (!IsWindow (hWnd1))
                    {
                        hWnd1 = CreateWindow(WinClass1,("window"),WS_OVERLAPPEDWINDOW|WS_VISIBLE,x0,y0,x,y,NULL,NULL,hInst,NULL);
                    }
                    return 0;
                }
            }   
        } 
    case WM_DESTROY:
        PostQuitMessage(0); 
            break; 
 
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
 
    return 0;
}
 
LRESULT CALLBACK WndProc1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static int x0=150,y0=150;
 
    switch (message)
    {
        case WM_COMMAND: 
            {
                switch(LOWORD(wParam)) 
                { 
                case ID_TEMPLATE:
                    MessageBox(hWnd, "window", "window", MB_OK);
                    if (!IsWindow (hWnd2))
                    {
                        
                        hWnd2 = CreateWindow(WinClass2,("new_window"),WS_OVERLAPPEDWINDOW|WS_VISIBLE,x0,y0,x,y,NULL,NULL,hInst,NULL);
                    }
                    return 0;
 
                }
            }
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
 
}
 
LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static int x0=150,y0=150;
 
    switch (message)
    {
        case WM_COMMAND: 
            {
                switch(LOWORD(wParam)) 
                { 
                case ID_TEMPLATE:
                    MessageBox(hWnd, "new_window", "new_window", MB_OK);
                    
                    return 0;
 
                }
            }
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
 
}

Итак, задача простая. Необходимо программно закрыть приложение. Например, Калькулятор из стандартной поставки Windows. Вообщем нам надо просто послать калькулятору сообщение WM_QUIT. Для этого воспользуемся функцией PostMessage:

PostMessage
(
	HWND hwnd,			// дискриптор окна
	UINT message,			// сообщение
	WPARAM wParam = 0, 		// параметры
	LPARAM lParam = 0 
);

Эта функция поставит сообщение в очередь сообщений Windows. Окно естественно до него доберется и выполнит. Одна сложность это как найти дескриптор окна — FindWindow это знакомо. Вот пример, который закроет калькулятор.

// Post.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

void main()
{
   PostMessage(FindWindow(NULL, "Калькулятор"), WM_QUIT, 0, 0); 
}

Соберите программу. Запустите калькулятор, а потом нашу программу. Калькулятор будет закрыт.


Функция CloseWindow





Функция CloseWindow свертывает
(но не разрушает) заданное окно.


Синтаксис

BOOL CloseWindow(


HWND hWnd    //

дескриптор окна, которое свертывается



);

Параметры

hWnd

[in] Дескриптор окна, которое
должно быть свернуто

Возвращаемые значения

Если функция завершается успешно, возвращаемое значение — не ноль.

Если функция завершается ошибкой, возвращаемое значение — ноль. Чтобы
получить расширенную информацию об ошибке вызовите функцию
GetLastError.


Замечания


Чтобы уничтожить окно, прикладная программа должна использовать функцию DestroyWindow.


Смотри также


Краткий обзор Окна,
ArrangeIconicWindows,
DestroyWindow,
IsIconic,
OpenIcon
















Размещение и
совместимость CloseWindow


Windows. NET Server

Да


Windows XP

Да


Windows 2000

Да


Windows NT

Да 


Windows Me

Да


Windows 98

Да

Windows 95

Да


Используемая
библиотека


User32.lib


Заголовочный файл

 

— объявлено в


Winuser.h

— включено в


Windows.h


Unicode

Нет


Замечания по
платформе

Не имеется

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Samsung update для ноутбука windows 10
  • Компилятор swift для windows
  • Kyocera m2835dw драйвер windows 7
  • Как перезагрузить ноутбук при синем экране windows 10
  • Не могу вернуть компьютер в исходное состояние windows 10 закрывается окно