|
Вопрос # 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 (статус: Посетитель)
Вопрос отправлен: 30 июня 2011, 23:58
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 33; последнее сообщение — 5 июля 2011, 11:16; участников в обсуждении: 3.
Страницы: [1] [2] [Следующая »]
|
min@y™ (статус: Доктор наук), 1 июля 2011, 08:20 [#1]:
А это окно чужой проги или твоей? И почему этой информации нет в вопросе?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 13:15 [#2]:
Чужой.
Извеняюсь, думал таким процедурам и функциям не очень важно моё или чужое.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 13:31 [#3]:
Каково было моё изумление, когда я обнаружил что TerminateProcess тоже не работает. Причём я использовал GetExitCodeProcess как рекомендуют в описании TerminateProcess.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 13:39 [#4]:
Ну я просто так не сидел всё это время.
Работает вот так(странно почему SendMessage не работает):
PostMessage(ParentHandle, WM_QUIT, 0, 0); но иногда при попытке закрыть окно и все его дочерние зависает с предложением чтото там отладить.
А нужно чтоб программа завершалась по любому, в 100% случаев.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
min@y™ (статус: Доктор наук), 1 июля 2011, 13:41 [#5]:
Цитата (QWERYTY):
Чужой. Извеняюсь, думал таким процедурам и функциям не очень важно моё или чужое.
Этим функциям, конечно, пох. Зато программисту, пишущему всё это безобразие, очень большая разница.
Чужое окно принимает сообщение о закрытии. Обработчик сообщения выдаёт модальный диалог и ожидает реакции юзера. Так было задумано аффтаром, от этого никуда не денешься. Но если тебе надо просто грохнуть чужую прогу, то TerminateProcess() тебе в руки.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 13:48 [#6]:
Подождите, про реакцию юзера это как я вроде вчера читал когда WM_SYSCOMMAND, SC_CLOSE, а когда вместо WM_SYSCOMMAND идёт WM_QUIT то пишут что должно закрыться без лишних вопросов чтото там сохранить, точно ли я уверен что хочу выйти.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
bugmenot (статус: 3-ий класс), 1 июля 2011, 13:57 [#7]:
Цитата (QWERYTY):
моё изумление, когда я обнаружил что TerminateProcess тоже не работает
Щас угадаю, код ошибки TerminateProcess никак не проверяется.
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
min@y™ (статус: Доктор наук), 1 июля 2011, 14:24 [#8]:
Цитата (QWERYTY):
пишут что должно закрыться без лишних вопросов чтото там сохранить, точно ли я уверен что хочу выйти.
Ну я тя умоляю! Аффтар захотел так. Прога ловит мессадж WM_QUIT и выводит сообщение.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 14:51 [#9]:
Ребят подождите.
Когда я кликаю на красный крестик в правом верхнем углу приложения то вылазит диалог о закрытии, а когда я отправляю WM_QUIT то никаких лишних вопросов я не видал.
Но к сожалению не всегда работает как нужно.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 15:45 [#10]:
Так ладно, видимо нужно разбираться с TerminateProcess.
Я правильно понял что первый параметр это хендл?
Если да, то я передаю хендл главного окна который я получаю при помощи FindWindow. Второй параметр судя из кодов в интернете может быть 0, это так? Или нужно применять GetExitCodeProcess?
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 15:55 [#11]:
Откройте мой профиль, посмотрите на аватар и поймёте моё состояние. )))
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
bugmenot (статус: 3-ий класс), 1 июля 2011, 16:11 [#12]:
опять стены некогерентного текста
юзай copy con nul
сразу время освободится для чтения справочника MSDN
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 16:30 [#13]:
Так и знал что отошлют в MSDN. Я бы с удовольствием, но дело в том что интернет у меня 3G обрезанный(ну до 32 КБит/с) и это вызывает очень много ошибок, ну например страница ничинает грузиться и если она не открылась за 15 секунд то очень большая вероятность что она вообще не откроется.
Индикаторы в трее гаснут и всё, я конечно не пробовал 2 часа ждать, но это происходит с большим количеством сайтов.
Поэтому инфу приходится собирать очень кропотливо.
Есть ещё маленькая проблемка, я не знаю английского, и даже когда случается божественное проведение(MSDN открывается), то с онлайн переводчиками случается то о чём я писал выше.
Есть переводчик который на комп ставится, но он старенький и из его перевода ничего не понятно.
Помогите пожалуйста с TerminateProcess.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 16:35 [#14]:
Это не только с IE, с оперой тоже но там быстрей можно понять что ты сайт не увидишь. Примерно за 10 секунд.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
bugmenot (статус: 3-ий класс), 1 июля 2011, 18:10 [#15]:
тогда исошник с PSDK выкачай и поставь
или старьё установленное с дельфями юзай
и хватит уже на жалость давить
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 19:17 [#16]:
Никто тут на жалость не давит.
Просто в материалах которые я нашёл начинают запутывать.
Где пишут что нужно ввести "HANDLE hProcess, // дескриптор процесса", а где пишут что "PID : dword", то есть процесс идентификатор.
Я понимаю что я ввожу не те данные, но в интернете не могу найти как получить PID зная хендл.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 19:40 [#17]:
Чё такое спелчекер?????????????????????????????????????????????????
??????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 20:13 [#18]:
Видимо должно быть вот так:
TerminateProcess(GetProcessPID('здесь то что мы видим в диспетчере задачь'));
Но не получается запустить. Что нужно добавить в Uses чтоб запустилась GetProcessPID?
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 1 июля 2011, 21:06 [#19]:
Похоже что не GetProcessPID, а GetProcessID.
Но тем не менее запустить всё равно не могу, Windows в Uses есть.
Чё ни разу никто процессы не убивал?
Или за бабки только?
Пи***ц, завис на 2-х часовой х-не если делать с нуля умея чуть чуть кодить на двое суток.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
bugmenot (статус: 3-ий класс), 1 июля 2011, 21:52 [#20]:
Цитата (QWERYTY):
Чё такое спелчекер??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Смотрите, дети, это - настоящий настоящий хелп-вампир, уже неделю умирает от любопытства, но так и не загуглил.
Цитата (QWERYTY):
Что нужно добавить в Uses чтоб запустилась GetProcessPID
Почему бы не спросить у той безмозглой школоты, которая пишет "задач" с мягким знаком, а функцию называет process process identifier (из чего следует, что оно не разбирается в проблеме совершенно ни хрена)?
Считай, что взял меня измором. Функции:
GetWindowThreadProcessId
TerminateProcess
Win32Check
OpenProcess NEW!
Пока не сам прочтешь в о них в настоящем справочнике - больше консультировать не буду.
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|