Sweta |
Отправлено: 22.04.2004, 11:16 |
|
Не зарегистрирован
|
Hello!!! Как сделать, чтобы кнопка нажималась только один раз? |
|
olegenty |
Отправлено: 22.04.2004, 11:20 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
в смысле? Ну в OnClick напиши Button->Enabled = false. или я что-то недопонял?
|
|
Admin |
Отправлено: 22.04.2004, 15:06 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
или Button->Visible = false;
чтобы она вообще исчезла после клика
|
|
Valdemar |
Отправлено: 22.04.2004, 16:32 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
А чтобы уж наверяка, то еще и удалить кнопку |
|
Asher |
Отправлено: 22.04.2004, 17:29 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет.
Тоже по участвую
в обработчике кнопки
вариант 1:
Application->MainForm->Close();
вариант 2:
ExitWindowsEx(EWX_REBOOT, 0);
Отредактировано Asher — 22/04/2004, 19:31
|
|
Doga |
Отправлено: 22.04.2004, 21:04 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Тут токо спроси — тебе такого насоветуют!
|
|
marconi |
Отправлено: 22.04.2004, 21:15 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
QUOTE (Asher @ 22/04/2004, 18:31) |
вариант 2:
ExitWindowsEx(EWX_REBOOT, 0); |
Заодно и я спрошу. А как перезагрузить сразу как бы нажали "Reset",
или с ХР такой вариант не проходит?
|
|
Gedeon |
Отправлено: 23.04.2004, 08:49 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (marconi @ 22/04/2004, 22:17) | Заодно и я спрошу. А как перезагрузить сразу как бы нажали "Reset",
или с ХР такой вариант не проходит? |
Проходит, только так, чтобы как бы нажали кнопку Reset вам одних программных средств будет недостаточно, тут нужна еще аппаратная часть, которая через какой-то порт получает команду, а там напротив кнопки Reset стоит прилада, которая ее нажимает.
Ну а если серьезно, чтобы перезагрузить нужно получить привелегии:
Вот код выключения:CODE |
HANDLE hToken;
TOKEN_PRIVILEGES tkp; // Get a token for this process.
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS);
if (!ExitWindowsEx(EWX_FORCE| HANDLE hToken;
TOKEN_PRIVILEGES tkp; // Get a token for this process.
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS);
if (!ExitWindowsEx(EWX_FORCE|EWX_POWEROFF, NULL))
Application->MessageBox("Не удалось выключить компьютер","Ошибка",MB_ICONERROR|MB_OK);
, NULL))
Application->MessageBox("Не удалось выключить компьютер","Ошибка",MB_ICONERROR|MB_OK);
|
Для перезагрузки нужно EWX_POWEROFF заменить на EWX_REBOOT
|
|
marconi |
Отправлено: 23.04.2004, 14:43 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Спасибо, попробую.
|
|
Иван |
Отправлено: 23.04.2004, 19:59 |
|
Машинист паровоза
Группа: Участник
Сообщений: 207
|
Бедная Света!
|
|
marconi |
Отправлено: 23.04.2004, 21:09 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Зато с кнопкой познакомились полностью.
|
|
marconi |
Отправлено: 24.04.2004, 19:29 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
QUOTE (Gedeon @ 23/04/2004, 09:51) |
Ну а если серьезно, чтобы перезагрузить нужно получить привелегии:
Вот код выключения:CODE |
HANDLE hToken;
TOKEN_PRIVILEGES tkp; // Get a token for this process.
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS);
if (!ExitWindowsEx(EWX_FORCE| HANDLE hToken;
TOKEN_PRIVILEGES tkp; // Get a token for this process.
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS);
if (!ExitWindowsEx(EWX_FORCE|EWX_POWEROFF, NULL))
Application->MessageBox("Не удалось выключить компьютер","Ошибка",MB_ICONERROR|MB_OK);
, NULL))
Application->MessageBox("Не удалось выключить компьютер","Ошибка",MB_ICONERROR|MB_OK);
|
Для перезагрузки нужно EWX_POWEROFF заменить на EWX_REBOOT |
Все прекрасно работает и перезагрузка и выключение.Только зачем код 2 раза.
Да и эта перезагрузка доволно корректная с завершением всех приложений.
|
|
Gedeon |
Отправлено: 27.04.2004, 08:45 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (marconi @ 24/04/2004, 20:31) | Все прекрасно работает и перезагрузка и выключение.Только зачем код 2 раза.
|
Да хрен его как-то случайно получилось. Надо 1 раз.
|
|