Свернуть все окна приложений на рабочем столе
От: aGrey Литва  
Дата: 02.08.04 17:53
Оценка: 45 (4) +1
#Имя: FAQ.winapi.minimizeall2
Вариантов конечно много, но, есть таки и "легальный" способ...
На C++ это будет выглядеть так:

#include <windows.h>
#include <shldisp.h> // ole32.lib uuid.lib

BOOL SHMinimizeAll(BOOL fUndo) {

LONG lRes = -1, lNCo = CoInitialize(NULL);

if(lNCo == S_OK || lNCo == S_FALSE)
{
    IShellDispatch * pIShDisp = NULL;

    CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER,
        IID_IShellDispatch, (LPVOID*)&pIShDisp);

    if(pIShDisp != NULL)
    {
        if(fUndo) lRes = pIShDisp->MinimizeAll();
        else      lRes = pIShDisp->UndoMinimizeALL();

        pIShDisp->Release();
    }

    CoUninitialize();
}

return (lRes == S_OK);    }


А можно и на JavaScript

new ActiveXObject('Shell.Application').MinimizeAll()
Как свернуть все окна приложений на рабочем столе
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 02.08.04 15:38
Оценка: 31 (4)
#Имя: FAQ.winapi.minimizeall
А>у меня в программе должна быть реализована функция "свернуть все окна".

    HWND wnd = ::FindWindow( "Shell_TrayWnd", NULL );

    if ( wnd != NULL )
        ::SendMessage( wnd, WM_COMMAND, 0x019f, 0 ); //Свернуть все окна
Любая задача имеет решение, даже когда решения не существует
Re: свернуь все окна приложений на рабочем столе
От: adontz Грузия http://adontz.wordpress.com/
Дата: 02.08.04 15:38
Оценка: -1
Здравствуйте, Аноним, Вы писали:

а если сэмулировать нажатие клавиш Win+M или Win+D?
A journey of a thousand miles must begin with a single step © Lau Tsu
свернуь все окна приложений на рабочем столе
От: Аноним  
Дата: 02.08.04 15:34
Оценка:
приветствую всех!
люди помогите найти решение след. проблеммы...
заранее оговорюсь, что просмотрел весь форум по WINAPI и не нашел редения данной проблеммы, встречал только решение частных случаев (типа свернуть одно ОПРЕДЕЛЕННОЕ окно).
у меня в программе должна быть реализована функция "свернуть все окна".
я пытался решить эту проблемму с помощью фун. EnumWindow но она перебирает HWND не только окон приложений, а также невибимых окон приложений (например тех что в трее) и когда я его(такое окно) минимизирую, посылкой
SendMessage(hwnd,MW_SYSCOMMAND,(MAKEWPARAM(SC_CLOSE,0),0);
оно(они) становиться ВИДИМЫМ!!!
Но мне этого никак не нужно.
Подсткажите как определить:
1) что хэндл окна являеться хэндлом именно видимого окна приложения.(наприме Word или Окно папки)
2) или ваш вариант всертывания всех окон
заранее благодарен за любой ответ
Re[2]: свернуь все окна приложений на рабочем столе
От: Аноним  
Дата: 02.08.04 15:41
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


A>а если сэмулировать нажатие клавиш Win+M или Win+D?


пробовал... не получилось у меня!
Re[2]: свернуь все окна приложений на рабочем столе
От: Аноним  
Дата: 02.08.04 15:44
Оценка:
Здравствуйте, Burd, Вы писали:

B>
B>wnd = ::FindWindow( "Shell_TrayWnd", NULL );    
        
B>if ( wnd != NULL )
B>  ::SendMessage( wnd, WM_COMMAND, 0x019f, 0 ); /Свернуть все окна
B>


Много уважаемы мистре Burd огромное вам спасибо!!!!
но можно тогда еще один вопросик...
Что за константа 0x019f и почему енто собщение нуна посылать Shell_TrayWnd это наверное ярлычок свернуть све окна???(предположение)
Re[3]: свернуь все окна приложений на рабочем столе
От: Burd Украина http://proxysearcher.sourceforge.net
Дата: 02.08.04 15:53
Оценка:
A>Что за константа 0x019f

