Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576

Как узнать, открыт ли нужный файл

12.07.2013, 08:57. Показов 2877. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как узнать, открыт ли нужный файл с помощью API-функций?

В Excel, например, можно скрыть окно книги, в этом случае API-функция "FindWindow" не работает.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.07.2013, 08:57
Ответы с готовыми решениями:

Как узнать открыт ли файл Excel
Ребята здравствуйте! много чего просмотрел в инете так и ни чего конкретного для себя не нашел, подскажите Как узнать открыт(именно открыт...

Как узнать открыт ли Word файл?
Добрый день! Проблема следующая: на диске лежит файл word, его могут открывать кто угодно. Если пользователь открывает файл, и потом не...

Как посредством VBA узнать открыт XLS файл или нет
Как посредством VBA можно узнать открыт ли файл (Excel) или нет?

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 12
12.07.2013, 13:06
При чем тут открытый файл, и FindWindow... Можно написать программу, которая будет просто открывать файл, и работать с ним, не показывая никак его содержимое. От этого файл не перестает быть открытым.

Уточни задачу. Тебе надо узнать, открыт ли какой-то конкретный файл Excel-ем? Тогда WinAPI вообще не при делах: проверяй все айтемы в Application.Workbooks, если хоть в одном Item.Name совпадает с нужным тебе - значит, файл открыт.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
12.07.2013, 13:34  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Тебе надо узнать, открыт ли какой-то конкретный файл Excel-ем?
нет, моя тема не связана с программой "Excel" и языком программирования "VBA".

Мне нужно узнать с помощью API-функций: открыт нужный файл или нет. А для чего мне это нужно - это не относится к данной теме.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 12
12.07.2013, 13:52
Сага о X, Y и Z..., как раз твой случай...

Еще раз: что значит "открыт файл или нет?" Если я в своей программе делаю

Pascal
1
2
3
Assign(f, 'D:\test\your.xls');
Reset(f)
// ...
- файл открыт? Или нет? Он же не показан нигде, значит, по-твоему, его не открывали? Ну, попробуй тогда после этого открыть файл своим XL-ем... Хочется посмотреть. Особенно, если я его открою с fmShareExclusive, что запретит любым другим приложениям открывать файл...
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
12.07.2013, 13:54  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Еще раз: что значит "открыт файл или нет?"
просто открыт пользователем, как обычно пользователь открывает файл (например, двойным щелчком по файлу), чтобы что-то с ним делать. Например, txt-файлы.
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
12.07.2013, 14:03
Цитата Сообщение от Скрипт Посмотреть сообщение
открыт ли нужный файл с помощью API-функций
теоретически можно, но в r0 , перечислить все handle получить о каждом инфу ,в том числе и путь если таковой имеется и сравнить с нужным.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
12.07.2013, 14:06  [ТС]
ssXXss, мне нужно с помощью API-функций.

Если нельзя с помощью API-функций этого сделать, тогда надо будет уже что-нибудь другое думать.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
12.07.2013, 17:28
Цитата Сообщение от ssXXss Посмотреть сообщение
теоретически можно, но в r0
А что помешает вызвать NtQuerySystemInformation, NtDuplicateObject, NtQueryObject в r3?

Пример как получить список хендлов можно здесь посмотреть, а там далее копируем дескриптор в свой процесс (NtDuplicateObject), смотрим тип (SYSTEM_HANDLE_ENTRY::ObjectType, если не ошибаюсь файлы это тип 0x1C) и получаем имя объекта (NtQueryObject + ObjectNameInformation) для файла. Преобразовать в нормальный путь имя объекта можно с помощью GetFinalPathNameByHandle/GetFileInformationByHandleEx.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef enum _OBJECT_INFORMATION_CLASS {
    ObjectBasicInformation,
    ObjectNameInformation,
    ObjectTypeInformation,
    ObjectAllInformation,
    ObjectDataInformation
} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
 
typedef struct _UNICODE_STRING {
  USHORT Length;
  USHORT MaximumLength;
  PWSTR  Buffer;
} UNICODE_STRING, *PUNICODE_STRING;
 
typedef struct _OBJECT_NAME_INFORMATION {
  UNICODE_STRING Name;
  WCHAR          Buffer[0];
} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
1
78 / 60 / 9
Регистрация: 26.06.2013
Сообщений: 198
12.07.2013, 21:41
Думаю поможет это
dwShareMode
If this parameter is zero and CreateFile succeeds, the file or device cannot be shared and cannot be opened again until the handle to the file or device is closed. For more information, see the Remarks section.

Не по теме:

Но если получил эксклюзивный доступ, то нафиг это знание. Если хендл закрыл, то через несколько миллисекунд файл может быть уже открыт кем-то другим. Получается тоже нафиг такое знание.



Тут, правда, если кто-то другой попытается открыть после или уже открыл с dwDesiredAccess == 0, то хендл все-равно откроется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2013, 21:41
Помогаю со студенческими работами здесь

Узнать открыт-закрыт файл в другой программе, можно и по заголовку, как угодно
Давно не могу решить этот "ребус" под названием "Как узнать когда открыт и когда закрыт файл в другой программе. Есть простая программа...

Как узнать версию ОС и выдать нужный файл исходя из этого?
Здравствуйте форумчане, нужна помощь.У меня есть софт который работает либо на win 32 bit либо win 64 bit. Оба файла которые нужно...

Узнать имя пользователя у кого открыт файл
Доброго времени суток! Есть ли возможность по средствам vb.net узнать у какого пользователя открыт файл на сетевом ресурсе?

Узнать каким пользователем открыт файл на сетевом диске
Всем привет! Подскажите пожалуйста, как можно(и возможно ли вообще) узнать каким пользователем в сети открыт тот или иной файл,...

Ошибка Файл не может быть открыт ядром базы данных microsoft jet. Файл уже открыт другим пользователем для монопольного доступа или
После написания программы, записал исходник на диск. При запуске экзешника с диска появляется такая ошибка:Файл Е:\1.mdb не может быть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru