На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Как узнать процесс, который занял файл.
    Как узнать процесс, который занял файл.

    Одна программ пишет у себя :
    CreateFile(...);

    А я пока она не вызвала CloseHandle() не могу прочитать этот файл. Не могу найти как узнать ProcessID того процесса, который занял файл.
      так зачем сразу закрывать ? Жестоко smile.gif
      лучше прочитать открытый файл через MemoryStream.

      var
        Memory: TMemoryStream;
      begin
        Memory := TMemoryStream.Create;
        try
          Memory.LoadFromFile('openfile.dat');
          ...
          Memory.read(...); // Вы можете использовать методы чтения как у файлов
          Memory.Seek(...);
          FileSize := Memory.Size;
          ...
        finally
          Memory.Free;
        end;
        Мне нужен именно процесс, который занял файл.
          Ты шочешь сказать что ты указаваешь имя файла (C:\111.txt) и функция возвращает теиу ID процесса? Я правельно поняль че ты хочешь?
            Присоединяюсь к этой просьбе. Вот, к примеру, Frigate 3 выводит при удалении файла кем он занят (если занят, конечно). Как это сделать?
              А вопрос интересный. А если файл занят процессом на другом компьютере?
                Цитата
                Vit, 22.12.03, 16:21
                А вопрос интересный. А если файл занят процессом на другом компьютере?

                Вот если файл занят процессом выполняющимся на другом компе, то существует способ определить имя компа. По крайней мере, плагин Shared Files к WinCmd умеет это делать. Ну получать PID такого процесса наверное бессмысленно.
                  Все это, конечно, очень интересно, но проблема все еще не решена... Хотя есть наводка - программа Process Explorer (Sysinternals) - она умеет выдавать открытые разными процессами хэндлы (в частности). Дык вот, надо просто перебрать все процессы, найти все открытые ими хэндлы и глянуть, чего они там открыли. Если открыли файл, и имя совпадет с нужным - алилуйя. smile.gif А вот хэндлы надо искать моим любимым WinAPI... Как - думать надо.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0274 ]   [ 16 queries used ]   [ Generated: 27.04.24, 12:53 GMT ]