|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Как в powershell gui скрыть значок с панели задач в трей? |
|
PowerShell - Как в powershell gui скрыть значок с панели задач в трей?
|
Новый участник Сообщения: 41 |
Всем привет.
Есть такое простое окошко, нужно по нажатию на стандартную кнопку свернуть в трей и убрать с панели задач значок. Пробовал ставить в $form.add_Resize - $form.ShowInTaskbar = $false, сворачивает, но тут же закрывает его. Не могу понять как это сделать. Скрытый текст
$HideWindow = '[DllImport("user32.dll")] public static extern bool ShowWindow(int handle, int state);' Add-type -Name win -Member $HideWindow -Namespace native [native.win]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0) Add-Type -AssemblyName System.Windows.Forms $form = New-Object System.Windows.Forms.Form $form.Text = "Мое окно" $form.Size = New-Object System.Drawing.Size(300,200) $form.add_Shown({ if ($form.WindowState -ne "Normal") { $notifyIcon.Visible = $true } }) $notifyIcon = New-Object System.Windows.Forms.NotifyIcon $notifyIcon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon((Get-Process -id $PID).Path) $notifyIcon.Text = "Мое окно" $notifyIcon.add_Click({ $form.WindowState = "Normal" }) $form.add_Resize({ if ($form.WindowState -eq "Minimized") { $notifyIcon.Visible = $true $form.WindowState = "Minimized" } elseif ($form.WindowState -eq "Normal") { $notifyIcon.Visible = $false $form.WindowState = "Normal" } }) $contextMenu = New-Object System.Windows.Forms.ContextMenu $menuItem = New-Object System.Windows.Forms.MenuItem $menuItem.Text = "Выход" $menuItem.add_Click({ $form.Close() $notifyIcon.Dispose() }) $contextMenu.MenuItems.Add($menuItem) $notifyIcon.ContextMenu = $contextMenu $form.ShowDialog() Ещё хотел спросить, возможно ли в стандартный заголовок windows добавить ещё одну кнопочку свернуть в трей. Почитав немного, понял что вроде это нельзя сделать, но может я что не понял и всё же как то можно сделать? |
|
Отправлено: 02:52, 04-07-2024 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать делайте сразу System.Windows.Forms.NotifyIcon
|
Отправлено: 05:08, 05-07-2024 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Serguei Kouzmine, Дело было в другом))
При добавлении [System.Windows.Forms.Application]::Run() перестало закрываться при сворачивании в трей. Кому надо используйте) Готовый powershell gui скрипт, окно которое скрывается при нажатии кнопки свернуть в заголовке окна в трей, уведомляет что оно свернуто, после нажатия на значок в трее разворачивается, что я и хотел). Правда я хотел ещё что бы была в заголовке окна ещё одна кнопка, но как я понял это невозможно сделать на powershell gui только если писать свою программу, там можно, а тут нельзя ну или я не совсем разобрался. Если знаете как это сделать напишите. Скрытый текст
$HideWindow = '[DllImport("user32.dll")] public static extern bool ShowWindow(int handle, int state);' Add-type -Name win -Member $HideWindow -Namespace native [native.win]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0) Add-Type -AssemblyName System.Windows.Forms # Создаем форму $form = New-Object System.Windows.Forms.Form $form.Text = "Мое окно" $form.Size = New-Object System.Drawing.Size(800, 500) # Добавляем обработчик события изменения размера окна $form.add_Resize({ if ($form.WindowState -eq "Minimized") { $form.Hide() $notifyIcon.Visible = $true $notifyIcon.ShowBalloonTip(1000) } }) # Добавляем обработчик изменения состояния окна $form.add_SizeChanged({ if ($form.WindowState -eq "Minimized") { $form.Hide() $notifyIcon.Visible = $true $notifyIcon.ShowBalloonTip(1000) } }) # Добавляем обработчик закрытия формы $form.add_FormClosing({ $form.Hide() $notifyIcon.Visible = $true $_.Cancel = $true }) $notifyIcon = New-Object System.Windows.Forms.NotifyIcon $notifyIcon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon((Get-Process -Id $PID).Path) $notifyIcon.Visible = $false $notifyIcon.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Info $notifyIcon.BalloonTipText = "Окно свернуто в трей" $notifyIcon.BalloonTipTitle = "Пример окна PowerShell GUI" $notifyIcon.ShowBalloonTip(1000) # Добавляем обработчик клика по значку в трее $notifyIcon.add_Click({ $form.Show() $form.WindowState = "Normal" $notifyIcon.Visible = $false }) # Добавляем контекстное меню для значка в трее $contextMenu = New-Object System.Windows.Forms.ContextMenu $menuItem = New-Object System.Windows.Forms.MenuItem $menuItem.Text = "Выход" $menuItem.add_Click({ $form.Close() $notifyIcon.Dispose() }) $contextMenu.MenuItems.Add($menuItem) $notifyIcon.ContextMenu = $contextMenu # Показываем форму $form.Show() [System.Windows.Forms.Application]::Run() PS. Возможно где то ошибки, но вариант рабочий если поправите и скините сюда, будет очень хорошо. Serguei Kouzmine, реально ли поменять стили такого окошка? Может фон прикрутить или кнопки красивые сделать? Можно потом после дописанания окончательно конвертировать в ps2exe в .exe и будет своя мини программа), которая делает какое то действие в системе. Недавно тут спрашивал про тачпад, оригинальная программа урезана в функционале, на win7 была удобнее и настроек больше, можно с win7 настройки программы скопировать из реестра, добавить их в powershell в виде галок, и конвертировать в exe))) будет некий заменитель оригинальной программы) |
Последний раз редактировалось ivan456, 05-07-2024 в 07:33. Отправлено: 07:23, 05-07-2024 | #3 |
Deadooshka Сообщения: 2499
|
Профиль | Отправить PM | Цитировать 1. очевидные вещи в комментариях не пишут. Пояснять лучше непонятные действия, например add_SizeChanged с дублированием add_Resize. Или использование системной ShowWindow() для скрытия окна консоли, или добывание иконки из файла текущего процесса PS.
2. процесс остаётся висеть после выхода, потому что нет $form.Dispose(). Возможно нужен ещё [System.Windows.Forms.Application]::Exit() (выходит и без него). 3. ContextMenu работает только в нативном PS (powershell.exe). Для pwsh (.NET Core) надо пробовать ContextMenuStrip. |
Отправлено: 09:34, 05-07-2024 | #4 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать Sham, 1. Я только учусь, могу всего не знать, так всякие простые шутки делаю на powershell gui.
2. выше в скрипте забыл добавить, а то на кнопку закрытие окно сворачивалось)): Скрытый текст
3. С ContextMenu я пока не разобрался, просто добавил кнопку закрытие. ps. щас сделал ещё форму текстовую, но не могу понять как обрабатывать tab. выделять текст нашел как сделать, а вот tab не работает как бы не делал, но нашел рабочий вариант но пока не могу дойти как оно там работает) |
|
Отправлено: 09:46, 05-07-2024 | #5 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать И правда в диспетчере процесс висит после закрытия, что то все перепробовал, а оно всё равно там остается.
|
Отправлено: 10:46, 05-07-2024 | #6 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать |
Отправлено: 18:19, 05-07-2024 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Как закрепить значок на панели задач (программно) Pin to taskbar | test009 | Microsoft Windows 10 | 1 | 14-07-2021 11:39 | |
Интерфейс - Как скрыть программу на панели задач Windows 7? | Detsle | Microsoft Windows 7 | 6 | 09-04-2013 12:28 | |
Интерфейс - [решено] Как сменить значок для ярлыка на панели задач ? | DreadMaster | Microsoft Windows 7 | 3 | 13-09-2010 16:08 | |
[решено] Как скрыть из панели задач | ShogenOFF | AutoIt | 10 | 20-06-2010 23:12 | |
Разное - как в панели управления скрыть планировщик задач? | God-of-Chaos | Microsoft Windows 2000/XP | 1 | 12-11-2009 18:41 |
|