![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Открытие файла своей программой.
vlad © (2013-02-07 14:44:00)Подскажите как отловить это момент в своей программе, чтобы выполнить нужные действие (Имеется введу "открыть с помощью" через правую кнопку мыши)
Плохиш (2013-02-09 23:31:00) [1]
> vlad (08.02.13 13:04) [49]
Закрыть старую копию ничем не отличается от передать в неё чего-то. Решений в мировой помойке сколько угодно, даже для копи/паста, даже на этом форуме можно найти несколько тем. Но учитывая, что обсуждение перевалило за полсотни, программиста нанять будет безопасней и дешевле.
брат Птибурдукова (2013-02-08 14:54:00) [2]
> фигак, и топором рубят
WM_CLOSE — таки мелковато для топора :-)
Anatoly Podgoretsky (2013-02-08 14:45:00) [3]
> упс, промахнулся топиком)
Стреляй из лука
Ega23 (2013-02-08 13:23:00) [4]
> Диспетчер задач значит находит, а свою копию найти не может.
Тебя предупреждали. А ты не слушаешь.
Ненаказуемо, но "будет путь его тернистый долог".
vlad (2013-02-08 13:04:00) [5]
> Во-первых, ты её найти не можешь... :))) (шутка)
Диспетчер задач значит находит, а свою копию найти не может.
> Во-вторых, вот она что-то там такое делает, шуршит вовсю,
> пердит-пыхтит, старается. И будет так ещё пердеть-пыхтеть,
> например, час. А тут её - фигак, и топором рубят. Не айс.
>
Да черт с ней.
Ega23 (2013-02-08 13:00:00) [6]
> ну а почему бы не закрыть старую?
Т.е. принципиальных причин нет, я правильно понял?
Почему плохо закрывать старую:
Во-первых, ты её найти не можешь... :))) (шутка)
Во-вторых, вот она что-то там такое делает, шуршит вовсю, пердит-пыхтит, старается. И будет так ещё пердеть-пыхтеть, например, час. А тут её - фигак, и топором рубят. Не айс.
vlad (2013-02-08 12:54:00) [7]
> Rouse_ © (08.02.13 12:49) [46]
>
> Ну закроешь ты старую, а смысл?
Да в тот то и дело что не закрою.
A где грабли не пойму:
procedure TMyForm.FormCreate(Sender: TObject);
begin
//почему эта команда не закрывает старую копию?
SendMessage(FindWindow(nil, 'MyProgram'), WM_CLOSE, 1, 0);
//а эта работает без проблем?
SendMessage(FindWindow(nil, 'Диспетчер задач Windows'), WM_CLOSE, 1, 0);
end;
Ну нужно так и все.
> > brother © (07.02.13 18:17) [27]
> >
> > найми программиста...
Ребята дорогие, я специально написал в раздел "начинающим".
Rouse_ (2013-02-08 12:49:00) [8]Ну закроешь ты старую, а смысл?
vlad (2013-02-08 12:42:00) [9]
> Ega23 © (08.02.13 12:39) [44]
ну а почему бы не закрыть старую?
Ega23 (2013-02-08 12:39:00) [10]
> Так уж сложилось, что нужно именно закрывать старую копию,
> а не передавать в старую копию новые параметры
Просто любопытно: а почему? Почему не передать новые данные в старую копию, с расчётом на то, что она бросит текущие данные и займётся новыми?
vlad (2013-02-08 12:23:00) [11]
> Rouse_ © (07.02.13 22:03) [39]
>
>
> > Inovet © (07.02.13 21:29) [35]
> > Уже 4 раза сказали.
>
> Лучше 1 раз разжевать, чем 4 раз рассказать :)
Так уж сложилось, что нужно именно закрывать старую копию, а не передавать в старую копию новые параметры
Один момент не понятен и все(
procedure TMyForm.FormCreate(Sender: TObject);
begin
//почему эта команда не закрывает старую копию?
SendMessage(FindWindow(nil, 'MyProgram'), WM_CLOSE, 1, 0);
//а эта работает без проблем?
SendMessage(FindWindow(nil, 'Диспетчер задач Windows'), WM_CLOSE, 1, 0);
end;
brother (2013-02-08 04:18:00) [12]упс, промахнулся топиком)
brother (2013-02-08 04:15:00) [13]чтож всех на скрытность то тянет?
мои наброски, разбирайся!
function TProgramForm.SafeRemoval(drive: char): boolean;
var
sh : SHFILEOPSTRUCT;
FreeBytesAvailableToCaller: TLargeInteger;
FreeSize: TLargeInteger;
TotalSize: TLargeInteger;
f: file;
NumWritten: Integer;
Buf: pointer;
bufSize: Integer;
BytesWrite: TLargeInteger;
begin
result:= False;
StopSafeRemoval:= False;
// ShowMessage('Удаление всего содержимого диска, это может занять длительное время, ждите...');
// Удаляем ВСЕ содержимое с устройства!
AddLog('Удаление всего содержимого диска, ждите...');
sh.Wnd := Application.Handle;
sh.wFunc := FO_DELETE;
sh.pFrom := PAnsiChar(drive + ':\*.*');
sh.pTo := nil;
sh.fFlags := FOF_NOCONFIRMATION + FOF_SILENT+ FOF_NOERRORUI;
sh.fAnyOperationsAborted := False;
sh.hNameMappings := nil;
sh.lpszProgressTitle := nil;
if SHFileOperation(sh) <> 0 then
begin
AddLog('Не удалось(файлы/папки заняты другим приложением?)');
//Exit;
end
else
AddLog('Ok');
// узнаем кол-во свободного места на диске
if not GetDiskFreeSpaceEx(PChar(drive + ':\'), FreeBytesAvailableToCaller, Totalsize, @FreeSize) then
begin
AddLog('Ошибка получения свободного места: ' + GetLastErrorText);
exit;
end
else
AddLog('Свободное место на диске: ' + IntToStr(FreeBytesAvailableToCaller) + ' байт');
// FreeBytesAvailableToCaller:= {1073741824;} 2147483648;
// Создаем файл с пустым содержимым по размеру всего диска
AddLog('Создание временного файла, ждите...');
BufSize := 1048576; // 1МБ
GetMem(buf, BufSize);
//Gauge1.MaxValue:= FreeBytesAvailableToCaller;
BytesWrite:= 0;
try
assignfile(f, drive + ':\tmp.$$$');
rewrite(f, 1);
while (BytesWrite+bufSize <= FreeBytesAvailableToCaller) and (not StopSafeRemoval) do
begin
BlockWrite(f, Buf^, BufSize, NumWritten);
Inc(BytesWrite, NumWritten);
// Gauge1.Progress:= BytesWrite;
application.ProcessMessages;
end;
except
FreeMem(Buf);
CloseFile(f);
end;
if StopSafeRemoval then
begin
AddLog('Отменено пользователем!');
FreeMem(Buf);
CloseFile(f);
Exit;
end;
// если в конце не дозаписан хвост меньше bufSize дозапишем его
if BytesWrite < FreeBytesAvailableToCaller then
begin
BufSize := FreeBytesAvailableToCaller-BytesWrite;
FreeMem(Buf);
GetMem(buf, BufSize);
BlockWrite(f, Buf^, BufSize, NumWritten);
end;
FreeMem(Buf);
CloseFile(f);
AddLog('Ok');
{ if DeleteFile(drive + ':\tmp.$$$') then
AddLog('Временный файл успешно удален')
else
begin
AddLog('Ошибка удаления временного файла');
exit;
end;}
result:= True;
end;
(2013-02-07 22:07:00) [14]Удалено модератором
Примечание: может лучше сразу бан по IP, как думаешь?
Rouse_ (2013-02-07 22:03:00) [15]
> Inovet © (07.02.13 21:29) [35]
> Уже 4 раза сказали.
Лучше 1 раз разжевать, чем 4 раз рассказать :)
(2013-02-07 21:47:00) [16]Удалено модератором
Inovet (2013-02-07 21:33:00) [17]> [32] Плохиш © (07.02.13 19:46)
> А ведь действительно...
В общем так: или автор не читает сообщения, или темнит, или что-то ещё, не буден это называть.
Inovet (2013-02-07 21:31:00) [18]> [31] Плохиш © (07.02.13 19:42)
5 раз. Теперь дойдёт.
Inovet (2013-02-07 21:29:00) [19]> [29] Rouse_ © (07.02.13 19:35)
Уже 4 раза сказали.
Inovet (2013-02-07 21:27:00) [20]> [24] vlad (07.02.13 17:49)
> а старую копию как закрывать?
Тебе 2 (два) раза сказали - закрывать новую. Писатель не читатель?