Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование для Windows NT на Delphi


Информационный Канал Subscribe.Ru


Программирование для Windows NT на Delphi
Выпуск номер : 0 [ 2 июля 2002 года]

Добрый день.

Перед вами пробный, так сказать ознакомительный, выпуск рассылки "Программирование для Windows NT на Delphi".

Для начала, что в ней будет, а чего не будет. Не будет баз данных, "иконок у часиков", практически не будет VCL. Будет WinAPI. Но то только часть, касающаяся только NT. (сразу хочу заметить, что под Windows NT я имею в виду не только NT4, но и 2000, XP и будущие версии (на счет младших не обещаю :)).
Не смотря на кажущуюся узость темы, она не такая уж и узкая. Даже скорее очень широкая - сервисы, сеть, администрирование, реестр, журнал событий, WMI, безопасность, шифрование, NTFS/EFS и многое другое...

Даже если вы ничего не пишете специально для NT, то эта рассылка тоже может быть Вам полезна. Самый распространенный пример - написали Вы программку, которая помимо всего еще и должна перезагружать комп. Написали в программе ExitWindowsEx(...) и довольны, а у части пользователей (и не малой части!!!) комп не перезагружается. Подписавшимся на рассылку будет проще - решение проблемы уже у вас в почтовой программе :).

Хотя это был, наверное, не самый удачный пример :) Решение можно было бы найти в любом F.A.Q. (ЧаВО). Чаще обсуждаемые вопросы будут "посерьезней" - безопасность, сервисы, работа с системой и многое, многое другое. Уровень знаний, для которого в основном будут материалы рассылки - от начинающего до "выше среднего".

Ну и естественно,если в названии упоминается Delphi, то все примеры будут именно на Object Pascal'е. Хотя рассылка может помочь и "сишникам" и программирующим на других языках. WinAPI все же не зависит от языка, а теория уж тем более.

Теперь о составе выпусков. Я предполагаю сделать так - основная статья, вопрос/ответ из FAQ, вопросы с ответами (и без них тоже) от наших читателей, новости сайта (об этом позже) ну и другое. Очень бы хотелось увидеть в рассылке ваши статьи, заметки, советы и замечания. В общем, очень бы хотелось поддерживать обратную связь с читателями. Если вам есть что сказать (или нечего, но хочется :), пишите на flint@xonix.ru .

Теперь о сайте рассылки. Он расположен на http://delphi.xonix.ru . Но я постараюсь не превращать ее в рассылку типа "новости сайта". Большинство материала, который появится в рассылке, не появится на сайте, кроме как в архиве рассылки (в архиве новый выпуск будет появляться намного позже "почтового" выпуска).
Планируемая периодичность рассылки -пока 1 раз в неделю. (Потом возможно чаще).

Вопросы и ответы
Как выключить компьютер, работающий под Windows NT, 2000 или XP?

Этот вопрос был выбран потому, что он стал первой информацией, появившейся на сайте :) Да и в примере (выше) используется.

// Для выключения локального компьютера необходимо право
// 'Завершение работы системы'. По умолчанию, это право доступно всем пользователям,
// работающим за компьютером.

function LocalShutdown(
     bShutdown  :Boolean;  // Выключение компьютера после перезагрузки
     bForceApps :Boolean   // Закрывать программы без запроса на сохранения
  ):Boolean;
var
 hToken  : THandle;
 tkp,PrevState : _TOKEN_PRIVILEGES;
 k       : Cardinal;
 dwFlags : Cardinal;
begin
 Result:=false;
 // "Включаем" привилегию 'SeShutdownPrivilege'
 OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
 LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
 tkp.PrivilegeCount:=1;
 tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
 AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(PrevState), PrevState, k);
 if GetLastError <> ERROR_SUCCESS then exit;

 //Определяем выключать или перезагружать компьютер
 if bShutdown
  then dwFlags:=EWX_SHUTDOWN
   else dwFlags:=EWX_REBOOT;

 //Определяем выключать или перезагружать компьютер
 if bForceApps
  then dwFlags:=dwFlags or EWX_FORCE;

 // Выходим из Windows (действие определяется значением dwFlags)
 if ExitWindowsEx(dwFlags,0)
  then Result:=true;
end;

 // В отличие от Win9x, в WinNT эта функция работает и в консольных приложениях


Напоследок - фишки Диспетчера задач

Может известные, а может и нет (первую я увидел на rsdn.ru, а вторую вывел опытным путем).
1. Запускаем, например cmd.exe и пишем title program manager. Жмем Enter и наша программа (сmd.exe) пропадает с экранов радаров (т.е. закладки Приложения вышеназванного программного продукта. В дельфе подобное достигается вызовом Application.Title='program manager';

2. Берем ЛЮБОЙ файлик (главное не из "каталога с Windows\system32" - там такой уже есть) и переименовываем его, например, в services.exe, запускаем и пробуем снять его с закладки Процессы. Но не все так просто - оказывается наша программа уже системный процесс, при чем критический :)

Как говорится мелочь, а приятно :) А еще возникают мысли, что у программистов, писавших диспетчер задач были эти самые критические дни :)

На сегодня это все. Хотелось бы вновь попросить писать на flint@xonix.ru. Критикуйте, предлагайте, советуйте.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное