Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Как убрать кнопку выхода у программы?

Автор: exMIB
Дата сообщения: 26.11.2003 13:21
MetroidZ
А как быть если у этого приложения, у которого необходимо убрать кнопку "X" скрыто имя окна в диспетчере задач?
Автор: MetroidZ
Дата сообщения: 28.11.2003 16:13
exMIB
от FindWindow ничего не скроется, а узнать имя можно через программу диспетчер процессов - например WinKiller. Он показывает даже скрытые окна.
Автор: exMIB
Дата сообщения: 30.11.2003 12:29
MetroidZ
Плохо только что в программе, где необходимо крестик убирать, ICQGroupware имена окон на разных компах разные, так как в имени находится просто номер юзера.
Автор: exMIB
Дата сообщения: 02.12.2003 10:22
MetroidZ
А как скрыть запуск Xremover, чтобы он без окон запускался?
Автор: mr_eoi
Дата сообщения: 13.01.2005 07:42
exMIB
10:22 02-12-2003
Цитата:
MetroidZ
А как скрыть запуск Xremover, чтобы он без окон запускался?

По тексту программы: убрать {$APPTYPE CONSOLE}
ShellExecute я бы заменил на CreateProcess
Автор: exMIB
Дата сообщения: 13.01.2005 22:54
Ура ! Я нашел CLASS окна (с помощью проги _http://www.is.svitonline.com/shkilsoft/products/SSWinInfo.zip) клиента ICQGW и на двух компах он оказался одинаковым, значит думаю и на всех таким же будет.

Сlass: #32770

Спасибо mr_eoi !

И ещё можешь подкорректировать код, который дал MetroidZ выше, когда уже известен CLASS, а то я в программировании плохо разбираюсь.

И как ты считаешь пропатчить EXE-файл или DLL-файл не реально или реально, чтобы вообще не запускать лишних программ?
Автор: ShIvADeSt
Дата сообщения: 14.01.2005 01:59
exMIB

Цитата:
Сlass: #32770

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

Цитата:
И как ты считаешь пропатчить EXE-файл или DLL-файл не реально или реально, чтобы вообще не запускать лишних программ?

Все зависит от как создается окно, если из ресурса, то можно в ресурсе флаг убрать (если конечно они его в программе не изменяют). А если не из ресурса берется диалог (хотя судя по классу именно оттуда), тогда так просто не получиться.
Автор: exMIB
Дата сообщения: 14.01.2005 05:09
ShIvADeSt

Цитата:
Это класс всех диалогов в винде. Если ты запустишь прогу с поиском этого класса и убиранием кнопки закрытия, то тебя ждет неприятный факт, когда часть стандартных диалогов нельзя будет закрыть

Очень печально
Автор: ShIvADeSt
Дата сообщения: 14.01.2005 05:57
exMIB
Слушай, если файл проги не слишком большой залей на мыло shiva_destroyer ##### mail.ru поковряюсь, мож смогу убрать.
Автор: mr_eoi
Дата сообщения: 14.01.2005 08:19
ShIvADeSt
01:59 14-01-2005
Цитата:
Это класс всех диалогов в винде. Если ты запустишь прогу с поиском этого класса и убиранием кнопки закрытия, то тебя ждет неприятный факт, когда часть стандартных диалогов нельзя будет закрыть

Так зто не страшно. После нахождения хендла окна, идентифицировать нужное можно уже по вторичным признакам - меню, кнопкам и т.п., в конце, концов по имени вызывающего модуля (проще говоря EXE-шника).
Автор: Pinocchio
Дата сообщения: 14.01.2005 08:42
exMIB

1) А какая сложность в нахождении хендла самой кнопки [x]? Немного посканнировав хендлы посылая им сообщения WM_RBUTTONUP, WM_LBUTTONUP можно понять принцип. И лучше отработать эти действия, чтобы потом не вспоминать, а как там было в другой программе.

2) Дальше устанавливается банальный Hook на кнопку, который заменяет сообщения WM_LBUTTONDOWN, WM_LBUTTONUP на вызов MinimizeWindow(Handle). В хуке не следует использовать глобальных переменных своего процесса, так как на разных версиях винды будет глючить по разному.
Автор: ShIvADeSt
Дата сообщения: 14.01.2005 09:13
Pinocchio

Цитата:
А какая сложность в нахождении хендла самой кнопки [x]

А ты уверен, что у нее есть хэндл? В том то и дело, что кнопка закрытия, есть ничто иное, как рисунок на заголовке, поэтому хэндла у нее нет и не будет.

Цитата:
Дальше устанавливается банальный Hook на кнопку,

Хук можно установить, но только не на кнопку, а на события WM_CLOSE и WM_SYSCOMMAND, заглушив их выход, и вызвав при их появлении ShowWindow(hWnd,SW_HIDE); или минимайз. Только вот когда я пробовал это сделать, что то плохо у меня получалось, видно недопонимаю тонкостей работы с хуками. А exMIB пишет, что он сам не разбирается в программировании.
Автор: Pinocchio
Дата сообщения: 14.01.2005 11:44
ShIvADeSt

Цитата:
А ты уверен, что у нее есть хэндл?

Запамятвовал, последнее время просто запрещаю кнопку не удаляя её, на время пока программу нельзя вырубать (как при нарезке в Nero).

Цитата:
видно недопонимаю тонкостей работы с хуками.

1) У хука свой формат сообщения, отличный от принимаемого программой.
2) Как я и говорил, в хуках нельзя ядресовываться на глобальную память (типа DS:ESI), для этого делается MapFile.
3) Хуки отлично работают когда находятся в DLL. Дело в том что EXE это процесс со своей исключительной памятью. Т.е. написать хук нажатия кнопки Ctrl во всём Windows невозможно если адрес обработчика хука находится в пространстве EXE. Он получит только свои сообщения. Хотя перебросив тот же код в DLL-ку вы сразу же начнёте получать все сообщения дублетом, т.е. в системном процессе и в DLL.
Автор: EMOE
Дата сообщения: 09.03.2007 15:27
Может кто посоветует, как удалить кнопку из диалогового окна? Есть диск с инсталляцией винды, при запуске выскакивает окно, в котором есть ненужные кнопки. Есть возможность их убрать? За ранее всем благодарен.

Страницы: 12

Предыдущая тема: Продолжение Вопроса о выборе БД... :)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.