AutoHotkey - làm cho cửa sổ ở ngay trên thanh tác vụ


3

Có cách nào để đạt được điều này bằng autohotkey không: Tôi muốn một số cửa sổ luôn ở trên cùng bên phải của thanh tác vụ cho dù tôi có mở bao nhiêu chương trình. Vì vậy, đối với exmaple, hiện tại nó là như thế này . Nhưng, tôi muốn notepad luôn ở phía bên phải của thanh tác vụ. Vì vậy, ví dụ như thế này . Vì vậy, cho dù tôi có mở bao nhiêu chương trình, tôi muốn trên thanh tác vụ luôn có các notepad ở phía bên phải.

Tôi đang sử dụng windows 8.1 và phiên bản mới nhất của AutoHotkey. Một số giải thích: Tôi không muốn cửa sổ của notepad nằm ở phía bên phải màn hình. Không, nhưng thay vào đó tôi chỉ muốn biểu tượng trên thanh tác vụ của notepad ở phía bên phải. Vì vậy, nếu tôi mở các chương trình mới, tôi muốn biểu tượng được tự động di chuyển sang bên phải, để không có biểu tượng nào xuất hiện sau biểu tượng của notepad.

Tôi đã tìm kiếm trên internet và tôi không tìm thấy bất cứ điều gì hữu ích hoặc tương tự. Vì vậy, những gì tôi đang cố gắng làm là làm cho các biểu tượng của notepad luôn ở bên phải. Tôi không quan tâm nếu tất cả các notepad tôi mở sẽ được chuyển sang bên phải hoặc chỉ mở những cái ở bên phải, không thành vấn đề, tôi chỉ mở 4 notepad và giữ chúng cho đến khi tôi tắt máy tính, vì vậy tôi sẽ không bao giờ đóng chúng

Làm thế nào để đạt được nó? Tôi chắc chắn phải có một cách vì AutoHotkey là phần mềm rất tốt và có rất nhiều cải tiến.

Cảm ơn bạn trước. Đây là câu hỏi đầu tiên của tôi trên trang web này, vì vậy hãy tôn trọng. Cảm tạ.


Nếu bất cứ điều gì khó hiểu hoặc không rõ ràng do tiếng Anh của tôi kém, hãy nói với tôi và tôi sẽ giải thích ngắn gọn và rõ ràng về nó.
dùng782364756

@Biswa. Tôi không chắc bạn đang nói gì. Ý bạn là gì khi "chọn mục thanh tác vụ đã mở bằng phím Win" . Tôi có nên làm điều đó trong kịch bản AutoHotkey, hoặc thủ công không? Bạn có thể vui lòng giải thích, hoặc thậm chí tốt hơn đăng một ảnh chụp màn hình.
dùng782364756

Trên bàn phím của bạn nhấn - Phím Windows + phím số. Các phím số tương ứng với thứ tự mà ứng dụng hiển thị trong thanh tác vụ của bạn từ trái sang phải / trên xuống dưới.
Biswapriyo

@Biswa. Tôi vẫn không chắc ý của bạn là gì. Khi tôi nhấp vào WinKey + Số, sau đó nó sẽ mở mục từ thanh tác vụ lõi đến số đó. Tuy nhiên, đó không phải là điều tôi đang hỏi. Tôi đã hỏi làm thế nào để Notepad luôn là biểu tượng cuối cùng trên thanh tác vụ cho dù tôi có mở bao nhiêu chương trình (lưu ý rằng không phải tất cả các chương trình đều được ghim vào thanh tác vụ). Hoặc tôi không hiểu bạn, hoặc bạn không hiểu câu hỏi.
dùng782364756

Câu trả lời:


2

AFAIK cách duy nhất để di chuyển các biểu tượng trên thanh tác vụ là kéo chúng, vì vậy đây là tập lệnh AHK thực hiện quy trình theo chương trình:

^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

Ghi chú:

  • Vì một số lý do, tôi không thể sử dụng *Icon1 %A_WinDir%\system32\notepad.exehoặc tương tự, bạn cần cung cấp một tệp D:\np.bmpbao gồm biểu tượng khay Notepad khi Notepad nằm trong tiêu điểm.
  • Nhấn ^F1để bật, ^F2để tắt.
  • Phần được sử dụng để kéo biểu tượng tác vụ Notepad thực thi mỗi khi số lượng cửa sổ được báo cáo WinGettăng, tức là khi bạn mở một cửa sổ mới.
  • Cửa sổ Notepad được lấy nét mỗi khi nó được kéo sang phải.
  • Tôi không biết cách nào để chạy lệnh mỗi lần trừ khi sử dụng vòng lặp vô hạn ( while (toogle)). Điều đó có thể tiêu thụ CPU.

Vâng, tôi đã thử nghiệm nó và nó hoạt động. Tuy nhiên, điều này là xa tốt. Ví dụ: nó bỏ chọn cửa sổ đang lấy nét trước khi di chuyển notepad, tìm kiếm biểu tượng notepad trên màn hình là một thực tế xấu, nó có thể xuất hiện ở một nơi khác (ví dụ như trong thư mục) có thể gây ra các tệp di chuyển xung quanh, mỗi khi có một thông điệp "alt" nâng lên (đặt con trỏ lên một cái gì đó) nó được tính là một cửa sổ mới và notepad được di chuyển. Một vấn đề khác là vì nó rất xấu xí, đáng lo ngại và khó chịu khi thấy biểu tượng notepad bay sang phải và sau đó quay trở lại. Nó không thể bị phát hiện và không thể quan sát được,
user782364756

