Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Как в powershell gui скрыть значок с панели задач в трей?

Ответить
Настройки темы
PowerShell - Как в powershell gui скрыть значок с панели задач в трей?

Новый участник


Сообщения: 39
Благодарности: 1

Профиль | Отправить PM | Цитировать


Всем привет.
Есть такое простое окошко, нужно по нажатию на стандартную кнопку свернуть в трей и убрать с панели задач значок.
Пробовал ставить в $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
Благодарности: 51

Профиль | Отправить PM | Цитировать


делайте сразу System.Windows.Forms.NotifyIcon

Отправлено: 05:08, 05-07-2024 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 39
Благодарности: 1

Профиль | Отправить 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


Сообщения: 2489
Благодарности: 678

Профиль | Отправить 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


Новый участник


Сообщения: 39
Благодарности: 1

Профиль | Отправить PM | Цитировать


Sham, 1. Я только учусь, могу всего не знать, так всякие простые шутки делаю на powershell gui.
2. выше в скрипте забыл добавить, а то на кнопку закрытие окно сворачивалось)):
Скрытый текст
Код: Выделить весь код
# Добавляем обработчик закрытия формы
$form.add_FormClosing({
    $notifyIcon.Visible = $false
})

3. С ContextMenu я пока не разобрался, просто добавил кнопку закрытие.

ps. щас сделал ещё форму текстовую, но не могу понять как обрабатывать tab.
выделять текст нашел как сделать, а вот tab не работает как бы не делал, но нашел рабочий вариант но пока не могу дойти как оно там работает)
Скрытый текст
Код: Выделить весь код
$textBox.Add_KeyDown({
    if ($_.Control -and $_.KeyCode -eq "A") {
        $textBox.SelectAll()
    }
})

Отправлено: 09:46, 05-07-2024 | #5


Новый участник


Сообщения: 39
Благодарности: 1

Профиль | Отправить PM | Цитировать


И правда в диспетчере процесс висит после закрытия, что то все перепробовал, а оно всё равно там остается.

Отправлено: 10:46, 05-07-2024 | #6


Старожил


Сообщения: 250
Благодарности: 51

Профиль | Отправить PM | Цитировать


может быть закрывать его

Код: Выделить весь код
$process = [System.Diagnostics.Process]::GetCurrentProcess() | Get-Process
Код: Выделить весь код
$form.add_FormClosing({
    $form.Hide()
    $notifyIcon.Visible = $true
    $_.Cancel = $true
    $notifyIcon.Visible = $false
    $notifyIcon.Dispose()
    $process.CloseMainWindow()
    $process.Dispose()
})

Отправлено: 18:19, 05-07-2024 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Как в powershell gui скрыть значок с панели задач в трей?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Как закрепить значок на панели задач (программно) 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




 
Переход