AutoHotkey - faz a janela ficar bem na barra de tarefas

3

Existe uma maneira de conseguir isso usando autohotkey: Eu quero que algumas janelas estejam sempre no canto superior direito da barra de tarefas, não importa quantos programas eu abri. Então, por exemplo, atualmente é como isso . Mas quero que os blocos de notas estejam sempre à direita da barra de tarefas. Então, por exemplo, como isso . Então, não importa quantos programas eu abro, eu quero que na barra de tarefas sempre os blocos de notas estejam 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 própria janela do bloco de notas esteja na extrema direita da tela. Não, mas em vez disso eu quero apenas ícone na barra de tarefas do bloco de notas para estar 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 apareça depois do ícone dos blocos de notas.

Eu procurei na internet e não encontrei nada de útil ou similar. Então, o que estou tentando fazer é fazer os ícones dos blocos de notas sempre à direita. Eu não me importo se todos os blocos de notas que eu abro forem movidos para a direita ou apenas os que estão abertos para a direita, não importa, eu só abro 4 blocos e os mantenho até desligar o computador, então eu vou nunca os feche.

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

Obrigado antecipadamente. Esta é a minha primeira pergunta neste site, por favor seja respeitoso. Obrigado.

    
por user782364756 29.08.2017 / 07:58

2 respostas

2

AFAIK, a única maneira de mover ícones na barra de tarefas, é arrastá-los, portanto, esse é um script AHK que faz o procedimento por meio de programação:

^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 consigo usar *Icon1 %A_WinDir%\system32\notepad.exe ou similar, você precisa fornecer um arquivo D:\np.bmp consiste no ícone da bandeja do Bloco de notas quando o Bloco de notas está em foco.
  • Pressione ^F1 para ativar, ^F2 para desativar.
  • A parte usada para arrastar o ícone da tarefa Bloco de notas é executada sempre que o número de janelas relatadas por WinGet aumenta, ou seja, quando você abre uma nova janela.
  • A janela do bloco de notas está em foco toda vez que é arrastada para a direita.
  • Eu não sei como executar o comando toda vez, exceto usando um loop infinito ( while (toogle) ). Isso pode consumir CPU.
por 04.09.2017 / 05:37
1

Não tenho conhecimento de nenhuma solução interna ou de barra baixa para esse problema. Se você realmente precisa disso funcionalmente, eu acho que você teria que criar seu próprio aplicativo auxiliar que permita que você especifique um processo e reorganize seu botão de janela na barra de tarefas. Isso pode ser alcançado, mas requer algum conhecimento de Win32 e C ++ / C #. Eu tentei por 30 minutos (meu limite pessoal).

Foi o que fiz: este tópico é o ponto de partida perfeito: Como obter os processos que possuem o ícone systray Ponto 6. Dá-lhe uma solução de trabalho para versões desatualizadas (32 bits) do Windows: Uma ferramenta para ordenar os botões da janela na sua 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 a minha exploração com o exemplo fornecem 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 lhe dar um bom ponto de partida para uma solução personalizada.

Outro ponto de partida útil pode ser o 7+ Taskbar Tweaker , que tem alguns ajustes muito úteis na barra de tarefas (como o nome sugere). O 7 + TT também oferece uma biblioteca que faz a maior parte da magia (preta) para você e também pode servir como ponto de partida para uma solução DIY (além de funcionar mesmo no Windows 1607. Dê uma olhada na amostra de conteúdo da barra de tarefas de impressão; é aqui um bom gancho para encontrar o grupo de janela / botão botão direito da barra de tarefas).

Boa sorte.

Atualizar
Com a ajuda do 7 + TT Lib, o seu objetivo é bastante fácil de alcançar.
Aqui é um exemplo de trabalho strong> Eu 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 última versão v1709).

Você tem que especificar o AppId do grupo de botões que você gostaria de empurrar para o final da sua barra de tarefas, como o parâmetro da linha de comando:

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

Você obtém o AppId da saída da CLI da minha ferramenta.
Você deve ser capaz de chamar este parâmetro com o AHK (embora eu não esteja muito familiarizado com o AHK).

PS: tive alguns problemas com minha barra de tarefas secundária e, portanto, desativei o código para detectá-lo.

    
por 04.09.2017 / 05:58