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

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 742
от 20.02.2007, 14:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 439, Экспертов: 78
В номере:Вопросов: 4, Ответов: 5


Вопрос № 75707: Здравствуйте, уважаемые эксперты! Вопрос мой связан в большей части в реестром, но и имеет смысл и в этой рассылке. Значит думал я над тем, как бы мне запускать мои программы при автозагруке, да притом так, чтобы об этом никто ничего и не под...
Вопрос № 75712: Здравствуйте, уважаемые эксперты. Помогите, пожалуйста, с такой задачей. Дружественные числа. Два числа называются дружественными, если сумма делителей (включая 1, но не включая само число), каждого из них равна другому. Составить эффект...
Вопрос № 75786: Здравствуйте! Уважаемые эксперты, помогите пожалуйста. Во время работы программы мне необходимо создать непустую форму. После её создания она остается disable и естественно не реагирует на события, даже если после создания Enable:=Tr...
Вопрос № 75794: Здравствуйте! Такой вопрос: мне нужно просканировать сеть и получить имена всех машин в неё входящих. Я нашёл код уже разобрался как он работает, но он выводит имена машин рабочей группы, а у нас большинство в домене. Как мне получить названия ма...

Вопрос № 75.707
Здравствуйте, уважаемые эксперты!
Вопрос мой связан в большей части в реестром, но и имеет смысл и в этой рассылке.
Значит думал я над тем, как бы мне запускать мои программы при автозагруке, да притом так, чтобы об этом никто ничего и не подозревал...
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun как-то выглядит слишком заметно...
Покопавшись по реестру, я заметил, что некоторые приложения запускаются как сервисы.
Кстати, заметил там троянчика, который под видом "сервиса", да еще с таким незаметным названием Win32 Service в свое время портил мне всю работу в Интернете.
Конечно, его я удалил, а его следы остались.
Не долго думая, я поменял параметр ImagePath в ветке HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesWin32 Login
(у Вас такого может и не быть, но суть записанного в этом разделе являлась аналогичной всем остальным сервисам) на путь к моей программе, сделанной в Delphi.
Так вот, при запуске все запускается и в течении пяти секунд работает, и, затем обрубается, хотя задумка была такой, чтобы программа висела постоянно в памяти.
Зайдя в локальные службы (Пуск=>Выполнить=>services.msc), нашел я там свой сервис и нажал "Пуск". Немного подождав, оно мне отвечает: "Не удалось запустить службу ... Ошибка 1053: Служба не ответила на запрос своевременно".
Внимание, вопрос:
Какое сообщение передавалось в этот момент моей программе и какое мне нужно было отослать в качестве ответа? Вообщем, кто знает о том, как сделать все это рабочим, пожалуйста помогите!!!
Отправлен: 14.02.2007, 15:34
Вопрос задал: Bingo (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Bingo!

Delphi - File - New - Other... - Service Application
Посмотрите, поиграйтесь... Вот только отлаживать из-под Delphi будет непросто, и если сделаете что-то непоправимое - может быть больно, вплоть до переустановки системы.
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 7-ой класс)
Ответ отправлен: 14.02.2007, 15:42
Оценка за ответ: 4
Комментарий оценки:
Спасибо. Об этом я как-то и не думал.

Отвечает: Gladiator
Здравствуйте, Bingo!
Вот вполне рабочий сервис.

Свойства сервиса:

DisplayName = My service
ErrorSeverity = esNormal
Name = MyService
OldCreateOrder = False
ServiceType = stWin32
StartType = stAuto
WaitHint = 5000

Сам юнит:

unit MyServiceUnit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;

