Как выяснить, открыт ли кем-нибудь файл с общим доступом? |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Имеется шара в сети с excel файлом. Когда в нем кто то работает у другого пользователя появляется диалоговое окном «Файл занят и ФИО пользователя». Но временами просто выводит что «файл занят другим пользователем»
Как можно включить что бы постоянно отображалось ФИО работающего с файлом?
Все действие в доменной среде. Доступ к папке имеет 12 пользователей на чтение и запись.
-
Вопрос заданболее трёх лет назад
-
10943 просмотра
Возможно, ФИО показывает у тех, кто заполнил это поле в параметрах.
Заставьте всех пользователей внести ФИО в параметрах и будете знать каждого занимающего файл.
Пригласить эксперта
На сервере с вашей шарой запускаешь compmgmt.msc > Общие папки > Открытые файлы и смотришь кто работает с файлом. Также можно воспользоваться консольной утилиты Openfiles
-
Показать ещё
Загружается…
16 апр. 2023, в 06:36
1000 руб./за проект
16 апр. 2023, в 05:28
5000 руб./за проект
16 апр. 2023, в 04:52
5000 руб./за проект
Минуточку внимания
Представьте себе книгу Excel с очень важными для вас данными, сохраненную на общем сетевом диске компании, куда имеет доступ куча народу. Одним совсем не прекрасным утром вы открываете этот файл и обнаруживаете, что внутри кто-то поиграл в аль-каиду: формулы поломаны, данные стерты, дизайн нарушен. Поскольку вы опытный пользователь, то у вас, конечно же, была резервная копия этого важного документа (была же, правда?) и данные вы восстановите, но чисто из спортивного интереса хотелось бы все же узнать — КТО ЭТО СДЕЛАЛ?!
Давайте попробуем решить эту задачу. Итак, нам нужно:
- фиксировать на отдельном (скрытом) листе имя пользователя, открывшего файл;
- фиксировать там же дату-время открытия и закрытия файла;
- по возможности усложнить взлом или обход такой защиты.
Этап 1. Создаем «Лог»
Добавим в нашу книгу новый лист, куда будет записываться информация о всех пользователях и назовем его, например, Лог. На нем создадим простую шапку будущего журнала учета посетителей:
Этап 2. Макросы фиксации входа-выхода
Теперь добавим макросы для записи на лист Лог даты-времени и имен пользователей при открытии и закрытии книги. Для этого нужно открыть редактор Visual Basic с помощью сочетания Alt+F11 или с помощью кнопки Visual Basic на вкладке Разработчик (Developer) и найти в левом верхнем углу панель Project (если она не отображается, то включить ее можно сочетанием клавиш Ctrl+R):
Двойным щелчком откройте модуль ЭтаКнига (ThisWorkbook) и вставьте туда пару наших макросов для обработки событий открытия и закрытия книги:
В первом приближении все уже должно работать. Попробуйте открыть-закрыть этот файл пару раз и убедитесь, что на лист Лог попадает ваше имя пользователя (логин входа в Windows) и дата-время:
Этап 3. Улучшаем надежность
Можно было бы скрыть лист Лог и на этом остановиться, но есть одно «но»: если у пользователя, который открывает нашу книгу, макросы разрешены по умолчанию либо он сам их разрешает, нажав в окне предупреждения на кнопку Включить содержимое, то все в порядке:
Но что если пользователь не разрешит выполнение макросов или они отключены у него по умолчанию? Тогда наши макросы отслеживания выполняться не будут и фиксации имени и даты не произойдет 🙁 Как же заставить пользователя разрешить использование макросов?
Чтобы обойти эту проблемку воспользуемся небольшой тактической хитростью. Добавьте в нашу книгу еще один чистый лист, назовите его Предупреждение и вставьте на него следующий текст:
Суть в том, чтобы по умолчанию скрыть в книге все листы кроме этого, а рабочие листы с данными отображать с помощью специального макроса. Если пользователь не разрешил выполнение макросов, то он увидит в книге только один лист с предупреждением. Если же макросы разрешены, то наш макрос обработки события открытия книги скроет лист с предупреждением и отобразит листы с данными. Чтобы пользователь сам не отобразил их — используем суперскрытие вместо обычного скрытия листов (параметр xlSheetVeryHidden вместо обычного False).
Чтобы реализовать все описанное, слегка изменим наши процедуры в модуле ЭтаКнига (ThisWorkbook):
Чтобы просмотреть скрытый Лог откройте редактор VisualBasic (Alt+F11), выделите лист на панели Project и измените его видимость на панели Properties, используя свойство Visible:
Если пользователи настолько продвинутые, что знают про суперскрытые листы и могут их отобразить через редактор Visual Basic или нарушить работу наших макросов, то можно дополнительно поставить пароль на просмотр и изменение макросов. Для этого щелкните правой кнопкой мыши по имени файла в панели Project (строка VBAProject (blackbox.xls)), выберите команду VBA Project Properties и включите флажок Lock project for viewing и задайте пароль на вкладке Protection:
Теперь точно никто не уйдет безнаказанным. Большой Брат следит за тобой! 😉
как определить компьютер, с которого открыли файл?
Автор Стасон, 30.10.2009, 15:45
« назад — далее »
Можно ли средствами VBA узнать сетевое имя компьютера, с которого открыли «для записи» необщий файл, который я вынужден открыть позже уже «только для чтения»?
Вот так попробуйте:
Private Declare Function GetComputerName Lib «kernel32» Alias «GetComputerNameA» (ByVal lpBuffer As String, nSize As Long) As Long
Sub test()
Dim scomp As String
scomp = Space(255)
h = GetComputerName(scomp, 255)
MsgBox Trim(scomp)
End Sub
Спасибо. Попробовал. Однако, я получаю своё имя. Мне же надо узнать кто из сети открыл файл.
Или я не так это использую?
Эта процедура выдает имя того, кто в настоящий момент открыл файл. Если Вы открыли, то Ваше имя и выдаст. Если кто другой — соответственно — его имя. Как Вы организуете использование этой информации — тут простор для фантазии. Можно, например, поставить процедуру в автозапуск по событию открытия файла и вместо мессаджбокса записывать ее в определенную ячейку, или в пользовательское свойство файла, или сообщать кому следует , например по почте.
Путей к вершине — множество. Этот один из многих!
Цитата: Алексей Шмуйлович от 02.11.2009, 20:42
Эта процедура выдает имя того, кто в настоящий момент открыл файл.
Дык, этот файл в настоящее время открыли двое. «Тот, кто открыл первым» и я.
Эта процедура определяет только имя копьютера, с которого я открыл файл? А определить имя компьютера «того, кто открыл первым» как можно с моего компьютера?
Вариант записи имя компа в именованную константу в книге при первом (по очереди) открытии — это я уже взял на вооружение. Но для этого надо в каждую книгу соответствующий макрос записывать. А хотелось более гибкого и универсального решения.
Имя пользователя, который открыл файл для работы, Excel же определяет и пишет в мессаге, что-то типа «Файл открыт пользователем User». Неужели это нельзя реализовать силами VBA? :-((((
#7
03.11.2009, 14:36
Последнее редактирование: 03.11.2009, 14:38 от Алексей Шмуйлович
Так, сразу много вопросов.
GWolf, на счет почты я пошутил. Задача в принципе решаемая, но я сам никогда целью не задавался и не решал. И, кажется, была подобная тема про электропочту. Если актуально, давайте вынесем в отдельный топик.
Стасон, я предлагаю схему фиксации где-то на внешнем носителе (на экране, в файле, в базе данных и т.п.) того события что файл открыли. А Вы, видимо хотите понять, кем он открыт в данный момент, т.е. на момент запроса. Как это сделать программно, пока мыслей нет. Руками можно посмотреть в управлении системой с того компьютера, на котором физически хранится файл. Но Вы подумайте хорошо, может для Вашей задачи будет достаточно информации об очереди пользователей, открывавших файл?
Второй вопрос про VBA — не понял. А я же и пишу Вам код на VBA, просто обращаюсь в API. Вы же просили не пользователя, а имя компьютера. Если пользователя, то можно попытаться обратиться к данным подписи пользователя Office, той, что используется при рецензировании, — где-то в настройках программы они есть, соответствнно должен быть и программный доступ к этим данным.
Задумка была такая:
на фирме нет строгой политики по именам пользователя, но зато имена компьютеров уникальны. Поэтому когда открываешь какой-либо файл, а там сидит какой-нибудь «User», то узнать имя компа, с которого этот файл в текущий момент открыт. Дальше уже можно банальным телефонным звонком выгнать пользователя из файла. Вот…
Ну, тогда мой вариант Вам подойдет.
Каждый, кто открывает файл, автоматически запускает событие открытия книги. Выводите инфу об имени компьютера в какой-нибудь текстовый файл в сети или базу данных и у Вас всегда будет инфа кто и когда открыл. При желании также можно записывать и инфу о закрытиии файла по соответствующему событию.
Цитата: Стасон от 03.11.2009, 13:53
Имя пользователя, который открыл файл для работы, Excel же определяет и пишет в мессаге, что-то типа «Файл открыт пользователем User». Неужели это нельзя реализовать силами VBA? :-((((
столкнулся с таким у себя на работе. решается очень просто. админ один раз проходится по всем компам и меняет в настройках офиса defaultный USER на имя пользователя, или имя ПК. И все, при открытии открытого файла имеем информацию кто его открыл
Цитата: Алексей Шмуйлович от 03.11.2009, 14:36
…
GWolf, на счет почты я пошутил. Задача в принципе решаемая, но я сам никогда целью не задавался и не решал. И, кажется, была подобная тема про электропочту. Если актуально, давайте вынесем в отдельный топик.
Думаю, что актуально, буду признателен, если все же сможем «дожать» до рабочего кода.
Путей к вершине — множество. Этот один из многих!
Если отправить почту нужно полностью автоматически, то нужны какие-нибудь нестандартные библиотеки. У меня на работе что-то подобное прораммист делал из SQL Servera. При поступлении новых записей в базу срабатывает триггер и мне отправляется письмо. Надо спросить, как он это сделал.
А если достаточно сформировать письмо в Outlook, которое потом человек своей рукой отправит адресату, то это просто. Outlook через OLE вызываем и вперед. Тоже поискать нужно, у меня где-то было.
Какой вариант смотрим?
Цитата: Алексей Шмуйлович от 06.11.2009, 19:05
Если отправить почту нужно полностью автоматически, то нужны какие-нибудь нестандартные библиотеки. У меня на работе что-то подобное прораммист делал из SQL Servera. При поступлении новых записей в базу срабатывает триггер и мне отправляется письмо. Надо спросить, как он это сделал.
А если достаточно сформировать письмо в Outlook, которое потом человек своей рукой отправит адресату, то это просто. Outlook через OLE вызываем и вперед. Тоже поискать нужно, у меня где-то было.
Какой вариант смотрим?
Не сочтите за наглость, но здается, что тема интересна не только мне, а посему — оба варианта. Хто его знает, как ползовательскопрограммная тропка повернется . Спасибо.
Путей к вершине — множество. Этот один из многих!
Ну ладно.
Вариант с отправкой через Outlook.
Public Sub sendmail()
Dim olApp As Outlook.Application
Dim objMail As Outlook.MailItem
Set olApp = Outlook.Application
‘Create e-mail item
Set objMail = olApp.CreateItem(olMailItem)
With objMail
‘Set body format to HTML
.To = «example@mail.ru»
.BodyFormat = olFormatPlain
.body = «Helo, World»
.Send
End With
End Sub
Можно использовать не .send, а .display, тогда подготовленное письмо будет ждать отправки вручную.
Второй вариант, независимый от Outlook скоро не обещаю — нужно будет пообщаться с программистом, а на работе сейчас дел невпроворот
Цитата: Алексей Шмуйлович от 06.11.2009, 22:55
Ну ладно.
Вариант с отправкой через Outlook.Public Sub sendmail()
Dim olApp As Outlook.Application
Dim objMail As Outlook.MailItem
Set olApp = Outlook.Application
‘Create e-mail item
Set objMail = olApp.CreateItem(olMailItem)With objMail
‘Set body format to HTML
.To = «example@mail.ru»
.BodyFormat = olFormatPlain
.body = «Helo, World»
.Send
End With
End SubМожно использовать не .send, а .display, тогда подготовленное письмо будет ждать отправки вручную.
Второй вариант, независимый от Outlook скоро не обещаю — нужно будет пообщаться с программистом, а на работе сейчас дел невпроворот
здорово, спасиба! Готов ждать …
Путей к вершине — множество. Этот один из многих!
Ну, сильно не радуйтесь. Для того, чтобы такой вариант работал, на компьютере должен быть Outlook с настроенной учетной записью для отправки почты и у него должны быль соответствующие настройки безопасности. То есть, если Вы намерены использовать это с разными компьютерами в сети, то не факт, что это везде сработает.
Путей к вершине — множество. Этот один из многих!
Боюсь, что и он будет страдать те ми же недостатками. Внешнюю библиотеку, чтобы она работала, нужно регистрировать на рабочей станции, где она будет выполняться.
Цитата: Алексей Шмуйлович от 07.11.2009, 00:45
Боюсь, что и он будет страдать те ми же недостатками. Внешнюю библиотеку, чтобы она работала, нужно регистрировать на рабочей станции, где она будет выполняться.
— это наименьшее зло …
Путей к вершине — множество. Этот один из многих!
Алексей Шмуйлович
А подскажите — как записать дату открытия!!!???
Сорри!!! Протупил!!! Сам разобрался!!!
Вопрос немного в другом!!! А возможно ли узнать ЧТО поменял пользователь!!!
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли
GWolf, Алексей Шмуйлович,
Проще всего для отправки писем через SMTP в скриптах и макросах использовать CDO — Collaboration Data Objects. Это стандартные библиотеки входящие в любую винду с 2000-й. Вот здесь http://www.paulsadowski.com/WSH/cdo.htm есть несколько подробно описанных примеров практически на все случаи жизни.
А Outlook , кстати, с настройками по умолчанию при использовании метода Send будет показывать пользователю сообщение (модальное!!), о том что какая-то программа пытается письмо отправить и разрешить её или нет и на какое время. (Это сделали типа для защиты от вирусописателей. В 2007-м отключается в настройках безопасности, а в 2003-м, единственный известный мне метод, отключается с геморроем и только при работе с Exchange)
Актуально только для Клиента Google Диска
|
Чтобы не запутаться в версиях файла Microsoft Word, Excel или PowerPoint, над которым работают несколько человек, в Google Диск для компьютеров вы можете отслеживать, кто редактирует файл в настоящий момент.
|
Как узнать, кто редактирует файл Microsoft Office
- В приложении «Диск для компьютеров» откройте файл Office, к которому предоставлен доступ, с помощью Word, Excel или PowerPoint.
В правом нижнем углу страницы появится текущий статус.
- В зависимости от статуса будет показан один из следующих вариантов действий:
- Можно редактировать. Никто не редактирует файл, поэтому вы можете вносить изменения.
- Подождите, кто-то уже редактирует документ. Этот статус означает, что сейчас с файлом работает другой пользователь.
- Чтобы получить уведомление о том, что пользователь завершил работу, установите флажок Сообщить мне, когда с файлом можно будет работать.
- Чтобы посмотреть подробные сведения о том, кто редактирует или просматривает файл, нажмите на пользователя в списке.
- Создана новая версия. Этот статус означает, что кто-то создал новую версию документа. Чтобы увидеть новую версию, нажмите Обновить.
Как объединить версии
Если кто-то сохранит новую версию файла, который вы редактируете, вы получите уведомление.
Вы сможете сохранить свою версию как копию или вручную объединить вашу и последнюю сохраненную версию файла. Получив уведомление:
- Нажмите Сравнить версии.
- Скопируйте изменения из своей версии (слева) в последнюю версию (справа).
- Закончив, нажмите Сохранить для последней версии файла.
Несохраненная версия (слева) будет удалена.
Как изменить системные разрешения на компьютере Mac
Как отключить функцию совместного редактирования в реальном времени
Google, Google Workspace, а также другие связанные знаки и логотипы являются товарными знаками компании Google LLC. Все другие названия компаний и продуктов являются товарными знаками соответствующих компаний.
Эта информация оказалась полезной?
Как можно улучшить эту статью?