隐藏qq图标

;win7适用,隐藏后,好像会有一个空位在时间显示区,
;哪位兄弟真有这个需求的,帮忙折腾下
;对于隐藏,比较好的方法我建议用desktops.exe
DetectHiddenWindows On

f1::  ;隐藏
xx:=TrayIconsAll("qq.exe")
Loop,parse,xx,|
{

    SendMessage, 0x404, %A_LoopField%, 1, ToolbarWindow321, ahk_class Shell_TrayWnd    ; TB_HIDEBUTTON
    SendMessage, 0x404, %A_LoopField%, 1, ToolbarWindow321, ahk_class NotifyIconOverflowWindow    ; TB_HIDEBUTTON
    SendMessage, 0x1A, 0, 0, , ahk_class Shell_TrayWnd
    SendMessage, 0x1A, 0, 0, , ahk_class NotifyIconOverflowWindow
}
Return

f2::  ;显示
Loop,parse,xx,|
{
    SendMessage, 0x404, %A_LoopField%, 0, ToolbarWindow321, ahk_class Shell_TrayWnd    ; TB_HIDEBUTTON
    SendMessage, 0x404, %A_LoopField%, 0, ToolbarWindow321, ahk_class NotifyIconOverflowWindow    ; TB_HIDEBUTTON
    SendMessage, 0x1A, 0, 0, , ahk_class Shell_TrayWnd
    SendMessage, 0x1A, 0, 0, , ahk_class NotifyIconOverflowWindow
}
Return
;==============================================
;==============================================
;==============================================


TrayIcons(sExeName = "")
{
    WinGet,    pidTaskbar, PID, ahk_class Shell_TrayWnd
    hProc:=    DllCall("OpenProcess", "Uint", 0x38, "int", 0, "Uint", pidTaskbar)
    pProc:=    DllCall("VirtualAllocEx", "Uint", hProc, "Uint", 0, "Uint", 32, "Uint", 0x1000, "Uint", 0x4)
    idxTB:=    GetTrayBar()
        SendMessage, 0x418, 0, 0, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd    ; TB_BUTTONCOUNT
    Loop,    %ErrorLevel%
    {
        SendMessage, 0x417, A_Index-1, pProc, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd    ; TB_GETBUTTON
        VarSetCapacity(btn,32,0), VarSetCapacity(nfo,32,0)
        DllCall("ReadProcessMemory", "Uint", hProc, "Uint", pProc, "Uint", &btn, "Uint", 32, "Uint", 0)
            iBitmap    := NumGet(btn, 0)
            idn    := NumGet(btn, 4)
            Statyle := NumGet(btn, 8)
        If    dwData    := NumGet(btn,12)
            iString    := NumGet(btn,16)
        Else    dwData    := NumGet(btn,16,"int64"), iString:=NumGet(btn,24,"int64")
        DllCall("ReadProcessMemory", "Uint", hProc, "Uint", dwData, "Uint", &nfo, "Uint", 32, "Uint", 0)
        If    NumGet(btn,12)
            hWnd    := NumGet(nfo, 0)
        ,    uID    := NumGet(nfo, 4)
        ,    nMsg    := NumGet(nfo, 8)
        ,    hIcon    := NumGet(nfo,20)
        Else    hWnd    := NumGet(nfo, 0,"int64"), uID:=NumGet(nfo, 8), nMsg:=NumGet(nfo,12)
        WinGet, pid, PID,                  ahk_id %hWnd%
        WinGet, sProcess, ProcessName, ahk_id %hWnd%
        WinGetClass, sClass,              ahk_id %hWnd%
        If !sExeName || (sExeName = sProcess) || (sExeName = pid)
            VarSetCapacity(sTooltip,128), VarSetCapacity(wTooltip,128*2)
        ,    DllCall("ReadProcessMemory", "Uint", hProc, "Uint", iString, "Uint", &wTooltip, "Uint", 128*2, "Uint", 0)
        ,    DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "str", wTooltip, "int", -1, "str", sTooltip, "int", 128, "Uint", 0, "Uint", 0)
        ,    sTrayIcons .= idn . "|"
    }
    DllCall("VirtualFreeEx", "Uint", hProc, "Uint", pProc, "Uint", 0, "Uint", 0x8000)
    DllCall("CloseHandle", "Uint", hProc)
    Return    sTrayIcons
}

