AutoHotkey - сделать окно оставаться прямо в панели задач

есть ли способ достичь этого с помощью autohotkey: я хочу, чтобы некоторые окна всегда были в правом верхнем углу панели задач независимо от того, сколько программ я открыл. Так, например, в настоящее время как этой. Но, я хочу notepads всегда быть в правом углу панели задач. Так, например, как этой. Таким образом, независимо от того, сколько программ я открываю, я хочу, чтобы на панели задач всегда блокноты, чтобы быть на крайнем правом.

Я использую Windows 8.1 и последнюю версию программа AutoHotkey. Некоторые объяснения: я не хочу, чтобы само окно блокнотов было в правой части экрана. Нет, но вместо этого я хочу, чтобы значок на панели задач Блокнота был справа. Итак, если я, например, открываю новые программы, я хочу, чтобы значок автоматически перемещался вправо, чтобы значки не были после значка блокнотов.

Я искал в интернете и я не нашел ничего полезного или похожие. Итак, что я пытаюсь сделать, это сделать значки блокнотов всегда справа. Я не уход, если все блокноты, которые я открываю, будут перемещены вправо или просто открыты, чтобы быть справа, не имеет значения, я просто открываю 4 блокнота и держу их, пока не выключу компьютер, поэтому я никогда не закрою их.

Как этого добиться? Я уверен, что должен быть способ, потому что AutoHotkey очень хорошее программное обеспечение и имеет много улучшений.

спасибо заранее. Это мой первый вопрос на этом сайте, поэтому, пожалуйста, будьте уважительны. Благодарить.

4
задан user782364756
14.05.2023 15:11 Количество просмотров материала 2674
Распечатать страницу

2 ответа

AFAIK единственный способ перемещения значков на панели задач, чтобы перетащить их, так что это 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)). Это может потреблять CPU.
2
отвечен user202729 2023-05-15 22:59

Я не знаю ни встроенного, ни низкоуровневого решения этой проблемы. Если вам действительно нужно это функционально, я думаю, вам придется создать свое собственное вспомогательное приложение, которое позволяет указать процесс и изменить его кнопку окна на панели задач. Это может быть достигнуто, но требует некоторых знаний Win32 и C++ / C#.Я попробовал его в течение 30 минут (мой личный предел).

Это то, что я сделал: эта нить является идеальной отправной точкой:как получить процессы значок в системном лотке Пункт 6. Дает вам рабочее решение для устаревших (32bit) версий Windows:инструмент для заказа кнопок окна в панели задач К сожалению, он не работает под 64-битной ОС и Windows 10.

тем не менее, некоторые открытия, которые я сделал во время моего исследования с образцом обеспечивают в 6: чтобы найти панель задач на окне 10, используйте следующий код:

...
//IntPtr hToolbar = User32.FindWindowEx( hTask, IntPtr.Zero, "ToolbarWindow32", null ); xp +
IntPtr taskBarWnd = User32.FindWindowEx(hTask, IntPtr.Zero, "MSTaskListWClass", null);

вам понадобится 64-битное определение TBBUTTON struct:

[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 + Панель Задач Tweaker, который имеет некоторые очень удобные настройки панели задач (как следует из названия). 7+TT также предлагает библиотеку, которая делает большую часть (черной) магии для вас, а также может служить отправной точкой для решения DIY (плюс он работает даже на 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: у меня были некоторые проблемы с моей вторичной панели задач и, следовательно, отключен код, чтобы обнаружить его.

1
отвечен wp78de 2023-05-16 01:16

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

autohotkey
icons
taskbar
windows
windows-8
Вверх