1 (изменено: serzh82saratov, 2018-05-24 04:07:21)

Тема: AHK: Группировка в панели задач

Нужно чтобы было так но только для определённых приложений.
То есть все группируются, а указанные нет.

Забыл добавить, что видел такую настройку у некоторых приложений.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2

Re: AHK: Группировка в панели задач

В смысле другое название процесса?
Стили окна?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: Группировка в панели задач

Давай на примере своего приложения.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: Группировка в панели задач

How do I customize how my application windows are grouped in the Taskbar?
Нужно задать другой Application User Model IDs (AppUserModelIDs) для нового окна. Для этого вам понадобится вызвать SHGetPropertyStoreForWindow.

5

Re: AHK: Группировка в панели задач

Спасибо, не пробовал, в итоге в своём "как то" можно, в чужом, нет?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6 (изменено: Malcev, 2018-05-25 03:06:57)

Re: AHK: Группировка в панели задач

В своём можно просто (хоть в принципе и неправильно так ее применять, но вроде работает):

DllCall("Shell32.dll\SetCurrentProcessExplicitAppUserModelID", Str, "test")
gui, show
DllCall("Shell32.dll\SetCurrentProcessExplicitAppUserModelID", Str, "test1")
gui, 2: show

В чужом же наверняка придётся инжектить в процесс.
PS Тут, Lexikos приводит пример по SHGetPropertyStoreForWindow:
https://autohotkey.com/board/topic/7649 … ts-method/

7

Re: AHK: Группировка в панели задач

PS Тут, Lexikos приводит пример по SHGetPropertyStoreForWindow:

Появляется новая кнопка в панели, это можно как то использовать?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Группировка в панели задач

Не понял вопроса.

9

Re: AHK: Группировка в панели задач

Использовать для решения задачи.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

10

Re: AHK: Группировка в панели задач

То есть тебя интересует как повторить этот код через SHGetPropertyStoreForWindow?

DllCall("Shell32.dll\SetCurrentProcessExplicitAppUserModelID", Str, "test")
gui, show
DllCall("Shell32.dll\SetCurrentProcessExplicitAppUserModelID", Str, "test1")
gui, 2: show

11

Re: AHK: Группировка в панели задач

Разобрался, спасибо за наводку. Единственный минус заметил, меню кнопки становится стандартным.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Группировка в панели задач

Получилось это (на примере с блокнотом):


DllCall("RegisterShellHookWindow", "Ptr", A_ScriptHwnd)
OnMessage(DllCall("RegisterWindowMessage", "Str", "SHELLHOOK"), "ShellProc")
return

ShellProc(nCode, wParam)    {
	Static HSHELL_WINDOWCREATED := 1
    If (nCode = HSHELL_WINDOWCREATED)
    {
        WinGet, Process, ProcessName, ahk_id %wParam% 
		If Process = notepad.exe
		{
			WinGet, List_id, List, ahk_class Notepad
			If List_id > 1
				NewAppid(wParam)
		} 
	}
}

NewAppid(hwnd) {
	Appid := A_ScriptHwnd A_TickCount 
	VarSetCapacity(IID_IPropertyStore, 16)
	DllCall("ole32.dll\CLSIDFromString", "wstr", "{886d8eeb-8cf2-4446-8d02-cdba1dbdcf99}", "ptr", &IID_IPropertyStore)   
	VarSetCapacity(PKEY_AppUserModel_ID, 20)
	DllCall("ole32.dll\CLSIDFromString", "wstr", "{9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}", "ptr", &PKEY_AppUserModel_ID)
	NumPut(5, PKEY_AppUserModel_ID, 16, "int")     
	DllCall("shell32.dll\SHGetPropertyStoreForWindow", "ptr", hwnd
		, "ptr", &IID_IPropertyStore, "ptrp", pstore) 
	VarSetCapacity(variant, 8+2*A_PtrSize, 0)
	NumPut(31, variant, 0, "short") ; VT_LPWSTR
	NumPut(&Appid, variant, 8) 
	DllCall(NumGet(NumGet(pstore+0)+6*A_PtrSize), "ptr", pstore, "ptr", &PKEY_AppUserModel_ID, "ptr", &variant)
}  

Также по MButton, на созданных кнопках, не появляются новые окна.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK: Группировка в панели задач

Наверное надо ещё добавить:

; MSDN: "A window's properties must be removed before the window is closed.
;        If this is not done, the resources used by those properties are not
;        returned to the system."
VarSetCapacity(variant, 8+2*A_PtrSize, 0)
IPropertyStore_SetValue(pstore, &PKEY_AppUserModel_ID, &variant)

