Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Открытие файла своей программой.


Страницы:   1 2 3

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 (два) раза сказали - закрывать новую. Писатель не читатель?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо