Большой Воронежский Форум
» Программирование>Баги в автозагрузке
mexx 20:33 28.01.2007
Появилась проблемка. Пишу программу дневник, и хотел сделать возможность её автозагрузки. Нашел статью Dr.Klouniz'a где он писал шедулер. Так там был приведен следующий код:

var win: TIniFile;
pres: string;
begin
Win:= TIniFile.Create('win.ini'); //Поглядим в win.ini
Win.ReadString ('windows', 'run', pres); //Почитаем, чего там в RUN
IF pres<> application.ExeName then win.WriteString('windows', 'run', application.ExeName);
Win.Free; //Сохраняем

Я заколбасил его в прогу, и после её запуска и следующего рестарта стала при запуске появляться ошибка, что мол система не находит файл для загрузки. Я уже посмотрел в автозагрузке, реестре и win.ini, но нигде нет упоминания о автозагрузке моей проги, а вот ошибка постоянно выскакивает. Вопрос, что же делать? Как избавиться от нее? Как я подозреваю, я неправильно ввел в программе адрес проги, поэтому и ошибка, но ведь упоминаний о её автозагрузке нигде нет! [Ответ]
mikе 22:09 28.01.2007
application.ExeName возвращает полный путь или только имя файла? [Ответ]
Leo 01:38 29.01.2007
не в тот раздел - тебе в программирование. [Ответ]
X0R 06:43 29.01.2007
// Add the application to the registry...
// Anwendung in die Registry aufnehmen...

procedure DoAppToRun(RunName, AppName: string);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
with Reg do
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('Software\Microsoft\Windows\CurrentVersion \Run', True);
WriteString(RunName, AppName);
CloseKey;
Free;
end;
end;

// Check if the application is in the registry...
// Prьfen, ob Anwendung in der Registry vorhanden ist...

function IsAppInRun(RunName: string): Boolean;
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
with Reg do
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('Software\Microsoft\Windows\CurrentVersion \Run', False);
Result := ValueExists(RunName);
CloseKey;
Free;
end;
end;

// Remove the application from the registry...
// Anwendung aus der Registry entfernen...

procedure DelAppFromRun(RunName: string);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
with Reg do
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('Software\Microsoft\Windows\CurrentVersion \Run', True);
if ValueExists(RunName) then DeleteValue(RunName);
CloseKey;
Free;
end;
end;

// Examples, Beispiele

// Add app, Anwendung aufnehmen...
DoAppToRun('Programm', 'C:\Programs\XYZ\Program.exe');

// Is app there ? Ist Anwendung vorhanden?
if IsAppInRun('Programm') then...

// Remove app, Anwendung entfernen
DelAppFromRun('Programm');

PS Delphi World рулит! [Ответ]
mexx 10:30 29.01.2007
Хорошо, я понял, но как мне убрать этот глюк? [Ответ]
X0R 16:30 29.01.2007
Попробуй в реестре через поиск набери имя свой проги а если не найдет то по диску С: как поиск текста в файлах. [Ответ]
Yandex 17:41 29.01.2007
mexx, гадить в win.ini (первый пост) устаревший вариант насколько я знаю. Для твоих целей лучше использовать запись в реестре, как написал x0r [Ответ]
mexx 19:58 29.01.2007
да, но когда писал прогу, других вариантов не знал, вот и ступил....

__________________________________________

Все, вопрос решен! Только один остался, а и то не в тему:
хочу написать что-то типа программы напоминалки и т.п. Так как в ней луше хранить записи для напоминания. В текстовых файла имхо неудобно, а как ещё? [Ответ]
X0R 09:33 31.01.2007
Если текстовые файлы не устраивают попробуй в типизированнх, например такой тип записи
Note = record
Time : TDataTime; //мож и не так пишется, точно не помню, давно было.
Text : string[100]; //будем хранить заметку
{а дальше по желанию, например можно добавить флаг того, что заметка уже показывалась, все зависит от твоей фантазии}
end;
Если еще вопросы будут - пиши. [Ответ]
mexx 21:03 31.01.2007
Ещё вопрос, как сделать чтобы при запуске программа стразу сворачивалась в трей, и не было никаких иконок в такстбаре.
По отдельности у меня все работает, вот например ShowWindow(Application.Handle, sw_Hide); убирает её из таск бара,
компонент CoolTray отлично сворачивает, но если я их ставлю один за другим, то они не работают. Пробовал сделать эту функцию и Application.Minimize, тоже не помогает, так как тогда появляется значок в таскбаре. [Ответ]
Yandex 10:39 01.02.2007
Скачай c www.drkb.ru chm-фаил на 10 метров и прекращай задавать дурацкие вопросы. [Ответ]
SuHar` 17:23 12.02.2007
Автозагрухку делай через реестр!
ВОт так:

uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
Reg := nil;
try
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := false;
reg.OpenKey('Software\Microsoft\Windows\CurrentVer sion\Run',
false);
reg.WriteString('My App', Application.ExeName);
reg.CloseKey;
reg.free;
except
if Assigned(Reg) then Reg.Free;

end;
end; [Ответ]
X0R 18:36 12.02.2007
SuHar`
Очень вовремя [Ответ]
mexx 21:38 12.02.2007
SuHar`, спасибо конечно, но автозагрузка условно говоря пашет, не знаю как свернуть после запуска в трей только [Ответ]
X0R 21:58 12.02.2007
mexx
Я те говорил - сворачивание надо вешать не на создание формы, а на показывание окна. Когда окна нет, то и сворачивать нечего. [Ответ]
Yandex 11:21 13.02.2007
mexx, мда насколько упорный народ попадается.

Для особо одаренных
НЕТ ТАКОГО ПОНЯТИЯ, КАК СВЕРНУТЬ ОКНО В ТРЕЙ.
В FAQ (ссылка выше) - написано (в разделе для новичков как раз есть ссылка), что есть "показать-спрятать окно" и "создать-удалить иконку в трее".
Т.е. сворачивание в трей - это объедиение двух действий - спрятать окно и показать иконку в трее. [Ответ]
mexx 20:27 13.02.2007
Yandex,
да понял я, понял... [Ответ]
DimmaN 22:01 13.02.2007
mexx, кстати, если я не ошибаюсь, в МСДН есть хороший пример как работать с треем. Вроде бы он приведен к функции setNotifyIconData. Там на АПИ все подробно расписано. Если разберешься - будет понятно как юзать готовый компонент. [Ответ]
Вверх