powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как вывести на экран имя пользователя
15 сообщений из 15, страница 1 из 1
Как вывести на экран имя пользователя
    #36725817
Khodiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как узнать имя пользователя, с которым он залогинился на данный компьютер.
Мне это имя надо сохранить в поле.
Никак не могу найти или не пойму как это использовать у меня
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36725864
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно через контекст
Тынц
Переменная USERNAME
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36725949
Khodiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, ура.
Получилось
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36726638
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только надо помнить, что это - переменные окружения, которые наследуются из родительcкого процесса, и которые легко могут быть изменены юзером:
Код: plaintext
1.
2.
set USERNAME=xxxx
yourprog.exe
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36728695
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KhodikiКак узнать имя пользователя, с которым он залогинился на данный компьютер.
Мне это имя надо сохранить в поле.
Никак не могу найти или не пойму как это использовать у меня

Можно попробовать примерно так (PFC):

Код: plaintext
function boolean GetUserNameA(ref string  lpBuffer, ref ulong nSize) library "ADVAPI32.DLL"

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
boolean	lb_rc
ulong		lul_size = 255
string 	ls_name

ls_name = space(lul_size)

lb_rc = GetUserNameA( ls_name, lul_size)

if not lb_rc THEN
	return ""
else
	return ls_name
end if
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36729051
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще вариант

Код: plaintext
1.
String ls_user
RegistryGet ( 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer', 'Logon User Name', ls_user )
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36729432
Khodiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry.,
Интересное решение, учту на будущее.
Но пока буду использовать первый вариант, он сразу выводит данные без домена.
И в данной задаче я не ловлю пользователей, а для них облегчаю работу
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36815491
dvvarna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PL99KhodikiКак узнать имя пользователя, с которым он залогинился на данный компьютер.
Мне это имя надо сохранить в поле.
Никак не могу найти или не пойму как это использовать у меня

Можно попробовать примерно так (PFC):

Код: plaintext
function boolean GetUserNameA(ref string  lpBuffer, ref ulong nSize) library "ADVAPI32.DLL"

Код: plaintext
1.
2.
3.
4.
.....
lb_rc = GetUserNameA( ls_name, lul_size)

.......


У меня на 12 билдере такая конструкция стала возвращать только первый символ имени пользователя.
Может кто уже разобрался с данной проблемой?
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36815706
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима, не забывай, что 12-й полностью юникодовый, соответственно вызов функции другой
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36815788
dvvarna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001,

Так как раз в pfc_n_cst_platformunicode и стоит подобный вызов

в функции of_getuserid
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
boolean lb_rc
ulong lul_size =  255 
string ls_name

ls_name = space(lul_size)

lb_rc = GetUserNameW( ls_name, lul_size)

if not lb_rc THEN
	return ""
else
	return ls_name
end if

Или для юникода надо объявлять по другому?
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36815832
dvvarna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001,

Нашёл объявление функции для юникода
//вызов для юникода
Код: plaintext
Function boolean GetUserNameA(Ref String lpBuffer, Ref Ulong nSize) Library "ADVAPI32.DLL" ALIAS FOR "GetUserNameA;ansi"

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
boolean	lb_rc
ulong		lul_size =  255 
string 	ls_name

ls_name = space(lul_size)

lb_rc = GetUserNameA( ls_name, lul_size)

if not lb_rc THEN
	return ""
else
	return ls_name
end if
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36816088
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvvarna
Код: plaintext
Function boolean GetUserNameA(Ref String lpBuffer, Ref Ulong nSize) Library "ADVAPI32.DLL" ALIAS FOR "GetUserNameA;ansi"

Не используйте обертку там где можно использовать прямой вызов.
Большинство функций WinAPI поддерживают как Ansi так и Unicode

Код: plaintext
Function boolean GetUserNameW(Ref String lpBuffer, Ref Ulong nSize) Library "ADVAPI32.DLL" 
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36816245
dvvarna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы хотите сказать что убрав
Код: plaintext
.... ALIAS FOR .....

Можно использовать GetUserNameW... а не GetUserNameA...
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36816272
dvvarna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

Действительно работает.
Если вместо
Код: plaintext
Function boolean GetUserNameW(Ref String lpBuffer, Ref Ulong nSize) Library "ADVAPI32.DLL" ALIAS FOR "GetUserNameW;ansi"

Объявить так
Код: plaintext
Function boolean GetUserNameW(Ref String lpBuffer, Ref Ulong nSize) Library "ADVAPI32.DLL"

То имя пользователя вернётся полностью.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
boolean lb_rc
ulong	lul_size =  255 
string ls_name

ls_name = space(lul_size)

lb_rc = GetUserNameW( ls_name, lul_size)

if not lb_rc THEN
	return ""
else
	return ls_name
end if

И надобность использовать GetUserNameA отпадёт
...
Рейтинг: 0 / 0
Как вывести на экран имя пользователя
    #36816301
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvvarna
Если вместо
Код: plaintext
Function boolean GetUserNameW(Ref String lpBuffer, Ref Ulong nSize) Library "ADVAPI32.DLL" ALIAS FOR "GetUserNameW;ansi"

Объявить так
Код: plaintext
Function boolean GetUserNameW(Ref String lpBuffer, Ref Ulong nSize) Library "ADVAPI32.DLL"

То имя пользователя вернётся полностью.

Естественно. Ведь писать "GetUserNameW;ansi" - это нонсенс, поскольку W противоречит Ansi.
И прочитайте уже наконец доку по external functions.
Вы ж надеюсь не собираетесь всегда гадать или на форумах спрашивать, какие аргументы нужно передавать в библиотечные ф-и :)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как вывести на экран имя пользователя
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]