AutoHotkey: hace que la ventana permanezca justo en la barra de tareas

AutoHotkey: hace que la ventana permanezca justo en la barra de tareas

¿Hay alguna manera de lograr esto usando autohotkey? Quiero que algunas ventanas estén siempre en la parte superior derecha de la barra de tareas sin importar cuántos programas abra. Entonces, por ejemplo, actualmente es comoeste. Pero quiero que los blocs de notas estén siempre en el extremo derecho de la barra de tareas. Así, por ejemplo comoeste. Entonces, no importa cuántos programas abra, quiero que en la barra de tareas los blocs de notas siempre estén en el extremo derecho.

Estoy usando Windows 8.1 y la última versión de AutoHotkey. Algunas explicaciones: no quiero que la ventana de los blocs de notas esté en el extremo derecho de la pantalla. No, pero en cambio quiero que solo el ícono en la barra de tareas del bloc de notas esté en el extremo derecho. Entonces, si, por ejemplo, abro nuevos programas, quiero que el ícono se mueva automáticamente hacia la derecha, de modo que ningún ícono esté después del ícono de los blocs de notas.

Busqué en internet y no encontré nada útil o similar. Entonces, lo que estoy tratando de hacer es hacer que los íconos de los blocs de notas estén siempre a la derecha. No me importa si todos los blocs de notas que abro se moverán hacia la derecha o solo los que abrí para estar a la derecha, no importa, solo abro 4 blocs de notas y los guardo hasta que apago mi computadora, así que lo haré. nunca los cierres.

¿Cómo lograrlo? Estoy seguro de que debe haber una manera porque AutoHotkey es un software muy bueno y tiene muchas mejoras.

Gracias de antemano. Esta es mi primera pregunta en este sitio, así que sea respetuoso. Agradecer.

Respuesta1

AFAIK, la única forma de mover íconos en la barra de tareas es arrastrarlos, por lo que este es un script AHK que realiza el procedimiento mediante programación:

^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 algún motivo, no puedo usarlo *Icon1 %A_WinDir%\system32\notepad.exeo algo similar, debes proporcionar un archivo D:\np.bmpque consta del ícono de la bandeja del Bloc de notas cuando el Bloc de notas está enfocado.
  • Presione ^F1para encender, ^F2para apagar.
  • La parte utilizada para arrastrar el ícono de la tarea del Bloc de notas se ejecuta cada vez que WinGetaumenta el número de ventanas, es decir, cuando abre una nueva ventana.
  • La ventana del Bloc de notas está enfocada cada vez que se arrastra hacia la derecha.
  • No conozco ninguna forma de ejecutar el comando cada vez, excepto usar un bucle infinito ( while (toogle)). Eso puede consumir CPU.

Respuesta2

No conozco ninguna solución integrada o de bajo nivel para este problema. Si realmente necesita esto funcionalmente, supongo que tendría que crear su propia aplicación auxiliar que le permita especificar un proceso y reorganizar su botón de ventana en la barra de tareas. Esto se puede lograr, pero requiere algunos conocimientos de Win32 y C++/C#. Lo probé durante 30 minutos (mi límite personal).

Esto es lo que hice: este hilo es el punto de partida perfecto:Cómo obtener los procesos que tienen el ícono de la bandeja del sistema Punto 6. Le brinda una solución funcional para versiones obsoletas (32 bits) de Windows:Una herramienta para ordenar los botones de las ventanas en tu barra de tareas Desafortunadamente, no funciona con sistemas operativos de 64 bits ni con Windows 10.

No obstante, algunos descubrimientos que hice durante mi exploración con el ejemplo se proporcionan en 6: Para encontrar la barra de tareas en Windows 10, use el siguiente código:

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

Necesitará una definición de 64 bits de la estructura 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;
}

Esto debería brindarle un buen punto de partida para una solución personalizada.

Otro punto de partida útil podría ser el7+ Ajustador de la barra de tareas, que tiene algunos ajustes muy útiles en la barra de tareas (como sugiere el nombre). 7+TT también ofrece una biblioteca que hace la mayor parte de la magia (negra) por usted y también podría servir como punto de partida para una solución de bricolaje (además, funciona incluso en Windows 1607. Eche un vistazo al ejemplo de contenido de la barra de tareas de impresión; AppId Aquí hay un buen enlace para encontrar la ventana/grupo de botones de la barra de tareas correcto).

Buena suerte.

Actualizar
Con la ayuda de 7+TT Lib, tu objetivo es bastante fácil de lograr.
Aquíes unmuestra de trabajoLo he creado (el archivo contiene el código fuente de mi muestra, así como un binario en la carpeta x64/Release, llamado taskbar_pusher, que debería funcionar con Windows 7 - 10 hasta la última versión v1709).

Debe especificar el AppId del grupo de botones que desea colocar en la parte posterior de la barra de tareas de esta manera como parámetro de línea de comando:

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

Obtienes el AppId de la salida CLI de mi herramienta.
Debería poder llamarlo parametrizado de esta manera con AHK (aunque no estoy muy familiarizado con AHK).

PD: Tuve algunos problemas con mi barra de tareas secundaria y por eso desactivé el código para detectarla.

información relacionada