purebasic.info

PureBasic forum
Текущее время: Вс окт 21, 2018 4:52 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: Чт июн 25, 2015 6:45 pm 
Не в сети
студент

Зарегистрирован: Чт июн 25, 2015 6:40 pm
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Здравствуйте! Как-то я в интернете нашел функцию, напоминающую названием EnumUsers() или UsersEnum(). Вы можете подсказать, как узнать названия всех пользователей? Или подсказать, на какой версии PureBasic работает эта функция?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт июн 25, 2015 7:43 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
Из Droopy (http://droopylib.pagesperso-orange.fr/)
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Structure USER_INFO_0
  Nom.l
EndStructure
;&&&1 Unicode2String
Procedure.s Unicode2String(Pointer) ;+++
  ;/// Converts Unicode to string
  ;/// Author : ABBKlaus
  ProcedureReturn PeekS(Pointer,-1,#PB_Unicode)
EndProcedure
 
Procedure.s NetUserEnum() ;+++
  ;/// Retrieves all UserNames
  ;/// Each time you call NetUserEnum(), it returns a Username when there are no more UserNames, it returns an empty String.
 
  Static Flag,Ptr,totalentries,PtrOriginal
 
  If Flag=totalentries And Flag<>0
    Flag=0
    OpenLibrary(0,"NetApi32.dll")
    CallFunction(0,"NetApiBufferFree",PtrOriginal)
    CloseLibrary(0)
    ProcedureReturn ""
  EndIf
 
 
  If Flag=0 ; Si jamais lancй / dйpassй on initialise
    *Utilisateur.USER_INFO_0
    Ptr=0
    entriesread=0
    totalentries=0
    resumehandle=0
   
    OpenLibrary(0,"NetApi32.dll")
    GetFunction(0,"NetUserEnum")
    CallFunction(0,"NetUserEnum",0,0,0,@Ptr,-1,@entriesread,@totalentries,@resumehandle)
    CloseLibrary(0)
    PtrOriginal=Ptr
  EndIf
 
  *Utilisateur=Ptr
  Output.s=Unicode2String(*Utilisateur\Nom)
  Ptr+SizeOf(USER_INFO_0)
  Flag+1
 
  ProcedureReturn Output
 
EndProcedure
 
;{+++
;/// Example
 
 
Repeat
Username.s=NetUserEnum()
If Username="" : Break : EndIf
UsernameList.s+Username+#CRLF$
ForEver
MessageRequester("UserName list",UsernameList)
;}


_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт июн 26, 2015 8:52 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
kvitaliy писал(а):

Что-то код не рабочий. (а скомпилированный из друпии работает)
Код:
1
2
3
 
40  *Utilisateur=Ptr                          ; Ptr = 0
41  Output.s=Unicode2String(*Utilisateur\Nom) ; Тут падает


Можно попробовать вот такой кодес. Я его подсмотрел тут
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
;Net Errors - Alphabetical Order
;http://systemmanager.ru/windowsmobile_6_5.en/html/0adbafec-8570-42fd-b251-83611045197c.htm
 
; constants.pbi
 
#ERROR_ACCESS_DENIED         = 5  ;Доступ запрещен
#ERROR_NOT_ENOUGH_MEMORY     = 8  ;Недостаточно памяти
#ERROR_BAD_NETPATH           = 53 ;Неверное сетевое имя
#ERROR_NETNAME_DELETED       = 64 ;Сетевой ресурс более недоступен
#ERROR_NETWORK_ACCESS_DENIED = 65 ;Отсутствует доступ к сети
#ERROR_BAD_DEV_TYPE          = 66 ;Неверный тип сетевого ресурса
#ERROR_BAD_NET_NAME          = 67 ;Не найдено сетевое имя
#ERROR_INVALID_PARAMETER     = 87 ;Неверный параметр
#ERROR_INVALID_LEVEL         = 124;Неверный уровень администрирования
#ERROR_NO_SUCH_ALIAS         = 1376                   ; Указанная локальная группа не существует.
 
 
#NERR_Success            = 0
#NERR_BASE               = 2100
#NERR_GroupExists        = #NERR_BASE + 123       ; Группа уже существует.
#NERR_NotPrimary         = #NERR_BASE + 126       ; Операция разрешена только для главного контроллера домена.
#NERR_UserExists         = #NERR_BASE + 124       ; Юзер уже существует
#NERR_PasswordTooShort   = #NERR_BASE + 145       ; Слишком короткий пароль.
#NERR_InvalidComputer    = #NERR_BASE + 251       ; Неверное имя компьютера.
#NERR_UserNotFound       = #NERR_BASE + 121       ; Юзер не найден
#NERR_UseNotFound        = #NERR_BASE + 150       ; The network connection could not be found.
#NERR_SpeGroupOp         = #NERR_BASE + 134       ; Операция не допускается в некоторых особых группах. Эти группы включают
                                                  ; группы пользователей, админские группы, локальные группы, и гостевые группы.
#NERR_GroupNotFound      = #NERR_BASE + 120
#NERR_GroupExists        = #NERR_BASE + 123       ; Группа уже существует.
#NERR_PasswordTooShort   = #NERR_BASE + 145       ; Слишком короткий пароль.
#NERR_BufTooSmall        = #NERR_BASE +  23       ; Слишком мал буфер
 
#TIMEQ_FOREVER = -1
#DOMAIN_GROUP_RID_USERS = $201
#USER_MAXSTORAGE_UNLIMITED = -1
#MAX_PREFERRED_LENGTH = -1
; ---------------------------------------------
; Фильтр при перечислении пользователей
; ---------------------------------------------
 
#FILTER_TEMP_DUPLICATE_ACCOUNT    = 1
#FILTER_NORMAL_ACCOUNT            = 2
#FILTER_PROXY_ACCOUNT             = 4
#FILTER_INTERDOMAIN_TRUST_ACCOUNT = 8
#FILTER_WORKSTATION_TRUST_ACCOUNT = $10
#FILTER_SERVER_TRUST_ACCOUNT      = $20
 
; ---------------------------------------------
; Used by usri3_flags element of data structure
; ---------------------------------------------
#UF_SCRIPT = 1
#UF_ACCOUNTDISABLE         = 2        ; Отключить учетную запись
#UF_HOMEDIR_REQUIRED       = 8
#UF_LOCKOUT                = $10
#UF_PASSWD_NOTREQD         = $20
#UF_PASSWD_CANT_CHANGE     = $40      ; Запретить смену пароля пользоателем
#UF_DONT_EXPIRE_PASSWD     = $10000   ; Срок действия пароля не ограничен
#STILL_ACTIVE              = $103
#UF_NORMAL_ACCOUNT         = $200
#UF_SERVER_TRUST_ACCOUNT   = $2000
#PROCESS_QUERY_INFORMATION    = $400
#UF_TEMP_DUPLICATE_ACCOUNT    = $100
#UF_INTERDOMAIN_TRUST_ACCOUNT    = $800
#UF_WORKSTATION_TRUST_ACCOUNT    = $1000
 
; ---------------------------------------------
; административные флаги - какие привилегии имеет пользователь
; ---------------------------------------------
#USER_PRIV_GUEST     = 0   ;   Гость
#USER_PRIV_USER      = 1   ;   Пользователи
#USER_PRIV_ADMIN     = 2   ;   Администратор



Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  
    ; http://subscribe.ru/archive/comp.soft.prog.delphint/200207/23073828.html
 
IncludeFile "constants.pbi"
 
Structure USER_INFO_10
  usri10_name.i
  usri10_comment.i
  usri10_full_name.i
  usri10_usr_comment.i
EndStructure
 
Global Dim *| style="color: #006868;">userinfo.USER_INFO_10(0)
 
Procedure UserEnum()
 
Protected.i dwRead, dwTotal, dwRes, pBuf, p_lngRtn
Protected p_strErr.s
p_lngRtn = NetUserEnum_(#Null, 10, #FILTER_NORMAL_ACCOUNT, @pBuf, #MAX_PREFERRED_LENGTH, @dwRead, @dwTotal, @dwRes)
If pBuf > 0 And p_lngRtn = #NERR_SUCCESS
  ReDim *|!REG3XP3!>userinfo(dwRead)
  For i = 0 To dwRead - 1
    *|!REG3XP3!>userinfo(i) = pBuf  
    pBuf + SizeOf(USER_INFO_10)
  Next i
  NetApiBufferFree_(pBuf)
 Else  
    Select p_lngRtn
       Case #ERROR_ACCESS_DENIED
          p_strErr = "The user does not have access to the requested information."
       Case #ERROR_INVALID_LEVEL
          p_strErr = "The system call level is not correct. This error is returned if the level" +
                     "parameter is set To a value Not supported."
        Case #NERR_BufTooSmall
          p_strErr = "The buffer is too small to contain an entry. No information has been written to the buffer."
       Case #NERR_InvalidComputer
          p_strErr = "The computer name is invalid."
       Case #ERROR_MORE_DATA
          p_strErr = "More entries are available. Specify a large enough buffer to receive all entries."
       Default
            p_strErr = "Unknown error #" + Str(p_lngRtn)
    EndSelect
    MessageRequester("Error", p_strErr, #PB_MessageRequester_Ok)
    ProcedureReturn #False
 
  EndIf  
    NetApiBufferFree_(pBuf)
    ProcedureReturn #True
EndProcedure
 
UserEnum()
 
  For i = 0 To ArraySize(*|!REG3XP3!>userinfo()) - 1
     Debug PeekS(*|!REG3XP3!>userinfo(i)\usri10_name, -1, #PB_Unicode)
     Debug PeekS(*|!REG3XP3!>userinfo(i)\usri10_usr_comment, -1, #PB_Unicode)
     Debug PeekS(*|!REG3XP3!>userinfo(i)\usri10_comment, -1, #PB_Unicode)
     Debug PeekS(*|!REG3XP3!>userinfo(i)\usri10_full_name, -1, #PB_Unicode)
     Debug "****************************************************************"
  Next i
 



Баг при отправке сообщения

между тегами code][/code] если встречается указатель со звездочкой, между звездочкой и переменной вставляется какя-то лабуда
как например Global Dim *| style="color: #006868;">userinfo.USER_INFO_10(0)
Все что между звездочкой и userinfo нужно удалить

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт июн 26, 2015 9:50 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6384
Благодарил (а): 20 раз.
Поблагодарили: 198 раз.
Пункты репутации: 48
В чем именно проблема? Обычно три причины код, ОС, руки. Я так понимаю, что если в Друпии работает, то код и ОС годные?

_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт июн 26, 2015 11:49 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
kvitaliy писал(а):
В чем именно проблема?


Руки :oops:
Т.к. NetUserEnum совпадает с названием ф-ии из друпии, я чехом переименовал все NetUserEnum на NetUserEnum_, в том числе и в GetFunction(0,"NetUserEnum") :D

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб июл 18, 2015 12:02 am 
Не в сети
студент

Зарегистрирован: Чт июн 25, 2015 6:40 pm
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Всем спасибо.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB