Имя: Пароль:
1C
 
"Живые" пользователи...(монитор без ВК, нужен ворд)
0 smaharbA
 
19.05.06
01:14
Надаело твердить одно и тоже...(MMF и АЛьФ (да и не только они) не объясняет народу этот вопрос)
скачайте и поглядите...
http://www.karat-e.ru/files/api4s1s/monitor.rar
(обработка только для примера, исключительные ситуации не отслеживаются)
1 dyt
 
19.05.06
01:20
супер!
2 1C_ZeroMan
 
19.05.06
06:10
Интересное решение ..а как вообще скрипт в тело обработки закидывают? научите, я тоже хочу. :)
3 skunk
 
19.05.06
06:48
так их ... знай наших ;))
4 Слоняра
 
19.05.06
06:58
(2)В таблице рисунок есть :)
5 smaharbA
 
19.05.06
08:41
Ну и где "горячие головы" ? Которые пытаются получить усеров по файлам 1cv7.lck и links.tmp (на прямую)...
6 skunk
 
19.05.06
08:43
еще спят...
7 Ангел- Хоронитель
 
19.05.06
09:00
(5)ты вышел на тропу войны? :) ворд тоже не у всех есть.
8 smaharbA
 
19.05.06
09:01
(7) Да нет, я не о том, я о принципе определения "живых" (кстати это не сложно и к ОО привязать)
9 Слоняра
 
19.05.06
09:01
(7)зато как классно!
10 mishaPH
 
19.05.06
09:07
чет я суть сего не пойму. как она работает?
11 mishaPH
 
19.05.06
09:08
откуда Объект взялся??
12 skunk
 
19.05.06
09:10
рожденый ползать летать не может
13 Скрипитер
 
19.05.06
09:11
А кому интересно узнавать кто сидит в базе из Предприятия?
Обычно ведь хотят узнать из конфигуратора. Перед тем как сохранять.
Для этого нужно скрипт написать, а не на Делфи/1С.
14 skunk
 
19.05.06
09:14
не скажите товарищ... не скажите... даже поиском по форуму пройдитесь... найдете кучу вопросов
15 smaharbA
 
19.05.06
09:16
(13) Да ну ? напиши скрипт только с тем что есть в ОС
16 mishaPH
 
19.05.06
09:16
да ладно выделыватся, колись. вот толко та инфа что в твоей таблице, есть в мониторе, так чем они отличаются?
Кроме того как это может помочь определить активность рабботы пользователя?
Офис кстати с сервером 2003 и терминалом живет глюкаво, поэтому не стоит на терминал сервере.
17 mishaPH
 
19.05.06
09:17
и убедить админов поставит офис на терминал мягко сказано не вызовет положительных эмоций
18 smaharbA
 
19.05.06
09:18
(16) Ты (0) читал внимательно ?
Суть ветки не в обработке (0), а втом чтобы поняли как определять.
19 smaharbA
 
19.05.06
09:18
(17) А чем он плох на терминале ? А какже тонкие клиенты без офиса на сервере будут жить?
20 skunk
 
19.05.06
09:20
(16)офис на сервере 2003 живет нормально... если руки не из попы растут
21 AndrewHV
 
19.05.06
09:20
(0) Такого извращения никогда раньше не видел :)
22 mishaPH
 
19.05.06
09:20
у тонких клиентов есть свои компы. там и живет.
подробностей не знаю, но установка офиса на терминальном сервере вызывает у админов приступ истерики.
23 skunk
 
19.05.06
09:21
что есть тоникий клиент... ну админы ... понаридумывают всяких терминов... хоть стой хоть падай
24 AndrewHV
 
19.05.06
09:22
Так все равно файл SYSLOG\links.tmp анализируется :)
25 Ангел- Хоронитель
 
19.05.06
09:22
(22)странно, у меня не вызывает, поставил и все путем.
26 smaharbA
 
19.05.06
09:23
(22) Убей всех своих админов
(21) Таких "извращений" тут на форуме понатыкал до и более, и твой любимый хук без ВК
27 AndrewHV
 
19.05.06
09:23
(0) Однако круто получилось :)
28 smaharbA
 
19.05.06
09:24
(24) Вопрос в том - "как анализирует ?"
29 skunk
 
19.05.06
09:26
анализ должен быть во всем
30 AndrewHV
 
19.05.06
09:27
Надо же было так растопырить vba. Прям не могу без слез на это смотреть.
Бедный basic.
31 AndrewHV
 
19.05.06
09:28
Это как в том фильме корову в истребителе в отсеке для бомб перевозили.
32 Скрипитер
 
19.05.06
09:29
(15) - я использую из конфигуратора скрипт ShowIBState::ShowIBStatus - выводит статус базы, но без активных юзеров.
Было бы неплохо выводить и их.
33 smaharbA
 
19.05.06
09:29
Для тех кто не может найти код объекта "Объект"...
...
Public Function КтоВБазе(sPathFile) As Collection
   Set КтоВБазе = New Collection
   Set КтоВБазе = GetUser(sPathFile & "\SYSLOG\links.tmp")
   For i = КтоВБазе.Count To 1 Step -1
       If Not КтоВБазе.Item(i).Блокировка Then КтоВБазе.Remove i
   Next
End Function

//Class1
Public Текст As String
Public Блокировка As Boolean
Public Пользователь As Class2

//Class2
Public Имя As String
Public Режим As String
Public Система As String
Public Компьютер As String
Public Дата As String
Public Время As String

//Module
Private Type Record
   rec As String * 1024
End Type
Private Const GENERIC_EXECUTE = &H20000000
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING = 3
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const FILE_FLAG_RANDOM_ACCESS = &H10000000
Private Const FILE_ATTRIBUTE_NORMAL = &H0
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function LockFile Lib "kernel32" (ByVal hFile As Long, ByVal dwFileOffsetLow As Long, ByVal dwFileOffsetHigh As Long, ByVal nNumberOfBytesToLockLow As Long, ByVal nNumberOfBytesToLockHigh As Long) As Long
Private Declare Function UnlockFile Lib "kernel32" (ByVal hFile As Long, ByVal dwFileOffsetLow As Long, ByVal dwFileOffsetHigh As Long, ByVal nNumberOfBytesToUnlockLow As Long, ByVal nNumberOfBytesToUnlockHigh As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Function parse(s) As Class2
   Set parse = New Class2
   a = Replace(s, vbCrLf, "")
   a = Replace(a, "{{", "")
   a = Replace(a, "}}", "")
   a = Replace(a, "},{", vbCr)
   arr = Split(a, vbCr)
   If UBound(arr) = 0 Then Exit Function
   For i = 0 To UBound(arr)
   f = Replace(arr(i), """,""", vbCr)
   f = Replace(f, """", "")
   arr(i) = Split(f, vbCr)(1)
   Next
   parse.Имя = arr(0)
   Select Case arr(1)
   Case "C"
       parse.Система = "Конфигуратор"
   Case "E"
       parse.Система = "Предприятие"
   Case "M"
       parse.Система = "Монитор"
   Case "D"
       parse.Система = "Отладчик"
   End Select
   If arr(2) = "N" Then
       parse.Режим = "Раздельный"
   ElseIf arr(2) = "Y" Then
       parse.Режим = "Монопольный"
   End If
   parse.Дата = Split(arr(3), ",")(0)
   parse.Время = Split(arr(3), ",")(1)
   parse.Компьютер = arr(4)

End Function
Public Function GetUser(sFile) As Collection
   Set GetUser = New Collection
   Close
   filenumber = FreeFile
   If Dir(sFile) = vbNullString Then
       GoTo errH
   End If
   Dim MyRecord As Record
   Open sFile For Random As #filenumber Len = Len(MyRecord)
   i = 0
   Do While Not EOF(filenumber)
       Get #filenumber, i + 1, MyRecord
       Set myclass = New Class1
       myclass.Блокировка = False
       myclass.Текст = Trim(MyRecord.rec)
       Set myclass.Пользователь = parse(Trim(MyRecord.rec))

       GetUser.Add myclass, "" & i
       i = i + 1
   Loop
   Close #filenumber
   hFile = CreateFile(sFile, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, struct_security, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS Or FILE_ATTRIBUTE_NORMAL, 0)
   For i = 0 To GetUser.Count - 1
       GetUser.Item("" & i).Блокировка = (LockFile(hFile, 2000001 + i, 0, 1, 0) = 0)
       Call UnlockFile(hFile, 2000001 + i, 0, 1, 0)
   Next
   CloseHandle hFile
   Exit Function
errH:
   For i = 1 To GetUser.Count
       GetUser.Remove 1
   Next
   Set myclass = New Class1
   myclass.Блокировка = True
   If Err Then
       myclass.Текст = Trim(Err.Description) & Err.Source
   Else
       myclass.Текст = "Not file found -'" & sFile
   End If
   GetUser.Add myclass, "Err"
End Function
...
Можно было и короче и "умнее" но было лениво...
34 smaharbA
 
19.05.06
09:31
(32) Какой нафих скрипт в конфигураторе ? Ты хоть понял что без сторонних приблуд этого не сделать (вернее далеко не каждому) (знаю что ты об опенконфе)
35 AndrewHV
 
19.05.06
09:31
(33) Интересно, а кто догадался во внедренный объект на таблице залезть?
Я вот тоже не сразу все понял.
Вот тот квадратик в таблице и есть бомболюк :))))
36 AndrewHV
 
19.05.06
09:33
И никто ведь не станет искать в боболюке корову :)))))))
37 smaharbA
 
19.05.06
09:33
(35) В таблицу не только такое можно закинуть
Это чисто мое "ноу-хау", можешь даже не искать (хотя в ЖКК и СП об этом вскольз есть)
38 1C_ZeroMan
 
19.05.06
09:39
(37) я так не играю.. :( нифига не могу понять, куда зырить?
39 AndrewHV
 
19.05.06
09:40
(37) Хорошо еще, что ты для объекта границу поставил. Если бы ты его без границы сделал, то наверное никто твой код так и не нашел бы... ну или почти никто. :)
40 skunk
 
19.05.06
09:40
в документ ворда надо смотреть
41 skunk
 
19.05.06
09:43
а вообще лихо замутил... надо будет снипу показать...
42 AndrewHV
 
19.05.06
09:48
Вот из-за таких как автор некторые админы боятся офис на терминальные сервер устанавливать :) Там такого можно натворить ... %D
43 Ангел- Хоронитель
 
19.05.06
09:49
(42)можно. но с такими, как автор, админу дружить надо и учиться у него.
44 skunk
 
19.05.06
09:49
это очень не правильные админы...
45 Скрипитер
 
19.05.06
09:54
(33), (34) - а ято ты сейчас написал? Респект за код. Классы в VBScript есть? Есть. Dynwrap для вызовов API функций есть? Есть, лишь бы не передавались структуры.
Приблуды - COM объекты (Коллекции/Врапперы) - есть в OpenConfе.

Сегодня вечером буду переписывать под VBScript.
46 selenat
 
19.05.06
10:13
(0) Офигеть! Долго искал. :)))
47 Ирен
 
19.05.06
10:22
(0) Что-то не поняла - а зачем эта фича нужна?
48 MMF
 
19.05.06
10:24
(47) блондинка?
49 smaharbA
 
19.05.06
10:24
Я и не пытался код прятать, просто так удобно, еслиб надо было то кодбы лежал прямо в модуле (и на виду) тока врядлибы кто его смог прочитать и даже небылобы объекта таблица и ерт ничембы не рихтовал(нет привычки)
50 smaharbA
 
19.05.06
10:24
(48) Кстати тебе спасибо и "^" - (можнт помнишь такого :))
51 Ирен
 
19.05.06
10:25
(48) не-а..
52 VV_VV
 
19.05.06
10:25
а если монитор.длл скопировать в папаочку бин\конфиг\ , то в конфигураторе заработает красивый монитор. Проверено, мин нет!
53 Токс
 
19.05.06
10:26
Ништяк! Как обычно - респект и уважуха!
54 VV_VV
 
19.05.06
10:27
+52) конечно, при установленном опенконфе.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой