AutoHotkey - faz a janela ficar na barra de tarefas

AutoHotkey - faz a janela ficar na barra de tarefas

Existe uma maneira de conseguir isso usando o autohotkey: quero que algumas janelas estejam sempre no canto superior direito da barra de tarefas, não importa quantos programas eu abra. Então, por exemplo, atualmente é assimesse. Mas quero que os blocos de notas estejam sempre na extremidade direita da barra de tarefas. Então, por exemplo, comoesse. Portanto, não importa quantos programas eu abra, quero que os blocos de notas da barra de tarefas estejam sempre na extrema direita.

Estou usando o Windows 8.1 e a versão mais recente do AutoHotkey. Algumas explicações: não quero que a janela do bloco de notas fique na extremidade direita da tela. Não, mas quero que apenas o ícone na barra de tarefas do bloco de notas fique na extrema direita. Então, se eu, por exemplo, abrir novos programas, quero que o ícone seja movido automaticamente para a direita, para que nenhum ícone fique depois do ícone do bloco de notas.

Pesquisei na internet e não encontrei nada útil ou semelhante. Então, o que estou tentando fazer é deixar os ícones dos blocos de notas sempre à direita. Eu não me importo se todos os blocos de notas que eu abrir serão movidos para a direita ou apenas os abertos para a direita, não importa, eu apenas abro 4 blocos de notas e os guardo até desligar o computador, então vou nunca os feche.

Como conseguir isso? Tenho certeza de que deve haver uma maneira, porque o AutoHotkey é um software muito bom e tem muitas melhorias.

Agradeço antecipadamente. Esta é minha primeira pergunta neste site, então, por favor, seja respeitoso. Agradecer.

Responder1

AFAIK, a única maneira de mover ícones na barra de tarefas é arrastá-los, então este é um script AHK que executa o procedimento programaticamente:

^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

Notas:

  • Por algum motivo, não posso usar *Icon1 %A_WinDir%\system32\notepad.exeou algo semelhante, você precisa fornecer um arquivo D:\np.bmpque consiste no ícone da bandeja do Bloco de Notas quando o Bloco de Notas estiver em foco.
  • Pressione ^F1para ligar, ^F2para desligar.
  • A parte usada para arrastar o ícone da tarefa do Bloco de Notas é executada sempre que o número de janelas reportado WinGetaumenta, ou seja, quando você abre uma nova janela.
  • A janela do bloco de notas fica em foco sempre que é arrastada para a direita.
  • Não conheço nenhuma maneira de executar o comando todas as vezes, exceto usando um loop infinito ( while (toogle)). Isso pode consumir CPU.

Responder2

Não tenho conhecimento de nenhuma solução integrada ou de barra baixa para esse problema. Se você realmente precisa disso funcionalmente, acho que teria que criar seu próprio aplicativo auxiliar que permite especificar um processo e reorganizar o botão da janela na barra de tarefas. Isso pode ser conseguido, mas requer algum conhecimento de Win32 e C++/C#. Tentei por 30 minutos (meu limite pessoal).

Isto é o que eu fiz: Este tópico é o ponto de partida perfeito:Como obter os processos que possuem ícone na bandeja do sistema Ponto 6. Oferece uma solução funcional para versões desatualizadas (32 bits) do Windows:Uma ferramenta para ordenar os botões da janela na barra de tarefas Infelizmente, ele não funciona no sistema operacional de 64 bits e no Windows 10.

No entanto, algumas descobertas que fiz durante minha exploração com o exemplo são fornecidas em 6: Para encontrar a barra de tarefas na janela 10, use o seguinte código:

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

Você precisará de uma definição de 64 bits da estrutura 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;
}

Isso deve ser um bom ponto de partida para uma solução personalizada.

Outro ponto de partida útil poderia ser o7+ Ajustador da barra de tarefas, que possui alguns ajustes muito úteis na barra de tarefas (como o nome sugere). 7 + TT também oferece uma biblioteca que faz a maior parte da magia (negra) para você e também pode servir como ponto de partida para uma solução DIY (além de funcionar até mesmo no Windows 1607. Dê uma olhada no exemplo de impressão do conteúdo da barra de tarefas; AppId está aqui um bom gancho para encontrar a janela/grupo de botões correto da barra de tarefas).

Boa sorte.

Atualizar
Com a ajuda do 7+TT Lib seu objetivo é muito fácil de alcançar.
Aquié umamostra de trabalhoEu fiz (o arquivo contém a fonte da minha amostra, bem como um binário na pasta x64/Release, chamado taskbar_pusher, que deve funcionar com o Windows 7 - 10 até a versão mais recente v1709).

Você deve especificar o AppId do grupo de botões que deseja enviar para o final da barra de tarefas, como este como parâmetro de linha de comando:

./taskbar_pusher {1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\notepad.exe

Você obtém o AppId da saída CLI da minha ferramenta.
Você deve poder chamá-lo de parametrização assim com AHK (embora eu não esteja muito familiarizado com AHK).

PS: Tive alguns problemas com minha barra de tarefas secundária e por isso desativei o código para detectá-la.

informação relacionada