1

Тема: AHK: Как скрыть иконку из нижней панели.

Хотелось бы узнать, как можно скрыть иконку скрипта из нижней панели. Отправьте образец, буду очень вам благодарен.

2

Re: AHK: Как скрыть иконку из нижней панели.

А также хотел бы узнать, как сделать, чтобы скрипт прочитал txt файл и вывел текст в msgbox.

3 (изменено: svoboden, 2018-07-12 23:48:55)

Re: AHK: Как скрыть иконку из нижней панели.

Если нужно запустить скрипт сразу скрытно, то читайте про директиву #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.

4

Re: AHK: Как скрыть иконку из нижней панели.

Скрыть/показать иконку скрипта проще так:

Sleep 2000
Menu, Tray, NoIcon
Sleep 2000
Menu, Tray, Icon
Sleep 2000
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Как скрыть иконку из нижней панели.

Не понятно, а для чего тогда нужны эти функции, если можно так просто скрыть меню.

6

Re: AHK: Как скрыть иконку из нижней панели.

С помощью этих функций можно скрыть/показать иконку другого скрипта.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: svoboden, 2018-07-13 17:54:32)

Re: AHK: Как скрыть иконку из нижней панели.

Не уверен, что это так. Вот тема обсуждалась похожая: https://autohotkey.com/boards/viewtopic … deTrayIcon.

8 (изменено: Malcev, 2018-07-13 18:00:14)

Re: AHK: Как скрыть иконку из нижней панели.

Почему не уверены?
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.

9 (изменено: teadrinker, 2018-07-13 19:27:03)

Re: AHK: Как скрыть иконку из нижней панели.

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%
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder