Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155

Запретить группировку окон в панели задач

06.01.2017, 12:06. Показов 1232. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем, как сделать чтобы окна моей программы не группировались в панели задач, а все остальные окна группировались

ОС Windows 10
vb.net
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.01.2017, 12:06
Ответы с готовыми решениями:

Превью окон на панели задач
Здравствуйте, есть ли возможность сделать следующее: запущено несколько программ.. на панели задач они группируются, когда находишь мышку...

Поиск/перечисление окон с панели задач
Кто нибудь подскажет, как найти все окна на панели задач? Ибо когда используешь какую-нибудь EnumWindows, он тебе пихает все подряд. В том...

Группировка однородных окон на панели задач
Переставил винду, и тут такая вот фигня (красным выделил). Как это исправить?

11
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18279 / 14202 / 5368
Регистрация: 17.03.2014
Сообщений: 28,883
Записей в блоге: 1
06.01.2017, 14:49
BatyrbekAl, для этого нужно назначить каждому окну свой AppUserModelIDs. Самый простой способ это сделать лежит через пакет WindowsAPICodePack:
VB.NET
1
2
3
Imports Microsoft.WindowsAPICodePack.Taskbar
...
TaskbarManager.Instance.SetApplicationIdForSpecificWindow(Handle, "Уникальный ID")
В примере предполагается что речь идет о приложении Windows Forms и код находится внутри формы. Вызов нужно делать после того как был создан дескриптор окна. В WPF приложении можно использовать перегрузку принимающую Window. Недостаток этого подхода в том что мы подключаем большую библиотеку ради простого действия. Альтернативный вариант использовать функции Windows API. Сначала SHGetPropertyStoreForWindow для получения IPropertyStore и вызов метода IPropertyStore::SetValue для свойства System.AppUserModel.ID. Готого кода на VB.NET привести увы не могу.
2
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155
07.01.2017, 13:23  [ТС]
VB.NET
1
2
3
4
5
6
Imports System.Runtime.InteropServices
    Declare Function SetCurrentProcessExplicitAppUserModelID Lib "shell32.dll" (<MarshalAs(UnmanagedType.LPWStr)> ByVal appid As String) As Integer
 
    Private Sub Form2_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        SetCurrentProcessExplicitAppUserModelID("new id")
    End Sub
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18279 / 14202 / 5368
Регистрация: 17.03.2014
Сообщений: 28,883
Записей в блоге: 1
07.01.2017, 13:24
BatyrbekAl, это для процесса, а тебе же нужно было для окна
0
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155
07.01.2017, 13:44  [ТС]
OwenGlendower, я вызываю в каждом окне и работает
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18279 / 14202 / 5368
Регистрация: 17.03.2014
Сообщений: 28,883
Записей в блоге: 1
07.01.2017, 13:46
BatyrbekAl, тем не менее это неправильно.
0
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155
07.01.2017, 13:59  [ТС]
OwenGlendower, Я так думаю что каждый раз я меняю id процесса и оболочка думает что это окно нового процесса. То что это неправильно я согласен но пока лучше ничего не нашел.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18279 / 14202 / 5368
Регистрация: 17.03.2014
Сообщений: 28,883
Записей в блоге: 1
07.01.2017, 14:03
BatyrbekAl, я выше дал тебе вариант - используй код из WindowsAPICodePack. Чтобы не тянуть всю библиотеку можно декомпилировать код метода SetApplicationIdForSpecificWindow и вставить его в свое приложение.
0
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155
08.01.2017, 12:45  [ТС]
Нашел такой код, но он не работает.
SHGetPropertyStoreForWindow(hWnd, g, PropStore) должен возвратить 0 но у меня 2147500034

VB.NET
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
Imports System.Runtime.InteropServices
 
Public Class ssss
    Structure PROPERTYKEY
        Dim fmtid As Guid
        Dim pid As UInt32
    End Structure
    Public Interface IPropertyStore
        Sub GetCount(ByRef cProps As UInt32)
        Sub GetAt(ByVal iProp As UInt32, ByRef pkey As PROPERTYKEY)
        Sub GetValue(ByRef key As PROPERTYKEY, ByVal pv As Object)
        Sub SetValue(ByRef key As PROPERTYKEY, ByRef pv As Object)
        Sub Commit()
    End Interface
    Public Class PropertyStore
        Implements IPropertyStore
 
        Public Sub Commit() Implements IPropertyStore.Commit
 
        End Sub
 
        Public Sub GetAt(ByVal iProp As UInteger, ByRef pkey As PROPERTYKEY) Implements IPropertyStore.GetAt
 
        End Sub
 
        Public Sub GetCount(ByRef cProps As UInteger) Implements IPropertyStore.GetCount
 
        End Sub
 
        Public Sub GetValue(ByRef key As PROPERTYKEY, ByVal pv As Object) Implements IPropertyStore.GetValue
 
        End Sub
 
        Public Sub SetValue(ByRef key As PROPERTYKEY, ByRef pv As Object) Implements IPropertyStore.SetValue
 
        End Sub
    End Class
    '<DllImport("shell32.dll", SetLastError:=True)>
    'Private Function SHGetPropertyStoreForWindow(ByVal handle As IntPtr, ByRef riid As Guid, ByRef propertyStore As IPropertyStore) As UInt32
    'End Function
    Declare Function SHGetPropertyStoreForWindow Lib "shell32" (ByVal handle As IntPtr, ByRef riid As Guid, ByRef propertyStore As IPropertyStore) As UInt32
 
 
    '    ' 20140804 support disable of edge swipes when run fullscreen in windows 8
 
    ' name = System.EdgeGesture.DisableTouchWhenFullscreen
    ' shellPKey = PKEY_EdgeGesture_DisableTouchWhenFullscreen
    ' formatID = 32CE38B2-2C9A-41B1-9BC5-B3784394AA44
 
 
    Public Shared Sub SetAppID(hWnd As IntPtr, iAppID As Integer)
        ' name = System.EdgeGesture.DisableTouchWhenFullscreen
        ' shellPKey = PKEY_EdgeGesture_DisableTouchWhenFullscreen
        ' formatID = 32CE38B2-2C9A-41B1-9BC5-B3784394AA44
 
        Dim g As Guid = New Guid("32CE38B2-2C9A-41B1-9BC5-B3784394AA44")
 
        Dim PropStore As IPropertyStore = New PropertyStore
        Dim rc As UInt32 = SHGetPropertyStoreForWindow(hWnd, g, PropStore)
 
        ' 0x80004002    E_NOINTERFACE    No such interface supported
        ' S_OK    Operation successful    0x00000000
        'MsgBox(rc)
        If (rc = 0) Then
            Dim PKEY_EdgeGesture_DisableTouchWhenFullscreen As New PROPERTYKEY
            PKEY_EdgeGesture_DisableTouchWhenFullscreen.fmtid = New Guid("32CE38B2-2C9A-41B1-9BC5-B3784394AA44")
            PKEY_EdgeGesture_DisableTouchWhenFullscreen.pid = 2
            Dim bVal As Boolean = True
            PropStore.SetValue(PKEY_EdgeGesture_DisableTouchWhenFullscreen, bVal)
 
        End If
    End Sub