TrayIconsOverflow(sExeName = "")
{
    WinGet,    pidTaskbar, PID, ahk_class NotifyIconOverflowWindow
    hProc:=    DllCall("OpenProcess", "Uint", 0x38, "int", 0, "Uint", pidTaskbar)
    pProc:=    DllCall("VirtualAllocEx", "Uint", hProc, "Uint", 0, "Uint", 32, "Uint", 0x1000, "Uint", 0x4)
    idxTB:=    1
        SendMessage, 0x418, 0, 0, ToolbarWindow32%idxTB%, ahk_class NotifyIconOverflowWindow    ; TB_BUTTONCOUNT
    Loop,    %ErrorLevel%
    {
        SendMessage, 0x417, A_Index-1, pProc, ToolbarWindow32%idxTB%, ahk_class NotifyIconOverflowWindow    ; TB_GETBUTTON
        VarSetCapacity(btn,32,0), VarSetCapacity(nfo,32,0)
        DllCall("ReadProcessMemory", "Uint", hProc, "Uint", pProc, "Uint", &btn, "Uint", 32, "Uint", 0)
            iBitmap    := NumGet(btn, 0)
            idn    := NumGet(btn, 4)
            Statyle := NumGet(btn, 8)
        If    dwData    := NumGet(btn,12)
            iString    := NumGet(btn,16)
        Else    dwData    := NumGet(btn,16,"int64"), iString:=NumGet(btn,24,"int64")
        DllCall("ReadProcessMemory", "Uint", hProc, "Uint", dwData, "Uint", &nfo, "Uint", 32, "Uint", 0)
        If    NumGet(btn,12)
            hWnd    := NumGet(nfo, 0)
        ,    uID    := NumGet(nfo, 4)
        ,    nMsg    := NumGet(nfo, 8)
        ,    hIcon    := NumGet(nfo,20)
        Else    hWnd    := NumGet(nfo, 0,"int64"), uID:=NumGet(nfo, 8), nMsg:=NumGet(nfo,12)
        WinGet, pid, PID,                  ahk_id %hWnd%
        WinGet, sProcess, ProcessName, ahk_id %hWnd%
        WinGetClass, sClass,              ahk_id %hWnd%
        If !sExeName || (sExeName = sProcess) || (sExeName = pid)
            VarSetCapacity(sTooltip,128), VarSetCapacity(wTooltip,128*2)
        ,    DllCall("ReadProcessMemory", "Uint", hProc, "Uint", iString, "Uint", &wTooltip, "Uint", 128*2, "Uint", 0)
        ,    DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "str", wTooltip, "int", -1, "str", sTooltip, "int", 128, "Uint", 0, "Uint", 0)
        ,    sTrayIcons .= idn . "|"
    }
    DllCall("VirtualFreeEx", "Uint", hProc, "Uint", pProc, "Uint", 0, "Uint", 0x8000)
    DllCall("CloseHandle", "Uint", hProc)
    Return    sTrayIcons
}

TrayIconsAll(sExeName = "")
{
    return ret:= TrayIcons(sExeName) "`n" TrayIconsOverflow(sExeName)
}


RemoveTrayIcon(hWnd, uID, nMsg = 0, hIcon = 0, nRemove = 2)
{
    NumPut(VarSetCapacity(ni,444,0), ni)
    NumPut(hWnd , ni, 4)
    NumPut(uID  , ni, 8)
    NumPut(1|2|4, ni,12)
    NumPut(nMsg , ni,16)
    NumPut(hIcon, ni,20)
    Return    DllCall("shell32Shell_NotifyIconA", "Uint", nRemove, "Uint", &ni)
}


HideTrayIcon(idn, bHide = True)
{
    idxTB := GetTrayBar()
    SendMessage, 0x404, idn, bHide, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd    ; TB_HIDEBUTTON
    SendMessage, 0x1A, 0, 0, , ahk_class Shell_TrayWnd
}

DeleteTrayIcon(idx)
{
    idxTB := GetTrayBar()
    SendMessage, 0x416, idx - 1, 0, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd    ; TB_DELETEBUTTON
    SendMessage, 0x1A, 0, 0, , ahk_class Shell_TrayWnd
}

MoveTrayIcon(idxOld, idxNew)
{
    idxTB := GetTrayBar()
    SendMessage, 0x452, idxOld - 1, idxNew - 1, ToolbarWindow32%idxTB%, ahk_class Shell_TrayWnd ; TB_MOVEBUTTON
}

GetTrayBar()
{
    ControlGet, hParent, hWnd,, TrayNotifyWnd1  , ahk_class Shell_TrayWnd
    ControlGet, hChild , hWnd,, ToolbarWindow321, ahk_id %hParent%
    Loop
    {
        ControlGet, hWnd, hWnd,, ToolbarWindow32%A_Index%, ahk_class Shell_TrayWnd
        If  Not    hWnd
            Break
        Else If    hWnd = %hChild%
        {
            idxTB := A_Index
            Break
        }
    }
    Return    idxTB
}

给TA捐赠
共{{data.count}}人
人已捐赠
其他教程

随机数

2020-3-9 6:18:44

其他教程

非快捷键类 全局运行脚本(由开机脚本自动调用)

2020-3-9 6:22:44

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索