Вопрос № 83854: Здравствуйте уважаемые эксперты!!!
Вот такой вопрос
Я начинаю писать прогу которая должна делать следующее:
1.Сканировать конфигурации удаленных компьютеров в локальной сети(MB,CPU,RAM,HDD,VIDEO,LAN и т.д.) и сохранять ее в базе данн...Вопрос № 83867: Ув.эксперты!
Я пишу на Delphi6 оболочку для диска. На диске куча сетапников программ. Применил WebBrowser, при клике на кнопку запускается автоматически Downloadmaster (загрузка файла с Нета), а мне нужно чтобы запустился ЕХЕ файл на установку ПО...Вопрос № 83880: Здравствуйте уважаемые!Мне в моём приложении понадобилось сохранить содержимое DateTimePicker в ини- файл.
В help я нашёл описание процедуры записи:
procedure WriteDateTime(const Section,Ident:String; Value:TDateTime); virtual;
и запис...Вопрос № 83888: Здравствуйте уважаемые Эксперты.
Как реализовать движение ProgressBar, для отображения процесса загрузки программы
на форме заставки при запуске программы.
>>> По подобию как это сделано например при запуске QIP.
===========...
Вопрос № 83.854
Здравствуйте уважаемые эксперты!!!
Вот такой вопрос
Я начинаю писать прогу которая должна делать следующее:
1.Сканировать конфигурации удаленных компьютеров в локальной сети(MB,CPU,RAM,HDD,VIDEO,LAN и т.д.) и сохранять ее в базе данных на
сервере
2.Если конфигурация удаленного компьютера изменяеться то программа должна выдавать
сообщение(на каком компьютере что и когда поменялось.)
Преподавтель мне предложил реализовать это все через Clien/ServerSoket-компонент.
т.е. создать клиента на удаленной машине, который будет по команде сервера собирать конфигурацию и отсылать ее на сервер.
А сервер в свое время будет проверять конфигурацию на изменение.
Вопросы:
1. Можно ли обойтись без клиентской части на удаленном компьютере. И если да то как можно это реализовать?
2. С помощью чего посоветуете сканить конфигурацию компов?
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, ~mr_Profit~!
1. Вот не зря вам преподаватель посоветовал клиент-сервер. В Windows не предусмотрено средств для сканирования компьютеров по сети. Только средства для разработки таких программ, а информацию все равно придется передавать по сети.
2. Вот вам архи с исходником, переделанный мною из чего-то найденного мною в сети про конфигурацию компьютеров, там, правда, не все, но материнскую плату, например можно попробовать отслеживать по дате создания БИОС-а.
Могу предложить небольшую хитрость. Но, она все-таки не отменяет клиент-сервер. Зато на локальной машине вам понадобится только выполнять через ShellExecute пару консольных команд.
При первом запуске на клиентской машине программа сохраняет файл, например, в своей папке ShellExecute(nil, nil, 'reg', 'export "HKLMSystemCurrentControlSetEnum"' + ExtractFileDir(ParamStr(0)) + FILE_NAME, nil, SW_HIDE);
Далее при опросах вы выполняете экспорт этой ветки ресстра в другой файл. И сравниваете их. Сравнить, кстати, тоже можно через консоль: fc current.reg new.reg > results.txt
И если размер файла results.txt не ноль, то различия есть.
В принципе, если надо заметить конкретные изменения, то тут уже придется либо конкретно смотреть, что изменилось, либо отказываться от реестра и делать вразнобой, как у меня в исходнике.
А вообще задача хорошая, практическая.
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа. --------- Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Специалист)
Ответ отправлен: 23.04.2007, 19:06 Оценка за ответ: 5
Вопрос № 83.867
Ув.эксперты!
Я пишу на Delphi6 оболочку для диска. На диске куча сетапников программ. Применил WebBrowser, при клике на кнопку запускается автоматически Downloadmaster (загрузка файла с Нета), а мне нужно чтобы запустился ЕХЕ файл на установку ПО.
Помогите Pls решить этот ворос.
Юрий Градов (IOPA).
Отвечает: DimonSoft
Здравствуйте, Градов Юрий Михайлович!
Не совсем понятно из Вашего описания, где находится кнопка. Рассмотрим оба варианта...
1. Кнопка прописана в HTML-коде страницы, котоая загружена в TWebBrowser. Тогда достаточно правильно указать путь к EXE-файлу, т.е. дать относительную ссылку. Но тогда вопрос не столько по Delphi, сколько по HTML.
2. Кнопка - что-то вроде стандартной TButton, т.е. имеется в виду самый обычный контрол. В таком случае я бы на Вашем месте отказался от использования TWebBrowser для запуска приложения по двум причинам:
а) это VCL-ный контрол, который добавляет определённый вес к программе;
б) Есть более простой и надёжный способ, да ещё и более гибкий.
<Handle окна> - это абсолютно любой Handle, рекомендую написать "0", т.к. нет гарантий, что вашу программу пользователь не закроет раньше, чем программу-инсталлятор.
<FileName> - это имя запускаемого на исполнение EXE-файла (строка), может и должно содержать путь и имя файла, оформленные по правилам MS-DOS (т.е., например, для EXE-файла, лежащего в одной папке с Вашей программой достаточно указать только имя файла и т.д.).
<Parameters> - это параметры (строка), с которыми запускается инсталлятор. В общем случае можно написать пустую строку.
<Directory> - это папка, которая станет текущей для запущенной Вами программы. Рекомендую здеь писать пустую строку.
Кроме того, если строковые значения задаются явно, то необязательно использовать приведение типов PChar(). Например, если Вам надо запустить именно программу SomeInstaller.exe, лежащую в одной папке с Вашей программой, то записать это можно так:
Хочется также заметить, что вместо SW_SHOW можно использовать целый ряд других констант, список которых Вы можете найи в справке по WinAPI, поставляемой вместе с Delphi. Для этого на закладке Указатель в справочной системе просто наберите "ShellExecute" (должна оказаться выделенной в списке статья с описанием этой функции, ниже - возможные замены для SW_SHOW).
С уважением, Оношко Дмитрий.
Ответ отправил: DimonSoft (статус: 1-ый класс)
Ответ отправлен: 23.04.2007, 18:26
Отвечает: W@NDeReR
Здравствуйте, Градов Юрий Михайлович!
Вот запуск файлов
uses shellApi;
ShellExecute(Handle,'open','имя и путь к файлу',nil,nil,SW_SHOW);
--------- Опыт — дитя мысли, а мысль — дитя действия. Нельзя учиться по книгам.
Ответ отправил: W@NDeReR (статус: 3-ий класс)
Ответ отправлен: 23.04.2007, 19:27
Отвечает: monah
Здравствуйте, Градов Юрий Михайлович!
Как я понял, Вы выводите ссылку на инсталятор, как гиперссылку. Вам надо создать обработчик сообщения для WebBrowser onNavigate. В нее передается в параметре URL путь к файлу который вы указывали в теге "a href=..." А дальше как советовали предьдущие эксперты.
--------- festina lente
Ответ отправил: monah (статус: Студент)
Ответ отправлен: 23.04.2007, 21:29
Вопрос № 83.880
Здравствуйте уважаемые!Мне в моём приложении понадобилось сохранить содержимое DateTimePicker в ини- файл.
В help я нашёл описание процедуры записи:
procedure WriteDateTime(const Section,Ident:String; Value:TDateTime); virtual;
и записал для своего приложения:
WriteDateTime(NameSections,'DateTimePicker1.DateTime',DateTimePicker1.DateTime);
а так же описание чтения
function ReadDateTime (const Section,Ident:String; Default:TDateTime): TDateTime; virtual;
я пишу:
ReadDateTime(NameSections,'DateTimePicker1.DateTime',.....);,а что писать в Default я не могу сообразить.
По FormShow у меня
DateTimePicker1.DateTime := Now; //т.е текущая дата
Мне надо что бы в процессе работы приложения туда заносилась дата(даты) из ини.
Отправлен: 23.04.2007, 18:32
Вопрос задал: GAZOT (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ерёмин Андрей
Здравствуйте, GAZOT!
Default - это значение по умолчанию. Оно будет возвращено в случае, если такой записи в файле не окажется или не окажется вообще самого файла. Т.е. туда следует записать какое-то резервное значение, с которым программа будет нормально работать. Можно сразу после чтения проверять это значение и таким образом узнавать, загружено ли значение. Удачи!
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Отвечает: FishMD
Здравствуйте, GAZOT!
я так понял Вам нужно записать в ини значение даты и/или времени?
я делаю так:
uses inifiles;
...
var
ini: Tinifile;
...
ini:= tinifile.create('options.ini');
ini.writeinteger('main','datetime',DateTimePicker1.DateTime);
...
DateTimePicker1.DateTime:= ini.readinteger('main','datetime',now);
...
Надеюсь поможет ;)
Ответ отправил: FishMD (статус: 1-ый класс)
Ответ отправлен: 23.04.2007, 18:44 Оценка за ответ: 4
Отвечает: sir henry
Здравствуйте, GAZOT!
Хелп нам по поводу значения Default сообщает:
Это то значение типа TDateTime, которое будет возвращено функцией в случае если:
- Секции, в которой Вы читаете значение не существует.
- Такого значения, которое Вы считываете по его имени, не существует.
- В любом случае, если функция не смогла найти нужного значения.
Запишите туда 0.0 и тогда Вы будете знать, что если функция Вам вернула 0.0, то она не смогла прочитать искомое значение в INI-файле. В любом другом случае Вы получите какую-нибудь дату, большую чем 30.12.1899 г. :)
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 23.04.2007, 19:22
Отвечает: Скрипин Слава
Здравствуйте, GAZOT!
В Default пишется значение, которое будет выдаваться если прога не найдет указанный ключ.
Ответ отправил: Скрипин Слава (статус: 4-ый класс)
Ответ отправлен: 23.04.2007, 23:05 Оценка за ответ: 4
Вопрос № 83.888
Здравствуйте уважаемые Эксперты.
Как реализовать движение ProgressBar, для отображения процесса загрузки программы
на форме заставки при запуске программы.
>>> По подобию как это сделано например при запуске QIP.
===========
Код отображения заставки приведен в приложении.
Отвечает: Ерёмин Андрей
Здравствуйте, Пепеляев Александр!
Программная реализация: ProgressBar.StepIt; Предварительно задаём предел - свойство Max и шаг - Step. Метод StepIt увеличивает Position на Step. Ну а как отобразить процесс загрузки - решать вам. Автоматически сделать не получится - если только до того, как началось создание формы и после создания, но это получится после 0% сразу 100%. Поэтому нужно расставить вышеприведённую команду в коде программы, а в частности - событии OnCreate() формы. Удачи!
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
procedure TfmSplash.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=False;
end;
procedure TfmSplash.Timer2Timer(Sender: TObject);
begin
Label2.Caption:=strmas[k]+'...';
ProgressBar1.Position:=ProgressBar1.Position+ProgressBar1.Step;
if ProgressBar1.Position mod 20=0 then inc(k);
end;
procedure TfmSplash.FormShow(Sender: TObject);
begin
k:=0;
i:=0;
strmas:=TStringList.Create;
with strmas do
begin
Add('Модуль друку...');
Add('Модуль бази даних...');
Add('Модуль конфігурації...');
Add('Модуль данних...');
Add('Модуль безпеки...');
end;
end;
end.
Модуль программы:
program realty;
uses
Forms,
Dialogs,
Controls,
Windows,
DB,
Variants,
ufmMain in '..CommonufmMain.pas' {fmMain},
uDM in '..CommonuDM.pas' {DM: TDataModule},
ufmElem in '..CommonufmElem.pas' {fmElem},
ufmDovidnyk in '..CommonufmDovidnyk.pas' {fmDovidnyk},
ufmLogin in '..CommonufmLogin.pas' {fmLogin},
ufmAboutBox in '..CommonufmAboutBox.pas' {AboutBox},
ufmSplash in '..CommonufmSplash.pas' {fmSplash},
uDelMy in '..CommonuDelMy.pas',
Office8TLB in '..CommonOffice8TLB.pas',
VBIDE8TLB in '..CommonVBIDE8TLB.pas',
Excel8TLB in '..CommonExcel8TLB.pas',
uExportExcel in '..CommonuExportExcel.pas',
ufmSearch in '..CommonufmSearch.pas' {fmSearch},
ufmSearchRezult in '..CommonufmSearchRezult.pas' {fmSearchRezult},
ufmDogOrenda in '..CommonufmDogOrenda.pas' {fmDogOrenda},
ufmStrok in '..CommonufmStrok.pas' {fmStrok},
ufmDogPokupka in '..CommonufmDogPokupka.pas' {fmDogPokupka};
{$R *.res}
begin
Application.Initialize;
fmSplash:=TfmSplash.Create(Application);
fmSplash.Show;
fmSplash.Update;
while fmSplash.Timer1.Enabled do
Application.ProcessMessages;
fmSplash.Hide;
fmSplash.Free;
fmLogin:=TfmLogin.Create(Application);
fmLogin.ShowModal;
if fmLogin.ModalResult=mrOk then
begin
Application.Title := 'Нерухомість';
Application.CreateForm(TDM, DM);
dm.tUsers.Open;
if DM.tUsers.Locate('UserName;Password',VarArrayOf([fmLogin.ComboBox1.Text,fmLogin.Edit1.Text]),[loPartialKey]) then
begin
Application.CreateForm(TfmMain, fmMain);
Application.CreateForm(TfmDovidnyk, fmDovidnyk);
Application.CreateForm(TAboutBox, AboutBox);
fmLogin.Free;
Application.Run;
end
else
begin
Application.MessageBox('Невірне ім’я користувача або пароль!','Помилка',mb_Ok+mb_Iconerror);
end;
end
else
begin
fmLogin.Free;
// DeleteMe;
Application.Terminate;
end;
end.
Ответ отправил: Химяк Виктор Васильевич (статус: 4-ый класс)
Ответ отправлен: 23.04.2007, 21:06 Оценка за ответ: 5 Комментарий оценки: Спасибо за пример.