Подскажите нормальную возможность определения наличия прав админа. Особенности 1) консоль не парсить 2) поддержка винды разного языка 3) не использовать WMI и прочие хрени. 4) совместимость с Win7 Была идея - создавать файл в папке Windows. Если создался, то значит есть права админа. Но на Win7 из-за UAC всё обламывается.
можно сделать так как ты предложил,ток отключать uac?(или прятать окно)отключать если юзверу дозволено копатся в реестре...
2 DooD ты гений. Если у человека нет прав админа то отключить UAC - это вообще заоблочное желание. А чтобы спрятать окно UAC нужно попасть на защищенный рабочий стол (где оно и показывается), а для этого надо иметь права System и ему подобные.
О. Нашел фишку. Оказывается всё через Net функции можно сделать. т.е. Кому интересно то делается это так: Code: LPUSER_INFO_1 UserInfo; WCHAR UserName[250]; DWORD UserNameLen = 250; if (GetUserNameW(UserName, &UserNameLen) && NetUserGetInfo(NULL, UserName, 1, (LPBYTE*)&UserInfo) == NERR_Success && (UserInfo->usri1_priv & USER_PRIV_ADMIN)) { MessageBoxA(0, "admin", "admin", MB_OK); }
Ты это о чем вообще? Я вообще предполагаю что если у человека есть права админа, то можно делать определенное действие. Если прав админа нет, действовать по другому и предложить связаться с администратором для установки программы
А,я думал тебе надо все это проверить так чтоб uac не вылазило...я думал сначала втупую определять класс окна и делать SW_HIDE,но я так понял что не выйдет
2 DooD UAC сделан так что окно появляется на рабочем столе созданном системным процессом + наложена кое какая защита. В частности: 1) Окно нельзя найти из под своего пользователя 2) поиск окна по координатам мыши толком ничего не даст. потому что его хендл нельзя использовать. 3) эмуляция нажатия на клавишу + эмуляция нажатия на кнопку мышки - не катит. т.е. окно не воспринимает это. 4) посылка WM сообщения окну, тоже проваливается из-за того что окно принадлежит другому пользователю. 5) тупо скрыть окно нельзя, даже потому что поток который затребовал повышения прав автоматически блокируется до появления решения от UAC Тот метод что я привел пашет отлично. только что протестировал на: 1) Win XP SP 2 RU (англ + русские имена пользователей) 2) Win XP SP 3 Eng (англ + русские имена пользователей) 3) Win 7 RU (англ + русские имена пользователей) Везде отлично работает и нормально показывает права и без показывания окошка UAC. Ещё бы проверить при доменной системе.
2 gold-goblin ок. спс. просто необходимо очень знать как себя поведет этот метод на доменной системе. т.к. если залогинелся под доменным именем, то и спрашивать надо не локально а у сервера с AD (хотя могу и ошибаться)
ещё вариантов: 1) получить свой сид, сделать компаресид с администраторской группой 2) попробовать себе adjusttokenprivileges
function IsNTAdmin(dwReserved: dword; var lpdwReserved : dword): BOOL; external 'advpack.dll' name 'IsNTAdmin';
спс. в принципе норм за исключением того, что это недокументированная функция) но вроде как на висте ей нет. Также можно тогда заюзать и IsUserAnAdmin которая есть в висте, но в MSDN сказано что дальше функция может быть убрана. А NetUserGetInfo какраз обладает очень хорошей совместимостью