3

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

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

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

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

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

2 ответа2

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)). Это может потреблять процессор.
1

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

Вот что я сделал: Этот поток является идеальной отправной точкой: как получить процессы, которые имеют значок systray, пункт 6. Дает вам рабочее решение для устаревших (32-битных) версий 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:

[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: у меня были некоторые проблемы с моей вторичной панелью задач, и поэтому отключил код для его обнаружения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .