Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2007, 15:53   #1
=LeonZone=
Форумчанин
 
Аватар для =LeonZone=
 
Регистрация: 15.08.2007
Сообщений: 118
Вопрос

Как узнать под каким именем залогинился юзер? Только смотреть нужно не по тому от кого запущена твоя прога, т.к. из-под службы она запускается как SYSTEM, а вообще в самой винде... Это мне необходимо для того, чтобы активировать прогу только под учёткой student. Учётка сетевая, сервер Win2000

Или как узнать под каким именем запущен процесс explorer

Последний раз редактировалось rpy3uH; 09.11.2007 в 18:44.
=LeonZone= вне форума Ответить с цитированием
Старый 08.11.2007, 16:44   #2
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию Узнать имя пользователя

Цитата:
Сообщение от =LeonZone= Посмотреть сообщение
Как узнать под каким именем залогинился юзер? Только смотреть нужно не по тому от кого запущена твоя прога, т.к. из-под службы она запускается как SYSTEM, а вообще в самой винде... Это мне необходимо для того, чтобы активировать прогу только под учёткой student. Учётка сетевая, сервер Win2000
Код:
function GetUserFromWindows: string;
var
UserName : string;
UserNameLen : Dword;
begin
UserNameLen := 255;
SetLength(userName, UserNameLen);
if GetUserName(PChar(UserName), UserNameLen) then
   Result := Copy(UserName,1,UserNameLen - 1)
else
   Result := '';
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetUserFromWindows);
end;
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 08.11.2007, 17:06   #3
=LeonZone=
Форумчанин
 
Аватар для =LeonZone=
 
Регистрация: 15.08.2007
Сообщений: 118
По умолчанию

2 AlDelta:
Не катит! Определяет как SYSTEM!!!
=LeonZone= вне форума Ответить с цитированием
Старый 08.11.2007, 19:59   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

так тебе же уже ответили
http://programmersforum.ru/showpost.php?p=45010
rpy3uH вне форума Ответить с цитированием
Старый 09.11.2007, 13:34   #5
=LeonZone=
Форумчанин
 
Аватар для =LeonZone=
 
Регистрация: 15.08.2007
Сообщений: 118
По умолчанию

2 rpy3uH:
Я пытался, но ни#@* не получилось...
=LeonZone= вне форума Ответить с цитированием
Старый 09.11.2007, 16:39   #6
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Все маскировки матов бесполезны!

Код:
function GetUserN: string;
var Size : cardinal;
PRes : PChar;
BRes : boolean;
Begin
Size := MAX_COMPUTERNAME_LENGTH + 1;
PRes := StrAlloc(Size);
BRes := GetUserName(PRes, Size);
if BRes then GetUserN := StrPas(PRes);
end;
Вот это у меня работает.
zetrix вне форума Ответить с цитированием
Старый 09.11.2007, 16:59   #7
=LeonZone=
Форумчанин
 
Аватар для =LeonZone=
 
Регистрация: 15.08.2007
Сообщений: 118
По умолчанию

2 zetrix:
Извените, настроение плохое...

Ваш код тоже не работает!.. Т.Е. определяет SYSTEM
=LeonZone= вне форума Ответить с цитированием
Старый 09.11.2007, 19:11   #8
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

вот код который получает имя пользователя под которым находится процесс explorer.exe
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 prH,th:THandle;
 RL:DWORD;
 sid:_SID_AND_ATTRIBUTES;
 S,s1,s2:DWORD;
 buff:  pointer;
begin

 prH:=OpenProcess(PROCESS_QUERY_INFORMATION,false,GetProcessId('explorer.exe'));
 if prh=0 then ShowMessage('ошибочка');
 OpenProcessToken(prH,TOKEN_QUERY,th);
 if th=0 then ShowMessage('ошибочка');

 buff:=HeapAlloc(GetProcessHeap,0,256);

 if not GetTokenInformation(th,TokenUser,buff,256,RL) then exit;

 sid:=SID_AND_ATTRIBUTES(buff^);

 s:=256;
 s1:=256;
 s2:=SidTypeUser;

 if not LookupAccountSid(0,sid.Sid,@_user,s,@_domain,s1,s2) then
  ShowMessage('ошибочка');

 ShowMessage(_user);

 CloseHandle(th);
 CloseHandle(prh);
end;
функцию получения ID процесса через имя (GetProcessId) найдёшь на форуме
rpy3uH вне форума Ответить с цитированием
Старый 09.11.2007, 19:37   #9
=LeonZone=
Форумчанин
 
Аватар для =LeonZone=
 
Регистрация: 15.08.2007
Сообщений: 118
По умолчанию

2 rpy3uH:
Спасибо, только что это за переменные - _user и _domain?
=LeonZone= вне форума Ответить с цитированием
Старый 10.11.2007, 08:45   #10
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

_user это массив куда сохранится имя пользователя
_domain это массив куда сохранится домен в котором находится пользователь

Последний раз редактировалось rpy3uH; 10.11.2007 в 08:47.
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли назвать переменную именем 1y? Lamerok56 Общие вопросы C/C++ 4 18.04.2008 23:55
Как удалить файл с русским именем? Cricket2007 Помощь студентам 7 12.02.2008 17:51
Как скопировать проект под другим именем? Dimoney Свободное общение 4 17.12.2007 13:50
Как узнать, существует ли в базе таблица с указанным именем? Seqular БД в Delphi 1 01.03.2007 10:19
как мне сохранять файл EXCEL с именем часть которого я буду брать из области Edit а VALIK Общие вопросы Delphi 2 27.02.2007 21:51