Tôi chỉ đơn giản muốn nó "nhảy" đến vị trí xứng đáng mà không ảnh hưởng đến bất cứ điều gì khác.
user782364756

Tôi hiểu điều đó không tốt, nhưng - Chức năng chính của AutoHotkey là mô phỏng một số macro của bàn phím / chuột. Cách duy nhất tôi biết là kéo và kéo gây ra hiệu ứng động. Các vấn đề khác (ví dụ: chỉ tìm kiếm trong thanh tác vụ, phát hiện chính xác khi biểu tượng thanh tác vụ mới xuất hiện hoặc tập trung lại cửa sổ cuối cùng) có thể giải quyết được.
dùng202729

Tôi sẽ hài lòng nếu bạn chỉ cải thiện ba điều sau: 1) chỉ tìm kiếm trên thanh tác vụ (không phải trên toàn màn hình), 2) chỉ di chuyển notepad khi biểu tượng thanh tác vụ mới xuất hiện (không phải khi cửa sổ mới xuất hiện) và 3) Cửa sổ cũ tập trung lại. Những cải tiến này chắc chắn sẽ làm giảm số lần notepad đang di chuyển và sẽ không kích hoạt di chuyển khi thông báo "alt" được đưa ra.
user782364756

1
@ user782364756 - có lẽ bạn có thể sắp xếp lại tâm trí của mình để giữ Notepad ngoài cùng bên trái thay vì ngoài cùng bên phải. Điều này sẽ giải quyết tất cả các vấn đề theo cách thanh lịch.
miroxlav

1

Tôi không biết về bất kỳ giải pháp tích hợp hoặc thanh thấp nào cho vấn đề này. Nếu bạn thực sự cần chức năng này, tôi đoán bạn sẽ phải tạo một ứng dụng trợ giúp riêng cho phép bạn chỉ định một quy trình và sắp xếp lại nút cửa sổ của nó trên thanh tác vụ. Điều này có thể đạt được, nhưng đòi hỏi một số kiến ​​thức về Win32 và C ++ / C #. Tôi đã thử nó trong 30 phút (giới hạn cá nhân của tôi).

Đây là những gì tôi đã làm: Chủ đề này là điểm khởi đầu hoàn hảo: Cách lấy các quy trình có biểu tượng systray Điểm 6. Cung cấp cho bạn một giải pháp làm việc cho các phiên bản Windows (32 bit) lỗi thời: Một công cụ để đặt các nút cửa sổ trong thanh tác vụ của bạn Thật không may, nó không hoạt động dưới HĐH 64 bit và Windows 10.

Tuy nhiên, một số khám phá tôi đã thực hiện trong quá trình khám phá với mẫu cung cấp trong 6: Để tìm Thanh tác vụ trên Cửa sổ 10, hãy sử dụng mã sau:

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

Bạn sẽ cần một định nghĩa 64 bit về cấu trúc 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;
}

Điều này sẽ cung cấp cho bạn một điểm khởi đầu tốt cho một giải pháp cuộn của riêng bạn.

Một điểm khởi đầu hữu ích khác có thể là 7+ Thanh công cụ Tweaker , có một số điều chỉnh thanh tác vụ rất tiện dụng (như tên cho thấy). 7 + TT cũng cung cấp một thư viện thực hiện hầu hết các phép thuật (màu đen) cho bạn và cũng có thể phục vụ như một điểm khởi đầu cho một giải pháp DIY (cộng với nó hoạt động ngay cả trên Windows 1607. Hãy xem mẫu nội dung trên thanh tác vụ in; AppId Đây là một cái móc tốt để tìm đúng Cửa sổ nút / Nhóm nút thanh tác vụ).

Chúc may mắn.

Cập nhật
Với sự giúp đỡ của 7 + TT Lib, mục tiêu của bạn khá dễ dàng đạt được.
Đây là một mẫu làm việc tôi đã thực hiện (kho lưu trữ chứa nguồn mẫu của tôi cũng như nhị phân trong thư mục x64 / Release, được gọi là taskbar_pizer, sẽ hoạt động với Windows 7 - 10 cho đến phiên bản mới nhất v1709).

Bạn phải chỉ định AppId của nhóm nút bạn muốn đẩy vào phía sau của thanh tác vụ như thế này dưới dạng tham số dòng lệnh:

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

Bạn nhận được AppId từ đầu ra CLI của công cụ của tôi.
Bạn sẽ có thể gọi nó là tham số hóa như thế này với AHK (mặc dù tôi không quen lắm với AHK).

PS: Tôi đã gặp một số vấn đề với thanh tác vụ phụ của mình và do đó đã vô hiệu hóa mã để phát hiện nó.


Hấp dẫn. Tôi thích câu trả lời của bạn vì bạn đã quyết định tập trung vào mục tiêu và hoàn toàn bỏ qua công cụ AutoHotkey (vì dường như AutoHotkey không thể giúp đỡ trong trường hợp này). Tôi đã thực hiện một số ứng dụng Win32 trong C ++, vì vậy tôi sẽ dùng thử. Cảm ơn các liên kết hữu ích.
user782364756
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.