type
TMyService = class(TService)
procedure ServiceExecute(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
procedure ServiceShutdown(Sender: TService);
private
public
function GetServiceController: TServiceController; override;
end;

var
MyService: TMyService;

implementation

{$R *.DFM}

function IsRunningInInstallMode : Boolean;
function FindSwitch(const Switch: string): Boolean;
begin
Result := FindCmdLineSwitch(Switch, ['-', '/'], True);
end;
begin
Result := FindSwitch('INSTALL') or FindSwitch('UNINSTALL');
end;

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
MyService.Controller(CtrlCode);
end;

function TMyService.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure TMyService.ServiceExecute(Sender: TService);
begin
if not IsRunningInInstallMode then SvcMgr.Application.Initialize;
while not Terminated do ServiceThread.ProcessRequests(True);
end;

procedure TMyService.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started := True;
ReportStatus();
end;

procedure TMyService.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Stopped := True;
ReportStatus();
end;

procedure TMyService.ServiceShutdown(Sender: TService);
begin
Status := csStopped;
ReportStatus();
end;
Ответ отправил: Gladiator (статус: 9-ый класс)
Ответ отправлен: 14.02.2007, 16:21
Оценка за ответ: 5
Комментарий оценки:
Cпасибо за ответ, но пока еще нужна Ваша помощь.
Прошу в мини-форум.


Вопрос № 75.712
Здравствуйте, уважаемые эксперты.
Помогите, пожалуйста, с такой задачей.

Дружественные числа. Два числа называются дружественными, если сумма делителей (включая 1, но не включая само число), каждого из них равна другому. Составить эффективную программу, находящую пары дружественных чисел в диапазоне от 1 до 1000. Подсказка – эффективная программа использует из арифметических операций только сложение.

Спасибо.
Отправлен: 14.02.2007, 16:06
Вопрос задал: Гусев Денис (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Гусев Денис!
Хорошая задачка для раздела "программирование нетривиальных задач" =)
Насколько мне известно, операция сравнения тоже является арифметической и без нее задачу решить невозможно :-) Но, я думаю, эту операцию все-таки можно использовать.
Функция проверки, делится ли A на B: AdivisableByB (в приложении)
Если честно, то мне всегда проще написать код, чем объяснять, что да как, так что вот пример.
Перебираете делители и считаете их сумму в двух вложенных циклах (для всех пар чисел от 1 до 1000):
for i := 1 to 1000 do begin
for j := 1 to i do begin // либо до i-1, если числа в дружественной паре должны быть различны
si := 0;
sj := 0;
for k := 1 to i do if AdivisableByB(i, k) then inc(si, k);
for k := 1 to j do if AdivisableByB(j, k) then inc(sj, k);
if (si = j) and (sj = i) then;
{ на данный момент в i и j у нас находится пара дружественных чисел.
мы можем сделать с ними что захотим. Например, вывести на экран }
end;
end;

PS: Компилировать не пробовал, но идея из кода должна быть совершенно ясна.

Приложение:

---------
Не узнаешь - не попробуешь.

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Специалист)
Ответ отправлен: 14.02.2007, 17:13


Вопрос № 75.786
Здравствуйте!
Уважаемые эксперты, помогите пожалуйста.

Во время работы программы мне необходимо создать непустую форму.
После её создания она остается disable и естественно не реагирует на события, даже если после создания Enable:=True;
Вопрос.Как активировать форму?

Также, надо на активной форме удалить все видимые компоненты.
Но при удалении в любом виде возникает исключение:"Отказанно в доступе", даже если сначала дизактивировать контроль формы над этими объектами.

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

Note:Для работы программы подойдет реализация любого из способов.

Note:Раньше не возникало такой проблемы.В процессе работы программы корректно создавалась как форма,так и её компоненты.
(Имеются ввиду другие приложения)

Заранее спасибо.

Отправлен: 15.02.2007, 07:34
Вопрос задал: _Lexxus_ (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Уваров Андрей Александрович
Здравствуйте, _Lexxus_!
var myForm : TmyForm;
btn: TButton;
begin
myForm := TmyForm.Create( self );
myForm.Hide; //Форма не видима)
//Делаешь что хочеш.
Btn := TButton.Create( myForm );
Btn.Parent := myForm; // Кнопка на форме
Btn.Caption := 'asdasdasd';
myForm.Show; //Покажется форма
Btn.Free; //Уничтожать надо до уничтожения формы.
myForm.Free; // Уничтожил.

Все работает. Что вы понимаете под disabled непонятно. То-ли форма не видна толи просто не активна.

Компоненты уничтожаются процедурой Free. И непонятно что такое "деактивизировать контроль формы над объектом"


---------
Обращаться в ICQ: 66550088 (Ally) или E-Mail: AvePassion@GMail.Com
Ответ отправил: Уваров Андрей Александрович (статус: Студент)
Ответ отправлен: 15.02.2007, 14:07
Оценка за ответ: 5


Вопрос № 75.794
Здравствуйте!
Такой вопрос: мне нужно просканировать сеть и получить имена всех машин в неё входящих. Я нашёл код уже разобрался как он работает, но он выводит имена машин рабочей группы, а у нас большинство в домене. Как мне получить названия машин, входящих в домен?
Код функции в приложении. Взято с Delphi World.
Заранее благодарю за ответы.

Приложение:

Отправлен: 15.02.2007, 09:10
Вопрос задал: Prowler (статус: 9-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Prowler!
Пересморев на delphiworld все варианты "найти все компьютеры в сети", я нашел отличающийся от остальных, параметрами в вызове WNetOpenEnum. Там не было никаких рабочих групп.
Ну и еще один пример без упоминания о локальных группах в параметрах.
Если не поможет, пошарьте в MSDN на тему: domian, get shares, etc.
---------
Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Специалист)
Ответ отправлен: 15.02.2007, 15:02
Оценка за ответ: 5
Комментарий оценки:
Огромное СПАСИБО за отклик!!! Не то что то стало в ветке делфи... не то. Раньше на вопросы отвечали много и быстро... или эксперты стали такие, а может вопросы задаю не те...


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.45 beta от 20.02.2007
Яндекс Rambler's Top100

В избранное