Принудительное сворачивание программы в трей

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
Zdorovjak
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.02.2011 (Ср) 19:30

Принудительное сворачивание программы в трей

Сообщение Zdorovjak » 12.09.2011 (Пн) 19:38

Уважаемые коллеги!

Ну вот как-то так (принудительное сворачивание программы в трей), наверное стоит озаглавить этот вопрос, хотя не уверен в правильности формулировки...
В общем, мысль была такая - в панели задач открыты какие-то приложения, с помощью программы юзер может не останавливая выполнения этих приложений "заставить" их кнопки исчезнуть из Панели задач (как вариант, через hWnd выбранного окна, которому присваевается значение invisible), но при этом добавляет их в собственный список задач или трей, из которого окно программы можно развернуть как если бы оно было в Панели задач, или даже вернуть обратно. Причём по желанию юзера, лишь по введению определённого пароля.
По-моему, это интересная тема, т.к. бывает уходишь с работы, оставляя ноутбук включённым (закачки всякие разные), а вечером приходит шеф и может случайно открыть эти процессы... ))

Гугль не слишком помог, т.к. я не уверен в правильности формулировки вопроса.
Надеюсь, не ошибся с темой "для профессионалов", ибо задача выглядет довольно сложной.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Принудительное сворачивание программы в трей

Сообщение iGrok » 12.09.2011 (Пн) 19:58

Ошибся, чуть выше целая табличка с "правилами", там написано, почему ошибся.

А вообще софтин типа HideToTray - навалом.
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 12.09.2011 (Пн) 20:10

В чём собственно вопрос? Как написать такую программу?

Управление видимостью окон.7z
Если не лень окна руками искать
(7.88 Кб) Скачиваний: 359

Zdorovjak
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.02.2011 (Ср) 19:30

Re: Принудительное сворачивание программы в трей

Сообщение Zdorovjak » 12.09.2011 (Пн) 21:14

Да не, прогу я сам хочу написать, вопрос лишь в указании на конкретные команды бейсика, кот. за это отвечают. Вот примерно то, что нужно, иллюстрирует пример Qwertiy.
А подобных софтин может и много, но когда привык писать для себя, есть желание сделать самому. Да оно и гибче получается. :)

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 12.09.2011 (Пн) 22:03

Надо использовать следующие функции WinApi:
Код: Выделить всё
Public Overloads Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As IntPtr, ByVal lpString As String, ByVal cch As Integer) As Integer
Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As IntPtr) As Integer
Public Declare Function AddWindowsToList Lib "user32" Alias "EnumWindows" (ByVal lpEnumFunc As WindowEnumerator, ByVal lparam As IList) As Integer
Public Overloads Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As IntPtr, ByVal lpClassName As String, ByVal nMaxCount As Integer) As Integer
Public Declare Function AddChildWindowsToList Lib "user32" Alias "EnumChildWindows" (ByVal hwnd As IntPtr, ByVal lpEnumFunc As WindowEnumerator, ByVal lparam As IList) As Boolean
Public Declare Function GetParent Lib "user32" Alias "GetParent" (ByVal hwnd As IntPtr) As IntPtr
Public Declare Function IsWindowVisible Lib "user32" Alias "IsWindowVisible" (ByVal hwnd As IntPtr) As Boolean
Public Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Integer
Разумеется, описания придётся поменять.

Zdorovjak
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 09.02.2011 (Ср) 19:30

Re: Принудительное сворачивание программы в трей

Сообщение Zdorovjak » 12.09.2011 (Пн) 22:31

Qwertiy, благодарю!


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList