Как получить иконку рабочего стола?
От: Azrael  
Дата: 22.11.01 09:28
Оценка:
Как получить иконку рабочего стола или иконку какой-нить программы из SystemTray? Идея состоит в перемещении(скрытии) иконок по рабочему столу или скрытии иконки не моей программы из трея.
Re: Как получить иконку рабочего стола?
От: OlegO Россия http://www.mediachase.ru
Дата: 22.11.01 10:03
Оценка:
Здравствуйте Azrael, Вы писали:

A>Как получить иконку рабочего стола или иконку какой-нить программы из SystemTray? Идея состоит в перемещении(скрытии) иконок по рабочему столу или скрытии иконки не моей программы из трея.


У Рихтера в "Программирование приложений для Windows" есть пример
сохранения позиции иконок рабочего стола.
Очень интересный в плане подключения к чужим окнам.

Могу скинуть пример.
С уважением, OlegO.
Re: Как получить иконку рабочего стола?
От: TSS Россия http://www.sdl.ru
Дата: 23.11.01 10:51
Оценка: 7 (2)
Здравствуйте Azrael, Вы писали:

A>Как получить иконку рабочего стола или иконку какой-нить программы из SystemTray? Идея состоит в перемещении(скрытии) иконок по рабочему столу или скрытии иконки не моей программы из трея.


Про получении иконки с рабочеко стола писал Рихтер в своей "Advanced Windows", а вот на счет скрытии иконок из трея...
Берем Spy++ и смотрим на SysTray и видим, что класс окна SysTray (Shell_TrayWnd->TrayNotifyWnd) есть ToolbatWindow32...

Пример, удаляющий первую иконку из трея (для простоты все проверки выброшены):
void
DeleteFirstIconInTray (
    void
)
{
    // Находим окно трея
    // 
    HWND hTrayWnd = FindWindow (
        _T("Shell_TrayWnd"), // класс окна трея
        _T(""));             // заголовок

    // Находим child-а с классом ToolbarWindow32
    //
    HWND hToolbar = NULL;
    EnumChildWindows (
        hTrayWnd,            // окно трея
        FindToolbarProc,     // процедура перечисления
        (LPARAM) &hToolbar); // переменная для сохранения результата

    // Удаляем первую иконку
    //
    SendMessage (
        hToolbar,            // окно тулбара (трея с иконками)
        TB_DELETEBUTTON,     // "удалить кнопку"
        (WPARAM) 0,          // номер кнопки
        (LPARAM) 0);         // всегда 0

} // DeleteFirstIconInTray


а вот процедура поиска окна:
BOOL
CALLBACK
FindToolbarProc (
    HWND   hwnd,            // handle to child window
    LPARAM lParam           // application-defined value
)
{
    // Определяем класс окна ...
    //
    TCHAR szBuffer[256];
    GetClassName (
        hwnd,               // окно
        szBuffer,           // буфер
        sizeof (szBuffer) / sizeof (szBuffer[0])); // размер буфера

    // Сравниваем...
    //
    if (0 == lstrcmp (szBuffer, _T("ToolbarWindow32")))
    {
        // Нашли
        //
        *((HWND *) lParam) = hwnd;
        return (FALSE); // больше не перечислять
    }

    return (TRUE); // продолжаем перечисление

} // FindToolbarProc


Правда остаеться один прикол... Нужно изменять разметы трея, а то кнопки удаляються, а вот "пустое место" остаеться... :)
Signed, [TSS] /SDL/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.