Недокументированая. Как можно узнать? С помощь программки работы с окнами (spy++). Перехватить сообщение, которое генерится при нажатии кнопок 'свернуть все окна'. Замечу, что приведеный мной код — это не эмуляция нажатия.

А>и почему енто собщение нуна посылать Shell_TrayWnd это наверное ярлычок свернуть све окна???(предположение)


Нет. Кто принимает окна, которые сворачиваются? Панель задач — вот это она их и сворачивает. Правда, сворачивает процесс с названием explorer.exe, но окно Shell_TrayWnd создается в нем.
Любая задача имеет решение, даже когда решения не существует
Re[3]: свернуь все окна приложений на рабочем столе
От: .Mistery Беларусь  
Дата: 02.08.04 15:55
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Burd, Вы писали:


B>>
B>>wnd = ::FindWindow( "Shell_TrayWnd", NULL );    
        
B>>if ( wnd != NULL )
B>>  ::SendMessage( wnd, WM_COMMAND, 0x019f, 0 ); /Свернуть все окна
B>>


А>Много уважаемы мистре Burd огромное вам спасибо!!!!

А>но можно тогда еще один вопросик...
А>Что за константа 0x019f и почему енто собщение нуна посылать Shell_TrayWnd это наверное ярлычок свернуть све окна???(предположение)

Я понимаю, что "Аноним" может быть недостаточно опытен в WinAPI но это не является оправданием таких дурацких предположений!
Посмотрите хотябы справку по FindWindow! А потом заодно и раздел Windowing в MSDN!

Удачи!
... << RSDN@Home 1.1.3 beta 1 >>
Мы — маньяки, должны помогать друг другу!
Re[4]: свернуь все окна приложений на рабочем столе
От: Аноним  
Дата: 02.08.04 15:55
Оценка:
Здравствуйте, Burd, Вы писали:

A>>Что за константа 0x019f


B>Недокументированая. Как можно узнать? С помощь программки работы с окнами (spy++). Перехватить сообщение, которое генерится при нажатии кнопок 'свернуть все окна'. Замечу, что приведеный мной код — это не эмуляция нажатия.


А>>и почему енто собщение нуна посылать Shell_TrayWnd это наверное ярлычок свернуть све окна???(предположение)


B>Нет. Кто принимает окна, которые сворачиваются? Панель задач — вот это она их и сворачивает. Правда, сворачивает процесс с названием explorer.exe, но окно Shell_TrayWnd создается в нем.


большое сэнкю! как это я не догадасля spy++ врубить! (стормозил)
еще рас спасибо
Re[4]: свернуь все окна приложений на рабочем столе
От: Аноним  
Дата: 02.08.04 15:58
Оценка:
Здравствуйте, .Mistery, Вы писали:

M>Здравствуйте, <Аноним>, Вы писали:


А>>Здравствуйте, Burd, Вы писали:


B>>>
B>>>wnd = ::FindWindow( "Shell_TrayWnd", NULL );    
        
B>>>if ( wnd != NULL )
B>>>  ::SendMessage( wnd, WM_COMMAND, 0x019f, 0 ); /Свернуть все окна
B>>>


А>>Много уважаемы мистре Burd огромное вам спасибо!!!!

А>>но можно тогда еще один вопросик...
А>>Что за константа 0x019f и почему енто собщение нуна посылать Shell_TrayWnd это наверное ярлычок свернуть све окна???(предположение)

M>Я понимаю, что "Аноним" может быть недостаточно опытен в WinAPI но это не является оправданием таких дурацких предположений!

M>Посмотрите хотябы справку по FindWindow! А потом заодно и раздел Windowing в MSDN!

M>Удачи!


Мда, оправдания здесь бесполезны...Спасибо загляну!
Re[2]: свернуь все окна приложений на рабочем столе
От: Аноним  
Дата: 02.08.04 17:16
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


A>а если сэмулировать нажатие клавиш Win+M или Win+D?

еще вариант — сделать ShellExecute("Show Desktop.scf" )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.