14

Re: AHK: Группировка в панели задач

Это не тоже самое?

DllCall(NumGet(NumGet(pstore+0)+6*A_PtrSize), "ptr", pstore, "ptr", &PKEY_AppUserModel_ID, "ptr", &variant)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

Re: AHK: Группировка в панели задач

Тоже самое. Но нужно еще раз вызывать перед закрытием окна.

16

Re: AHK: Группировка в панели задач

Это что то даёт? В смысле по хорошему - да, но мне кажется можно забить на это.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK: Группировка в панели задач

Вот мне тоже интересно, чем это может обернуться.
Может утечкой какой-либо?

18

Re: AHK: Группировка в панели задач

Так а что надо сделать, вернуть оригинальный PKEY_AppUserModel_ID, и как отследить закрытие процесса, в смысле с чем работать если ни окна ни процесса уже не будет.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: Группировка в панели задач

Можно отлавливать HSHELL_WINDOWDESTROYED и проводить необходиую зачистку.

20

Re: AHK: Группировка в панели задач

HSHELL_WINDOWDESTROYED , это понятно, я про то, что будет чистится если процесса уже нет? К чему обращается эта строчка?

DllCall(NumGet(NumGet(pstore+0)+6*A_PtrSize), "ptr", pstore, "ptr", &PKEY_AppUserModel_ID, "ptr", &variant)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21

Re: AHK: Группировка в панели задач

HSHELL_WINDOWDESTROYED
A top-level, unowned window is about to be destroyed. The window still exists when the system calls this hook.
https://msdn.microsoft.com/en-us/librar … s.85).aspx

22

Re: AHK: Группировка в панели задач

Ну может и успеет, если в другом потоке не будет Critical. Так к чему обращаются в DllCall, вместо имени Dll, эти загадочные адреса?.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23

Re: AHK: Группировка в панели задач

К структуре struct IPropertyStoreVtbl:

 typedef struct IPropertyStoreVtbl
    {
        BEGIN_INTERFACE
        
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IPropertyStore * This,
            /* [in] */ __RPC__in REFIID riid,
            /* [iid_is][out] */ 
            __RPC__deref_out  void **ppvObject);
        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IPropertyStore * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IPropertyStore * This);
        
        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
            IPropertyStore * This,
            /* [out] */ __RPC__out DWORD *cProps);
        
        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
            IPropertyStore * This,
            /* [in] */ DWORD iProp,
            /* [out] */ __RPC__out PROPERTYKEY *pkey);
        
        HRESULT ( STDMETHODCALLTYPE *GetValue )( 
            IPropertyStore * This,
            /* [in] */ __RPC__in REFPROPERTYKEY key,
            /* [out] */ __RPC__out PROPVARIANT *pv);
        
        HRESULT ( STDMETHODCALLTYPE *SetValue )( 
            IPropertyStore * This,
            /* [in] */ __RPC__in REFPROPERTYKEY key,
            /* [in] */ __RPC__in REFPROPVARIANT propvar);
        
        HRESULT ( STDMETHODCALLTYPE *Commit )( 
            IPropertyStore * This);
        
        END_INTERFACE
    } IPropertyStoreVtbl;

24

Re: AHK: Группировка в панели задач

IPropertyStoreVtbl вообще для меня загадка, как надо понимать что именно она требовалась для этой задачи. Чё то я плохо ищу на MSDN.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25

Re: AHK: Группировка в панели задач

Просто у ком объектов такая структура.
https://blogs.msdn.microsoft.com/oldnew … 0/?p=40733

26

Re: AHK: Группировка в панели задач

Я привык что у ком объекта есть свои методы, и получаем его ч помощью ComObj***. Это ком объект без интерфейса?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27

Re: AHK: Группировка в панели задач

Управлять напрямую мы можем только теми объектами, которые поддерживают IDispatch интерфейс.
Вот тут можно почитать про com:
http://www.ironahot.idknet.com/asm/dispatch.htm

28

Re: AHK: Группировка в панели задач

Спасибо.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

29

Re: AHK: Группировка в панели задач

Интересно, а в трее тоже самое можно провернуть?
Надоело что нельзя перетащить одну иконку скрипта, потому как они к одному экзешнику привязаны.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

30

Re: AHK: Группировка в панели задач

Ещё вопросик возник, как отменить данный метод, сгруппировать обратно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui