Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 465

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
Не получается уничтожить окно. Не срабатывают ни DestroyWindow ни SendMessage. С хендлом ошибки нет, перепроверенно 150 раз.
Причём SendMessage срабатывает когда я посылаю сообщение сделать курсор вопросительным знаком:

SendMessage(Handle, WM_SYSCOMMAND, SC_CONTEXTHELP, 0); или
когда пытаюсь закрыть:

SendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, 0); но при этом появляется диалог подтверждения. Подскажите как закрыть окно без лишних вопросов и подтверждений.

Спасибо.

Примечание #1 (1 июля 2011, 00:11):
Может это важно, я посылаю сообщение в момент закрытия своей проги. Пробовал и когда FormDestroy и когда FormClose, но окно как дамоклов меч, на месте.
И вот так тоже пробовал:
SendMessage(Handle, WM_QUIT, 0, 0);

QWERYTY Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: QWERYTY (статус: Посетитель)
Вопрос отправлен: 30 июня 2011, 23:58
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 33; последнее сообщение — 5 июля 2011, 11:16; участников в обсуждении: 3.

Страницы: [1] [2] [Следующая »]

min@y™

min@y™ (статус: Доктор наук), 1 июля 2011, 08:20 [#1]:

А это окно чужой проги или твоей? И почему этой информации нет в вопросе?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 13:15 [#2]:

Чужой.
Извеняюсь, думал таким процедурам и функциям не очень важно моё или чужое.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 13:31 [#3]:

Каково было моё изумление, когда я обнаружил что TerminateProcess тоже не работает. Причём я использовал GetExitCodeProcess как рекомендуют в описании TerminateProcess.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 13:39 [#4]:

Ну я просто так не сидел всё это время.
Работает вот так(странно почему SendMessage не работает):
PostMessage(ParentHandle, WM_QUIT, 0, 0); но иногда при попытке закрыть окно и все его дочерние зависает с предложением чтото там отладить.
А нужно чтоб программа завершалась по любому, в 100% случаев.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
min@y™

min@y™ (статус: Доктор наук), 1 июля 2011, 13:41 [#5]:

Цитата (QWERYTY):

Чужой. Извеняюсь, думал таким процедурам и функциям не очень важно моё или чужое.

Этим функциям, конечно, пох. Зато программисту, пишущему всё это безобразие, очень большая разница.
Чужое окно принимает сообщение о закрытии. Обработчик сообщения выдаёт модальный диалог и ожидает реакции юзера. Так было задумано аффтаром, от этого никуда не денешься. Но если тебе надо просто грохнуть чужую прогу, то TerminateProcess() тебе в руки.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 13:48 [#6]:

Подождите, про реакцию юзера это как я вроде вчера читал когда WM_SYSCOMMAND, SC_CLOSE, а когда вместо WM_SYSCOMMAND идёт WM_QUIT то пишут что должно закрыться без лишних вопросов чтото там сохранить, точно ли я уверен что хочу выйти.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
bugmenot

bugmenot (статус: 3-ий класс), 1 июля 2011, 13:57 [#7]:

Цитата (QWERYTY):

моё изумление, когда я обнаружил что TerminateProcess тоже не работает

Щас угадаю, код ошибки TerminateProcess никак не проверяется.
виконання програми розпочинається з того самого мiсця, де призупинилося.

min@y™

min@y™ (статус: Доктор наук), 1 июля 2011, 14:24 [#8]:

Цитата (QWERYTY):

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

Ну я тя умоляю! Аффтар захотел так. Прога ловит мессадж WM_QUIT и выводит сообщение.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 14:51 [#9]:

Ребят подождите.
Когда я кликаю на красный крестик в правом верхнем углу приложения то вылазит диалог о закрытии, а когда я отправляю WM_QUIT то никаких лишних вопросов я не видал.
Но к сожалению не всегда работает как нужно.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 15:45 [#10]:

Так ладно, видимо нужно разбираться с TerminateProcess.
Я правильно понял что первый параметр это хендл?
Если да, то я передаю хендл главного окна который я получаю при помощи FindWindow. Второй параметр судя из кодов в интернете может быть 0, это так? Или нужно применять GetExitCodeProcess?
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 15:55 [#11]:

Откройте мой профиль, посмотрите на аватар и поймёте моё состояние. )))
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
bugmenot

bugmenot (статус: 3-ий класс), 1 июля 2011, 16:11 [#12]:

опять стены некогерентного текста
юзай copy con nul
сразу время освободится для чтения справочника MSDN
виконання програми розпочинається з того самого мiсця, де призупинилося.

QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 16:30 [#13]:

Так и знал что отошлют в MSDN. Я бы с удовольствием, но дело в том что интернет у меня 3G обрезанный(ну до 32 КБит/с) и это вызывает очень много ошибок, ну например страница ничинает грузиться и если она не открылась за 15 секунд то очень большая вероятность что она вообще не откроется.
Индикаторы в трее гаснут и всё, я конечно не пробовал 2 часа ждать, но это происходит с большим количеством сайтов.
Поэтому инфу приходится собирать очень кропотливо.
Есть ещё маленькая проблемка, я не знаю английского, и даже когда случается божественное проведение(MSDN открывается), то с онлайн переводчиками случается то о чём я писал выше.
Есть переводчик который на комп ставится, но он старенький и из его перевода ничего не понятно.

Помогите пожалуйста с TerminateProcess.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 16:35 [#14]:

Это не только с IE, с оперой тоже но там быстрей можно понять что ты сайт не увидишь. Примерно за 10 секунд.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
bugmenot

bugmenot (статус: 3-ий класс), 1 июля 2011, 18:10 [#15]:

тогда исошник с PSDK выкачай и поставь
или старьё установленное с дельфями юзай
и хватит уже на жалость давить :-P
виконання програми розпочинається з того самого мiсця, де призупинилося.

QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 19:17 [#16]:

Никто тут на жалость не давит.
Просто в материалах которые я нашёл начинают запутывать.
Где пишут что нужно ввести "HANDLE hProcess, // дескриптор процесса", а где пишут что "PID : dword", то есть процесс идентификатор.
Я понимаю что я ввожу не те данные, но в интернете не могу найти как получить PID зная хендл.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 19:40 [#17]:

Чё такое спелчекер?????????????????????????????????????????????????
??????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 20:13 [#18]:

Видимо должно быть вот так:

TerminateProcess(GetProcessPID('здесь то что мы видим в диспетчере задачь'));

Но не получается запустить. Что нужно добавить в Uses чтоб запустилась GetProcessPID?
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
QWERYTY

QWERYTY (статус: Посетитель), 1 июля 2011, 21:06 [#19]:

Похоже что не GetProcessPID, а GetProcessID.
Но тем не менее запустить всё равно не могу, Windows в Uses есть.
Чё ни разу никто процессы не убивал?
Или за бабки только?
Пи***ц, завис на 2-х часовой х-не если делать с нуля умея чуть чуть кодить на двое суток.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
bugmenot

bugmenot (статус: 3-ий класс), 1 июля 2011, 21:52 [#20]:

Цитата (QWERYTY):

Чё такое спелчекер??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Смотрите, дети, это - настоящий настоящий хелп-вампир, уже неделю умирает от любопытства, но так и не загуглил.

Цитата (QWERYTY):

Что нужно добавить в Uses чтоб запустилась GetProcessPID

Почему бы не спросить у той безмозглой школоты, которая пишет "задач" с мягким знаком, а функцию называет process process identifier (из чего следует, что оно не разбирается в проблеме совершенно ни хрена)?

Считай, что взял меня измором. Функции:
GetWindowThreadProcessId
TerminateProcess
Win32Check
OpenProcess NEW!
Пока не сам прочтешь в о них в настоящем справочнике - больше консультировать не буду.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:34
Выполнено за 0.03 сек.