Есть ли способ сделать это с помощью autohotkey: Я хочу, чтобы некоторые окна всегда были в правом верхнем углу панели задач, независимо от того, сколько программ я открыл. Так, например, в настоящее время это выглядит такэтот. Но я хочу, чтобы блокноты всегда были в правом углу панели задач. Например, вот такэтот. Итак, сколько бы программ я ни открывал, я хочу, чтобы на панели задач блокноты всегда были справа.
Я использую Windows 8.1 и последнюю версию AutoHotkey. Некоторые пояснения: я не хочу, чтобы само окно блокнота было в правом углу экрана. Нет, но вместо этого я хочу, чтобы только значок на панели задач блокнота был справа. Так, если я, например, открываю новые программы, я хочу, чтобы значок автоматически перемещался вправо, чтобы после значка блокнота не было никаких значков.
Я поискал в интернете и не нашел ничего полезного или похожего. Итак, я пытаюсь сделать так, чтобы значки блокнотов всегда были справа. Мне все равно, будут ли все открытые мной блокноты перемещены вправо или только открытые будут справа, это неважно, я просто открываю 4 блокнота и храню их, пока не выключу компьютер, поэтому я никогда их не закрою.
Как этого добиться? Я уверен, что должен быть способ, потому что AutoHotkey — очень хорошее программное обеспечение и имеет множество улучшений.
Спасибо заранее. Это мой первый вопрос на этом сайте, поэтому, пожалуйста, будьте вежливы. Спасибо.
решение1
Насколько мне известно, единственный способ перемещать значки на панели задач — это перетаскивать их, поэтому это скрипт AHK, который выполняет эту процедуру программно:
^F1::
toggle = true
Window = 0
while (toggle) {
OldWindow = %Window%
WinGet Window, List
if (Window > OldWindow) {
SetTitleMatchMode, RegEx
IfWinExist, Notepad$
{
WinActivate
} Else {
; MsgBox Cannot find Notepad window.
Continue
}
; absolute coordinate
CoordMode Pixel, Screen
CoordMode Mouse, Screen
Sleep, 100 ; wait for the Notepad icon to be fully highlighted, because Windows have animation of lighting icon
ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *5 *TransWhite D:\np.bmp
; allow some variation because Windows have anti-aliasing etc.
; ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *10 *Icon1 %A_WinDir%\system32\notepad.exe
; because of some reason the above command does not work
if ErrorLevel = 2
MsgBox Could not conduct the search.
else if ErrorLevel = 1
MsgBox Icon could not be found on the screen.
else {
MouseGetPos OldX, OldY
SetDefaultMouseSpeed, 0
MouseMove, %FoundX%, %FoundY%
Click down left
MouseMove, A_ScreenWidth, %FoundY% ; move the mouse all the way to the right
Click up left
MouseMove, %OldX%, %OldY% ; move mouse to old position
}
}
Sleep, 500 ; can be omitted
}
Return
^F2::
toggle = false
Return
Примечания:
- По какой-то причине я не могу использовать
*Icon1 %A_WinDir%\system32\notepad.exe
или что-то подобное, вам нужно предоставить файл,D:\np.bmp
состоящий из значка Блокнота в трее, когда Блокнот находится в фокусе. - Нажмите
^F1
, чтобы включить,^F2
чтобы выключить. - Часть, используемая для перетаскивания значка задачи «Блокнот», выполняется каждый раз, когда
WinGet
увеличивается количество окон, указанных в отчете, т. е. когда вы открываете новое окно. - Окно Блокнота оказывается в фокусе каждый раз при перетаскивании его вправо.
- Я не знаю другого способа запускать команду каждый раз, кроме как с помощью бесконечного цикла (
while (toogle)
). Это может потреблять ресурсы процессора.
решение2
Я не знаю ни одного встроенного или низкоуровневого решения этой проблемы. Если вам действительно нужно это функционально, я думаю, вам придется создать собственное вспомогательное приложение, которое позволит вам указать процесс и переставить его кнопку окна на панели задач. Этого можно добиться, но для этого требуются некоторые знания Win32 и C++/C#. Я пробовал это в течение 30 минут (мой личный предел).
Вот что я сделал: эта ветка — идеальная отправная точка:Как получить процессы, имеющие значок в системном трее Пункт 6. Дает вам работающее решение для устаревших (32-битных) версий Windows:Инструмент для упорядочивания кнопок окон на панели задач. К сожалению, он не работает под 64-битной ОС и Windows 10.
Тем не менее, некоторые открытия, которые я сделал во время своего исследования примера, приведены в 6: Чтобы найти панель задач в Windows 10, используйте следующий код:
...
//IntPtr hToolbar = User32.FindWindowEx( hTask, IntPtr.Zero, "ToolbarWindow32", null ); xp +
IntPtr taskBarWnd = User32.FindWindowEx(hTask, IntPtr.Zero, "MSTaskListWClass", null);
Вам понадобится 64-битное определение структуры TBBUTTON:
[StructLayout(LayoutKind.Sequential)]
public struct TBBUTTON
{
public int iBitmap;
public int idCommand;
[StructLayout(LayoutKind.Explicit)]
private struct TBBUTTON_U
{
[FieldOffset(0)]
public byte fsState;
[FieldOffset(1)]
public byte fsStyle;
[FieldOffset(0)]
private IntPtr bReserved;
}
private TBBUTTON_U union;
public byte fsState { get { return union.fsState; } set { union.fsState = value; } }
public byte fsStyle { get { return union.fsStyle; } set { union.fsStyle = value; } }
public UIntPtr dwData;
public IntPtr iString;
}
Это должно стать для вас хорошей отправной точкой для самостоятельного решения.
Другой полезной отправной точкой может стать7+ Настройщик панели задач, в котором есть несколько очень удобных настроек панели задач (как следует из названия). 7+TT также предлагает библиотеку, которая делает большую часть (черной) магии за вас и может также служить отправной точкой для самостоятельного решения (плюс он работает даже в Windows 1607. Взгляните на пример содержимого панели задач печати; AppId здесь — хороший способ найти нужное окно/группу кнопок панели задач).
Удачи.
Обновлять
С помощью 7+TT Lib ваша цель будет довольно легко достигнута.
Здесьэторабочий образецЯ сделал (архив содержит исходный код моего примера, а также двоичный файл в папке x64/Release, называемый taskbar_pusher, который должен работать с Windows 7 - 10 вплоть до последней версии v1709).
Вам необходимо указать AppId группы кнопок, которую вы хотите поместить в заднюю часть панели задач, как параметр командной строки:
./taskbar_pusher {1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\notepad.exe
AppId вы получаете из CLI-вывода моего инструмента.
Вы должны иметь возможность вызвать его параметризацию таким образом с помощью AHK (хотя я не очень хорошо знаком с AHK).
PS: У меня возникли некоторые проблемы с дополнительной панелью задач, поэтому я отключил код для ее обнаружения.