End Class
0
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155
08.01.2017, 13:00  [ТС]
и ещё я заменил
VB.NET
1
2
3
    <DllImport("shell32.dll", SetLastError:=True)>
    Private Function SHGetPropertyStoreForWindow(ByVal handle As IntPtr, ByRef riid As Guid, ByRef propertyStore As IPropertyStore) As UInt32
    End Function
на

VB.NET
1
    Declare Function SHGetPropertyStoreForWindow Lib "shell32" (ByVal handle As IntPtr, ByRef riid As Guid, ByRef propertyStore As IPropertyStore) As UInt32
так как выдавало ошибку
Миниатюры
Запретить группировку окон в панели задач  
0
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155
08.01.2017, 15:26  [ТС]
Я сделал, выкладываю готовый код:

VB.NET
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
Imports System.Runtime.InteropServices
Imports System.Runtime.CompilerServices
 
Public Class ChAppUserModelID
    <StructLayout(LayoutKind.Sequential, Pack:=4)>
    Public Structure PropertyKey
        Public Sub New(guid As Guid, pid As UInt32)
            fmtid = guid
            Me.pid = pid
        End Sub
        <MarshalAs(UnmanagedType.Struct)>
        Public fmtid As Guid
        Public pid As UInteger
    End Structure
 
    <StructLayout(LayoutKind.Explicit)>
    Public Structure PropVariant
        <FieldOffset(0)>
        Public vt As Short
        <FieldOffset(8)>
        Public _ptr As IntPtr
    End Structure
 
    <ComImport, Guid("886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)>
    Interface IPropertyStore
        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)>
        Sub GetCount(<Out> ByRef cProps As UInteger)
        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)>
        Sub GetAt(<[In]> iProp As UInteger, ByRef pkey As PropertyKey)
        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)>
        Sub GetValue(<[In]> ByRef key As PropertyKey, ByRef pv As PropVariant)
        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)>
        Sub SetValue(<[In]> ByRef key As PropertyKey, <[In]> ByRef pv As PropVariant)
        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)>
        Sub Commit()
        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)>
        Sub Release()
    End Interface
 
    <DllImport("shell32.dll", SetLastError:=True)>
    Private Shared Function SHGetPropertyStoreForWindow(handle As IntPtr, ByRef riid As Guid, ByRef propertyStore As IPropertyStore) As Integer
    End Function
 
    Public Shared Sub ChID(ByVal hwnd As IntPtr, nid As String)
        Dim pPropStore As IPropertyStore = Nothing
        Dim hr As Integer
        hr = SHGetPropertyStoreForWindow(hwnd, New Guid("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99"), pPropStore)
        'MsgBox(hr)
        If hr = 0 Then
            Dim propKey As New PropertyKey
            propKey.fmtid = New Guid("9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3")
            propKey.pid = 5
            Dim var As New PropVariant
            var.vt = 31US
            var._ptr = Marshal.StringToCoTaskMemUni(nid)
            pPropStore.SetValue(propKey, var)
            Marshal.FinalReleaseComObject(pPropStore)
        End If
    End Sub
End Class
0
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155
09.01.2017, 12:06  [ТС]
Привет всем, я недавно искал способ как запретить группировку окон в панели задач Запретить группировку окон в панели задач.
Решение успешно найдено и описано в теме но результат оказался немного не такой как я ожидал.
Мне нужно чтобы значки были сгруппированы но не сложены на английском combine.
В таком виде значки приклеены друг к другу но не объединены в один.

ОС win10
VS 2015
vb.net / WindowsForms
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.01.2017, 12:06
Помогаю со студенческими работами здесь

Запретить отображение формы на панели задач
Подскажите пжл как сделать так, чтобы в панели задач оторбражалась только одна форма. У меня когда две формы загруженны &quot;вкладок&quot;...

Группировка окон на панели задач (тип группировки)
Всем привет! Короче интересная проблема: на компе группировка в виде списка, а надо чтобы было вот как здесь: На моем компе...

Не видна кнопка "Сворачивание окон" на панели задач
не видно кнопка сворачивание окон на пенел задаче

ПКМ по панели задач -> Панели -> Все кнопки неактивны
Добрый день! Я хочу добавить пользовательскую панель на Панель задач Windows 7. Делал это уже много раз, однако сегодня при попытке...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
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 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru