Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрыть все окна! 
:(
    Опции темы
Гость_Гость
Дата 23.4.2004, 21:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Добрые граждане очень нужно написать программу на Delphi которая при запуске бы закрывала все окна в винде. Учитывая Ваше непревзойденное мастерство, могу предположить, что такую процедурку будет написать крайне не сложно. Поможите пожалуйста!

Заранее огромное Вам спасибо!!!
  Вверх
dm9
Дата 23.4.2004, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Ты уверен, что хочешь закрыть ВСЕ окна? smile.gif
Я бы такое сделать не рискнул smile.gif Придётся много восстанавливать даже после перезагрузки smile.gif

Ну а если серьёзно, в ФАКе Vit'a (прикреплённая тема в форуме) есть получение всех окон (статья "Как определить какие приложения уже запущены?"). Имеется в виду, тех окон, что показываются по Ctrl-Alt-Del (список задач). Гасишь эти окна таким образом:

GetWindowThreadProcessId (Wnd, pid); //Wnd - это оттуда, из функции, которая в статье.
TerminateProcess (OpenProcess (PROCESS_TERMINATE, false, pid), 0);
Добавлено @ 22:25
Точнее не окна гасишь, а процессы, соответствующие этим окнам.
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 24.4.2004, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Блин, а на кой это нужно?! Ведь ещё надо следить за тем, чтобы нужные процессы не убить по неосторожности...
PM   Вверх
dm9
Дата 24.4.2004, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Pakshin A. S., не убъёшь. Смотри статью.
А вот на кой нужно - вопрос... Не знаю.
PM MAIL ICQ   Вверх
Гость_Гость
Дата 25.4.2004, 16:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Дайте пожалуйста линк на статью.
А нужно вот зачем. Дело в том, что возникла острая необходимость из Flash апликации, которая запущена на весь экран вырубить системный звук(именно системный, потому как звук конкретной флэшки регулируется из нее же элементарно), вот я и подумал, что напишу-ка я программу на Дельфях, которая закрывает все окна и вызову ее из Flash'a, тогда пользователь, свернув полноэкранную флашугу сможет спокойно кликнуть по значку звукового динамика в системном трее и убавить как ему хочется этот самый звук... А извращаться так нужно потому, что клавиатура пользователю с мышью недоступны - вместно них лишь сенсорный экран...
  Вверх
dm9
Дата 25.4.2004, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



А зачем программы закрывать? Значок и так доступен же...

Наверняка можно решить проблему проще - опиши её поподробнее, ничего не понял.

А статья в оффлайн ФАК. Оффлайн на то и оффлайн, что ссылки нету. Качать его весь тут:
http://forum.vingrad.ru/index.php?showtopic=15409
Из некоторых соображений статью оттуда вырезать и вставлять сюда не хочу.
PM MAIL ICQ   Вверх
Гость_Гость
Дата 26.4.2004, 01:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да нет же в том-то все и дело, что Flash апликация запущена в режиме full screen, то бишь совсем в полный экран - нет ничего на мониторе кроме окна самой флэшки, а значит и трея системного нет(он за основным окном анимации)... Проблема в том, что компьютер на кот. это все нужно делать стоит в таком деревянном ящике из которого торчит только сенсорный экран и больше ничего, то есть клава и мышь вообще-то говоря есть, но они тоже в этом ящике и пользователь к ним не имеет доступа, а может только пальцем в экран тыкать... Такие машины стоят во всяких общественных местах, например, в игровых залах вместо покерных автоматов обычные РС-шки с сенсорными экранами, запаянные в ящики. Кстати, уважаемый, dm9 не скажите в каком конкретном разделе находится эта статья в FAQ'е, потому как скачал я тут его, а вот пример найти никак не могу, поможите ламеру!
  Вверх
dm9
Дата 26.4.2004, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



А зачем закрывать все приложения? Достаточно свернуть флешку - и трей будет доступен.

Системные ф-ции и WinAPI -> Windows -> Процессы, потоки, память, задачи -> Как определить какие приложения уже запущены?
PM MAIL ICQ   Вверх
Гость_Гость
Дата 27.4.2004, 19:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
GetWindowThreadProcessId (Wnd, pid); //Wnd - это оттуда, из функции, которая в статье.
TerminateProcess (OpenProcess (PROCESS_TERMINATE, false, pid), 0);

Я так понимаю, что данную процедуру нужно проделать с каждим окном, встречающимся по ходу работы цикла, правильно? Только вот я не понимаю откуда я pid возьму? Именно на него компилятор ругается... Уж простите за нелепый вопрос.
  Вверх
Guest
Дата 28.4.2004, 07:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











свернуть

SendMessage(HWnd,WM_SYSCOMMAND,CS_MINIMIZE,0)

развернуть

SendMessage(HWnd,WM_SYSCOMMAND,CS_MAXIMIZE,0)

//Wnd - это оттуда, из функции, которая в статье.

Можно так сделать

  Вверх
Guest
Дата 28.4.2004, 08:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В местсо pid попробуй напиши @mProcessID
  Вверх
Гость_Гость
Дата 28.4.2004, 08:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не выходит с @mProcessID - пишет: undeclared identifier
что в это статье имелось в виду под pid - process id? Я так понимаю, что никто так и не поможет мне закрыть все окна...
  Вверх
p0s0l
Дата 28.4.2004, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Не поможем. Потому что это заведомо неправильный подход к решению задачи. Убить все окна и почти все процессы в системе - это круто! Что потом пользователь будет делать с пустым экраном ? Да он вообще ничего не сможет сделать, даже эту же громкость изменить...

Добавлено @ 10:02
Ладно, чтобы сам убедился, что ничего хорошего не выйдет...
Цитата
Только вот я не понимаю откуда я pid возьму? Именно на него компилятор ругается... Уж простите за нелепый вопрос

PID (Process ID) получаешь вызовом
GetWindowThreadProcessId (Wnd, pid);
Эта функция смотрит - какому процессу принадлежит окно Wnd, а заносит ID этого процесса в pid.
Если Pid не объявлен, то объяви как var pid : THandle;



--------------------
С уважением, г-н Посол.
PM   Вверх
dm9
Дата 28.4.2004, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Цитата
Если Pid не объявлен, то объяви как var pid : THandle;


Такие вещи уважаемый гость мог бы посмотреть сам в справочке...
Вот в этой: Пуск->Программы->Borland Delphi 7->Help->MS SDK Help Files->Win32 SDK Reference

Вместо этого:
Цитата
GetWindowText(Wnd, buff, sizeof(buff)); 
ListBox1.Items.Add(StrPas(buff));


поставь это:
Цитата
GetWindowThreadProcessId (Wnd, pid); //Wnd - это оттуда, из функции, которая в статье.
TerminateProcess (OpenProcess (PROCESS_TERMINATE, false, pid), 0);


Объявив var pid : THandle;



Цитата
Не поможем. Потому что это заведомо неправильный подход к решению задачи. Убить все окна и почти все процессы в системе - это круто! Что потом пользователь будет делать с пустым экраном ? Да он вообще ничего не сможет сделать, даже эту же громкость изменить...


Закрываются только те приложения, которые есть в таксбаре.
Добавлено @ 13:04
Кроме нашего приложения, конечно...
PM MAIL ICQ   Вверх
p0s0l
Дата 28.4.2004, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Цитата
Закрываются только те приложения, которые есть в таксбаре.
Ну это смотря каким способом он будет отыскивать окна...
Да и не в этом дело - кто же так жестоко поступает ? Не уж просто свернуть нельзя ?



--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 28.4.2004, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Цитата
Ну это смотря каким способом он будет отыскивать окна...

dm9, я щас сначала прочитал - и всё понял. smile.gif
Я то решил, что ты просто сказал ему "ищи в FAQ'е", а ты ему конкретную статью указал (чего я почему-то не заметил). Так что да - тут ты прав, таким способом закроются только таксбарные окна...
Но всё равно лучше их просто свернуть, тогда никаких PID'ов не надо будет...



--------------------
С уважением, г-н Посол.
PM   Вверх
Гость_Гость
Дата 28.4.2004, 21:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
Не поможем. Потому что это заведомо неправильный подход к решению задачи.

Дак вы же уже помогли - вот, после десятой попытки я таки добился от программы закрытия всех окон! А по поводу правильности или неправильности эт вы конечно правы, вот только от меня не требовалось рассуждать на эту тему, просто сказали: вызови из Flash'а программу, кот. закрывала бы все окна, что я и сделал...

Вот только никак не могу скомпилировать библиотеки вместе с ехе-шкой, не поможите ламеру? Я так понимаю это делается в Projects->Options->Compiler->??? или ешо где? Помогите пожалуйста откомпилировать библиотеки, а то на других компах, где Дельфи нет, не запускаетсяsad.gif
  Вверх
p0s0l
Дата 29.4.2004, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Если я правильно понял, то убери галку Project->Options->Packages->Build with run-time packages



--------------------
С уважением, г-н Посол.
PM   Вверх
Гость_Гость
Дата 29.4.2004, 11:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











p0s0l, большое спасибо теперь точно всеsmile.gif
  Вверх
Гость_Гость
Дата 30.4.2004, 10:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Хотя так намного проще, хоть и на MFC:

#include "stdafx.h"

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HWND hWnd;
BOOL b;

while ((hWnd = FindWindow("ShockwaveFlash", NULL)) != NULL) {
b = PostMessage(hWnd, WM_CLOSE, 0, 0);
}
return 0;
}

Не понимаю, почему Вы мне так не посоветовали сделать на Дельфи, а стали говорить про minimize...
  Вверх
dm9
Дата 30.4.2004, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Блин, Гость.

Вопрос как звучал?
Цитата
Добрые граждане очень нужно написать программу на Delphi которая при запуске бы закрывала все окна в винде.


Теперь смотрим на приведённый код. Он закрывает все окна с флешками. Но не все окна!

А стали мы говорить при минимайз потому, что закрывать все окна - это некрасиво, неуважение к пользователю, однако.
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.