Тема: AHK: Как скрыть иконку из нижней панели.
Хотелось бы узнать, как можно скрыть иконку скрипта из нижней панели. Отправьте образец, буду очень вам благодарен.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Хотелось бы узнать, как можно скрыть иконку скрипта из нижней панели. Отправьте образец, буду очень вам благодарен.
А также хотел бы узнать, как сделать, чтобы скрипт прочитал txt файл и вывел текст в msgbox.
Если нужно запустить скрипт сразу скрытно, то читайте про директиву #NoTrayIcon.
Cкрыть/показать текущий скрипт можно так:
1::MsgBox
2::killTrayIcon(A_ScriptHwnd)
3::restoreTrayIcon(A_ScriptHwnd)
killTrayIcon(scriptHwnd) {
DetectHiddenWindows, On
Static NIM_DELETE := 2, AHK_NOTIFYICON := 1028
VarSetCapacity(nic, size := 936 + 4 * A_PtrSize)
NumPut(size, nic, 0, "UInt")
NumPut(scriptHwnd, nic, A_PtrSize)
NumPut(AHK_NOTIFYICON, nic, A_PtrSize * 2, "UInt")
Return DllCall("Shell32\Shell_NotifyIcon", "UInt", NIM_DELETE, "Ptr", &nic)
}
restoreTrayIcon(scriptHwnd) {
DetectHiddenWindows, On
WM_TASKBARCREATED := DllCall("RegisterWindowMessage", "Str", "TaskbarCreated")
PostMessage, WM_TASKBARCREATED,,,, ahk_id %scriptHwnd%
}
А прочитать файл можно командной Loop, Read.
Скрыть/показать иконку скрипта проще так:
Sleep 2000
Menu, Tray, NoIcon
Sleep 2000
Menu, Tray, Icon
Sleep 2000
Не понятно, а для чего тогда нужны эти функции, если можно так просто скрыть меню.
С помощью этих функций можно скрыть/показать иконку другого скрипта.
Не уверен, что это так. Вот тема обсуждалась похожая: https://autohotkey.com/boards/viewtopic … deTrayIcon.
Почему не уверены?
Lexikos же пишет:
For scripts, there's a very easy alternative: call Menu Tray, NoIcon. To trigger it from another script, you only need a few lines of code to define a function and register it with OnMessage.
DetectHiddenWindows, On
PID := ExecScript("#Persistent")
WinWait, ahk_pid %PID%
newScriptHwnd := WinExist()
OnExit( Func("CloseChildScript").Bind(newScriptHwnd) )
Sleep, 2000
TrayIconActions("delete", "", newScriptHwnd)
Sleep, 2000
RestoreTrayIcon(newScriptHwnd)
Sleep 2000
ExitApp
TrayIconActions(command := "delete", hIcon := "", hWnd := "", uID := 0x404, nMsg := 0x404)
{
static NIF_MESSAGE := 1, NIF_ICON := 2, NIM_ADD := 0, NIM_MODIFY := 1, NIM_DELETE := 2
(hWnd = "" && hWnd := A_ScriptHwnd)
uFlags := (command = "add" ? NIF_MESSAGE : 0) | (command != "delete" ? NIF_ICON : 0)
action := command = "add" ? NIM_ADD : command = "modify" ? NIM_MODIFY : NIM_DELETE
VarSetCapacity(NOTIFYICONDATA, size := A_PtrSize = 8 ? 848 : A_IsUnicode? 828 : 444, 0)
NumPut(size, NOTIFYICONDATA, "UInt")
NumPut(hWnd, NOTIFYICONDATA, A_PtrSize)
NumPut(uID, NOTIFYICONDATA, A_PtrSize*2)
( command = "add" && NumPut(nMsg, NOTIFYICONDATA, A_PtrSize*2 + 8, "UInt") )
if (command != "delete") {
NumPut(uFlags, NOTIFYICONDATA, A_PtrSize*2 + 4, "UInt")
NumPut(hIcon, NOTIFYICONDATA, A_PtrSize*3 + 8)
}
DllCall("shell32\Shell_NotifyIcon", UInt, action, Ptr, &NOTIFYICONDATA)
}
RestoreTrayIcon(scriptHwnd) {
static WM_TASKBARCREATED := DllCall("RegisterWindowMessage", Str, "TaskbarCreated")
DllCall("PostMessage", Ptr, scriptHwnd, UInt, WM_TASKBARCREATED, Ptr, 0, Ptr, 0)
}
ExecScript(script) {
shell := ComObjCreate("WScript.Shell")
exec := shell.Exec("AutoHotkey.exe /ErrorStdOut *")
exec.StdIn.Write(script)
exec.StdIn.Close()
Return exec.ProcessID
}
CloseChildScript(hWnd) {
WinClose, ahk_id %hWnd%
}
Или так:
DetectHiddenWindows, On
PID := ExecScript("#Persistent")
WinWait, ahk_pid %PID%
newScriptHwnd := WinExist()
OnExit( Func("CloseChildScript").Bind(newScriptHwnd) )
Sleep, 2000
TrayIconActions("delete", "", newScriptHwnd)
Sleep, 2000
TrayIconActions("add", LoadPicture(A_AhkPath, "Icon1 w16 h-1", IMAGE_ICON := 1), newScriptHwnd)
Sleep 2000
ExitApp
TrayIconActions(command := "delete", hIcon := "", hWnd := "", uID := 0x404, nMsg := 0x404)
{
static NIF_MESSAGE := 1, NIF_ICON := 2, NIM_ADD := 0, NIM_MODIFY := 1, NIM_DELETE := 2
(hWnd = "" && hWnd := A_ScriptHwnd)
uFlags := (command = "add" ? NIF_MESSAGE : 0) | (command != "delete" ? NIF_ICON : 0)
action := command = "add" ? NIM_ADD : command = "modify" ? NIM_MODIFY : NIM_DELETE
VarSetCapacity(NOTIFYICONDATA, size := A_PtrSize = 8 ? 848 : A_IsUnicode? 828 : 444, 0)
NumPut(size, NOTIFYICONDATA, "UInt")
NumPut(hWnd, NOTIFYICONDATA, A_PtrSize)
NumPut(uID, NOTIFYICONDATA, A_PtrSize*2)
( command = "add" && NumPut(nMsg, NOTIFYICONDATA, A_PtrSize*2 + 8, "UInt") )
if (command != "delete") {
NumPut(uFlags, NOTIFYICONDATA, A_PtrSize*2 + 4, "UInt")
NumPut(hIcon, NOTIFYICONDATA, A_PtrSize*3 + 8)
}
DllCall("shell32\Shell_NotifyIcon", UInt, action, Ptr, &NOTIFYICONDATA)
}
ExecScript(script) {
shell := ComObjCreate("WScript.Shell")
exec := shell.Exec("AutoHotkey.exe /ErrorStdOut *")
exec.StdIn.Write(script)
exec.StdIn.Close()
Return exec.ProcessID
}
CloseChildScript(hWnd) {
WinClose, ahk_id %hWnd%
}
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться