| 
| 
 | Вопрос # 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |