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

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

Автор: exMIB
Дата сообщения: 22.06.2003 00:03
Есть программа с обычным Windows интерфейсом и две кнопки в верхнем правом углу:

МИНИМИЗАЦИЯ - "_"
ВЫХОД - "x"

Исходников нет, только EXE-файл.
Так как у программы не предусмотрена минимизация при нажатии на "x", то при случайном нажатии на эту кнопку она выгружается из памяти, это конечно правильно, но для моих нужд совсем не удобно.
Кто подскажет как эту кнопку "x" убрать или хотя бы изменить её функцию или сделать ее НЕ функциональной, чтобы при нажатии на неё ничего бы не происходило.

Я пробовал через Restorator, но измененный экзешник потом не запускается
Автор: Sleepwalker
Дата сообщения: 22.06.2003 12:44
ну... это так.. навскидку, сам не пробовал...
пишешь хук на системные сообщения. Зная имя программы, перехватываешь WM_CLOSE на нее и блокируешь. все
Куда в код залезть - пока не знаю...
Автор: sashado
Дата сообщения: 22.06.2003 17:11
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function DeleteMenu Lib "user32.dll" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetSystemMenu Lib "user32.dll" (ByVal hWnd As Long, ByVal bRevert As Long) As Long


Private Sub Command1_Click()
Dim hWnd As Long

hWnd = FindWindow(vbNullString, "Untitled - Notepad")
DeleteMenu GetSystemMenu(hWnd, 0), &HF060, 0


End Sub
Автор: mihas83
Дата сообщения: 17.10.2003 13:34
exMIB
В конце концов получилось или нет?
Автор: exMIB
Дата сообщения: 17.10.2003 22:43
mihas83
Проблема осталась, просто уже устал искать решение.
Я попробовал поправить exe-шник, но прога запускаться перестает.
Может кто-то сможет?

Добавлено
sashado
А это я так понял ты для Delphi строки дал. Что-то не соображу как работает.
Может кто подскажет из программеров как эти строки можно использовать, я сам в программировании слабенько соображаю.
Автор: ShIvADeSt
Дата сообщения: 17.10.2003 23:49
exMIB Sashado дал строки на VB, а не на Дельфи.
Да подобный сабж уже проскакивал. Вот поподробнее. Если ты хоть немного программишь.

Создаешь в Дельфи проект. Кидаешь на форму кнопку. У нее в OnClick пишешь следующее.

var
hWnd:integer;
begin
hWnd:=FindWindow(nil,'Мое окно'); // где 'мое окно' это текст на заголовке твоей проги.
DeleteMenu(GetSystemMenu(hWnd),SC_CLOSE,MF_BYCOMMAND); //данная строка задизейбливает кнопку закрытия окна.
end;

Запускаешь проект запускаешь прогу, нажимаешь баттон и все ОК. Кнопка Х не работает.
Кстати используй фильтр в следующий раз.
Автор: MetroidZ
Дата сообщения: 18.10.2003 00:09
exMIB
придётся делать запускатель для твоей проги, который будет деактивировать кнопку X. Если не трудно можешь поискать здесь аналогичную тему. Там всё было.
Как у твоей проги окно главное называется , могу такой запускатель написать.

Цитата:
Я попробовал поправить exe-шник, но прога запускаться перестает.

а что ты там менял?
Автор: exMIB
Дата сообщения: 18.10.2003 00:20
Я вот ещё не понял, эта запускающая прога всё время должна в памяти висеть?

MetroidZ
А можешь написать прогу на Delphi или VB:
чтобы можно было её использовать для запуска из командной строки, т.е.
proga.exe что_запускать.exe имя_окна
Автор: ShIvADeSt
Дата сообщения: 19.10.2003 23:38

Цитата:
та запускающая прога всё время должна в пам

Нет. Как только кнопка задизейблилась, можно сделать так что прога сама завершится.
Автор: MetroidZ
Дата сообщения: 22.10.2003 23:14
Delphi
пример отключает кнопку закрытия и пункт "закрыть" ситсемного меню заданного окна. procedure TForm1.Button1Click(Sender: TObject);
var
hwndHandle : THANDLE;
hMenuHandle : HMENU;
begin
hwndHandle := FindWindow(nil, 'Untitled - Notepad');
if (hwndHandle <> 0) then begin
hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
if (hMenuHandle <> 0) then
DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
end;
end;

пока некогда прогу делать. Но вот ведь готовая процедура. И тем более тема поднималась такая с этим же примером.
Автор: exMIB
Дата сообщения: 23.10.2003 06:11
MetroidZ

Цитата:
пока некогда прогу делать. Но вот ведь готовая процедура. И тем более тема поднималась такая с этим же примером.

А как тема называлась?

И ещё можешь глянуть в этот топик http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=9854#1 (Название: Пришла новая почта - мигают Num Caps Scroll ), я его только вроде не в тот раздел поместил
Автор: MetroidZ
Дата сообщения: 23.10.2003 08:59

Цитата:
А как тема называлась?

Нашёл
Перехват закрытия приложения
http://forum.ru-board.com/topic.cgi?forum=33&topic=2114#1

А в "Пришла новая почта - мигают Num Caps Scroll" слишком навороченная тема. Надо было постепенно продвигаться к цели, поэтому все и молчат.
сервисы
http://forum.ru-board.com/topic.cgi?forum=33&topic=1837#1
Автор: alexei111
Дата сообщения: 24.10.2003 07:31
Так точно не захватиш закрытие приложение.....
Автор: MetroidZ
Дата сообщения: 24.10.2003 14:34

Цитата:
Так точно не захватиш закрытие приложение.....

да это и не нужно было, как оказалось
просто кнопку отключить.
Автор: mcs
Дата сообщения: 29.10.2003 16:05
exMIB
ты, может, выкинь куда-нибудь в инет,
а я посмотрю, что можно сделать
Автор: exMIB
Дата сообщения: 30.10.2003 22:00
mcs
Это ты программу где X надо убрать или про Num Caps Scroll ?

Добавлено
Вот программа, где надо убрать кнопку X (ВЫХОД): http://xweb3.narod.ru/ICQCorp_client.exe (~1,1 Мб)
Автор: ShIvADeSt
Дата сообщения: 31.10.2003 00:14
exMIB
Слушай скопируй в буфер заголовок формы и помести в тему(или главню часть заголовка). В понедельник будет готова прога. Солью на мыло или заберешь с моего сайта.
Автор: exMIB
Дата сообщения: 31.10.2003 00:33
ShIvADeSt
А если на делфи будешь делать сможешь поставить поле куда можно будет заголовок окна вписать, чтобы каждый раз для других прог новый EXE-шник не лепить или проще -возможность считывания заголовка из txt, который будет в той же папке с EXE-шником лежать
Автор: ShIvADeSt
Дата сообщения: 31.10.2003 03:20
Я сделаю проще. Делаешь окно активным нажимаешь горячую клавишу и кнопка Х не6 работает. часа через два будет на сайте www.shivasak.narod.ru

Добавлено
Можешь забирать. Называется CloseDisabler
Автор: exMIB
Дата сообщения: 31.10.2003 17:29
ShIvADeSt
Я её пока не скачивал, но хотел бы уточнить что она должна запускаться вместе с той прогой где надо крестик убрать, ну вообщем сразу после неё скрытно из автозапуска.
Потому что она будет ставиться на много компов, а меня за ними не будет

Добавлено
ShIvADeSt
А не знаешь случайно ещё решение этого вопроса: http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=9854#1 ?
Автор: exMIB
Дата сообщения: 06.11.2003 21:45
MetroidZ
Если ты на Delphi делаешь и ниже 5 версии, то можешь исходник запускателя кинуть мне, а я сам имя окна пропишу и откомпилирую?
Можно закинуть сюда http://www.konfa.ru/cgi-bin/filex.cgi?up
Автор: UncoNNecteD
Дата сообщения: 06.11.2003 23:27

exMIB - злобный крекер.
То ему надо тайные программы запускать, то кнопки выхода скрывать
Автор: exMIB
Дата сообщения: 07.11.2003 09:58

UncoNNecteD

Цитата:
exMIB - злобный крекер.
То ему надо тайные программы запускать, то кнопки выхода скрывать

Объясняю:
С кряканием в данных случаях совершенно ничего не связано !
"... тайные программы запускать ..." - это надо просто автоматизировать один процесс, который не должен мешать обычной работе юзера, но 100% не кряк
"... кнопки выхода скрывать ..." - есть прога для локальной сети ICQ Groupware, разработчики её забросили лет 5 назад и оставили некоторые недоработки, но она очень удобна и хорошо подходит для локальной сети, вот самая нехорошая доработка - это при нажатии на Х программа не сворачивается в трей, а сразу выгружается из памяти. Рядом есть кнопка сворачивания, но она не скраю, а человеку то что скраю - удобнее нажимать, хотя там и есть опция "сворачиваться автоматически через промежуток времени", но она не всегда успевает сработать, иногда случайно на крестик нажимают и всё, а заново не загружают.
Автор: UncoNNecteD
Дата сообщения: 07.11.2003 13:05
exMIB
Я шучу чувак, не оправдывайся
Автор: MetroidZ
Дата сообщения: 08.11.2003 01:19
exMIB

Цитата:
а я сам имя окна пропишу и откомпилирую?

я уже давно сюда не заглядывал - ладно, только можно проще пусть запускатель, черпает инфу с названием окна из файла *.ini который в любое время можно изменить.

Автор: MetroidZ
Дата сообщения: 08.11.2003 20:39
exMIB
А впрочем создавай в Delphi новое консольное приложение и заменяй код на этот.

program Xremover;

{$APPTYPE CONSOLE}
uses
SysUtils,
Windows,
Messages,
ShellAPI;

var
hwndHandle : THANDLE;
hMenuHandle : HMENU;
begin
{ TODO -oUser -cConsole Main : Insert code here }
// запуск проги в которой убираем X. (блокнот - у меня BRED2)
ShellExecute(0, NiL, 'notepad.exe', NiL, NiL, SW_SHOWNORMAL);

//ждём пока появится
repeat
sleep(300);
hwndHandle := FindWindow(nil, '[БезИмени]-BRED2');
until hwndHandle <> 0;

//отключаем X handle
hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
if (hMenuHandle <> 0) then
DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);

end.


Добавлено
А вот и новая версия - теперь с *.ini файлом
http://www.metroidz.narod.ru/Xremover.rar

Простая консольная прога которая запускает приложение при этом убирая кнопку закрыть, т.е. X.
С прогой должен лежать файл "start+string.ini"
в котором первая строка - запускаемое приложение
вторая строка - название окна этого приложения.
Автор: exMIB
Дата сообщения: 09.11.2003 09:45
MetroidZ
Огромное спасибо, но я её пока на месте не попробовал, в понедельник попробую, только у меня ешё один вопросик, а нельзя сделать такую подмену, чтобы при нажатии на X, программа выполняла то, что происходит при нажатии на кнопку сворачивания "_" ?
Автор: MetroidZ
Дата сообщения: 09.11.2003 09:57

Цитата:
нельзя сделать такую подмену, чтобы при нажатии на X, программа выполняла то, что происходит при нажатии на кнопку сворачивания "_"


Я тоже над этим подумал. Такое возможно.
Автор: exMIB
Дата сообщения: 10.11.2003 21:49
MetroidZ
Если будет возможность сможешь вторую версию сделать с такой добавкой?
Автор: exMIB
Дата сообщения: 14.11.2003 19:21
MetroidZ
Ну как со второй версией ничего не получиться?
Было бы просто идеально !

Страницы: 12

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


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