Вопрос № 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
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. Подсказка – эффективная программа использует из арифметических операций только сложение.
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Гусев Денис!
Хорошая задачка для раздела "программирование нетривиальных задач" =)
Насколько мне известно, операция сравнения тоже является арифметической и без нее задачу решить невозможно :-) Но, я думаю, эту операцию все-таки можно использовать.
Функция проверки, делится ли 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: Компилировать не пробовал, но идея из кода должна быть совершенно ясна.
Во время работы программы мне необходимо создать непустую форму.
После её создания она остается 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 Комментарий оценки: Огромное СПАСИБО за отклик!!! Не то что то стало в ветке делфи... не то. Раньше на вопросы отвечали много и быстро... или эксперты стали такие, а может вопросы задаю не те...