Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,631

Как поймать клик мыши на панели задач?

06.09.2022, 10:22. Показов 1348. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте! Первоначально окно расположено в каком-либо углу экрана по нажатию ЛКМ окно сворачивается в пиктограмму, а затем по нажатию ЛКМ по пиктограмме, оно восстанавливается в другом углу экрана. Проблема в том, что по щелчку левой клавиши мыши оно сворачивается в пиктограмму на панели задач, и, соответственно, на второе щёлканье ЛКМ не реагирует. Возможно, я вновь усложняю задачу, но как работать с панелью задач, и возможно ли отработать как-то нажатие ЛКМ так чтобы задача была выполнена. Ясно, что в функцию моего окна сообщение о нажатии клавиши из панели задач не придёт, а как тогда отработать это?
Я сделал через MoveWindow() свернул окно, оно у меня расположилось выше панели задач, но тут другая проблема свёрнутое в пиктограмму окно не реагирует на нажатие мыши. Хз... возможно, есть советы, желательно без хуков?)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
case WM_LBUTTONDOWN:
                        GetWindowInfo(hwnd, &winf);
            SystemParametersInfo(SPI_GETWORKAREA, 0, &rcSPI, 0);
            if(!IsIconic(hwnd))
                MoveWindow(hwnd, 0, cyScreen - GetSystemMetrics(SM_CYCAPTION) - (cyScreen - rcSPI.bottom),
                             GetSystemMetrics(SM_CXMINIMIZED),
                             GetSystemMetrics(SM_CYCAPTION),
                             TRUE);
            else 
                MoveWindow(hwnd, 
                           winf.rcWindow.right - cxQuarterScreen,
                           winf.rcWindow.top, 
                           cxQuarterScreen, 
                           cyQuarterScreen, TRUE);


Добавлено через 1 час 40 минут
Когда окно сворачивается в пиктограмму на панели задач это ссылка на окно или всё ещё моё окно?) Т.е. могу я с ним работать, как с окном до его сворачивания? Если я кликаю по свёрнутому окну(пиктограмме) в панели задач окно получает сообщения об этом нажатии клавиши мыши или нет?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.09.2022, 10:22
Ответы с готовыми решениями:

Как отследить клик мыши на панели задач Windows?
Как отследить клик мыши по иконке приложения на панели задач Windows, если приложение уже открыто? Какое событие нужно отслеживать? ...

Поймать клик левой кнопкой мыши на любом визуальном компоненте формы
Доброго дня, форумчане. Не подскажете как мне поймать клик левой кнопкой мыши на любом визуальном компоненте формы (тем более, что у...

Как получить HWND окна на панели задач по координатам мыши?
Как получить хэндл свернутого на панель задач окна, на которое наведена мышка?) Добавлено через 48 секунд Желательно чтобы способ...

1
 Аватар для Liss29
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,631
07.09.2022, 09:09  [ТС]
Кликните здесь для просмотра всего текста
C++
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
#include<windows.h>
#include<tchar.h>
 
BOOL RegClass(WNDPROC, LPCTSTR, UINT);
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
TCHAR szMainClass[] = TEXT("_MainClass_");
TCHAR szTitle[] = TEXT("Parent Window");
 
HINSTANCE hInstance;
int cxScreen, cyScreen;
int cxQuarterScreen, cyQuarterScreen;
int left = 0, top = 0;
 
int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE, PTSTR szCmdLine, int nCmdShow)
{
    MSG msg;
    HWND hwnd = NULL;
    hInstance = hInst;
    
    if(!RegClass(WndProc, szMainClass, COLOR_HIGHLIGHT))
        return FALSE;
    
    
    cxScreen = GetSystemMetrics(SM_CXSCREEN);
    cyScreen = GetSystemMetrics(SM_CYSCREEN);
    cxQuarterScreen = (cxScreen >> 2);
    cyQuarterScreen = (cyScreen >> 2);
    
    hwnd = CreateWindow(szMainClass, szTitle, 
                        WS_OVERLAPPEDWINDOW,
                        left, top,
                        cxQuarterScreen, cyQuarterScreen,
                        NULL, NULL, hInst, NULL);
                        
    if(!hwnd)
        return FALSE;
    
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    
    while(GetMessage(&msg, NULL, 0, 0))
    {
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
 
BOOL RegClass(WNDPROC proc, LPCTSTR szName, UINT brBackground)
{
    WNDCLASS wc;
    wc.style = CS_VREDRAW | CS_HREDRAW;
    wc.cbClsExtra = wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.lpfnWndProc = proc;
    wc.hbrBackground = (HBRUSH)(brBackground + 1);
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.lpszMenuName = (LPCTSTR)NULL;
    wc.lpszClassName = szName;
    
    return (RegisterClass(&wc) != 0);
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    WINDOWPLACEMENT wp;
 
    switch(msg)
    {
        case WM_SYSCOMMAND:
            if(wParam == SC_RESTORE)
            {
                wp.length = sizeof(wp);
                GetWindowPlacement(hwnd, &wp);
                wp.showCmd = SW_RESTORE;
                wp.flags = WPF_RESTORETOMAXIMIZED;
                SetRect((LPRECT)&wp.rcNormalPosition, 
                        cxScreen - cxQuarterScreen,
                        top,
                        (cxScreen - cxQuarterScreen) + cxQuarterScreen,
                        top + cyQuarterScreen);
                SetWindowPlacement(hwnd, &wp);
            }
            if(wParam == SC_CLOSE)
                break;
            return 0;
        case WM_LBUTTONDOWN:
            wp.length = sizeof(wp);
            GetWindowPlacement(hwnd, &wp);
            if(!IsIconic(hwnd))
            {
                wp.flags = WPF_SETMINPOSITION;
                //wp.ptMinPosition.x = 0;
                //wp.ptMinPosition.y = cyScreen;
                wp.showCmd = SW_MINIMIZE;
                SetWindowPlacement(hwnd, &wp);
            }
            
            return 0;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2022, 09:09
Помогаю со студенческими работами здесь

Поймать клик на "недоступной" панели
Добрый день, форумчане. Отлавливаю координаты мыши на панели: procedure TForm4.Panel2Click(Sender: TObject); var pt: TPoint; ...

Клик по приложению в панели задач не запускает копию приложения
Раньше я запускал несколько окон, кликая правой кнопкой по приложению в панели задач и повторно кликая по приложению. Но полгода назад они...

Правый клик мыши работает, как левый клик
Привет, уж очень достает момент, когда на сайтах или на компе нажимаешь на правую кнопки мыши с целью открыть меню\подменю, то почему-то...

Нельзя развернуть игру после её сворачивания. Альт+таб и клик по иконке в панели задач не работают
Нельзя развернуть игру после её сворачивания. Альт+таб и клик по иконке в панели задач не работают. Единственный способ - нажать на иконку...

Как в ListView поймать клик по элементу?
Привет! Кто сталкивался с таким, подскажите. У меня на форме ListView с отображением Detail. Не могу поймать событие, когда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru