определение имя пользвателя shellapi

 
0
 
Delphi, Kylix and Pascal
ava
snakaebaka | 20.02.2013, 16:10
Добрый день!

Совсем недавно начал изучать Delphi 7 , работаю админом в одной компании  имею права админа сети , поставлена задача расшарить рабочий стол определенных сотрудников , Ос на компах ХР и Win 7 на компьютере работает много пользователей под своими учетными записями ,  использую  ShellApi

код


shellexecute (0,nil, 'net' , ' 'share 123="c:\users\%Username%\Desktop\"--\\где юзер наме профиль пользователя  запустившего программу',nil,SW_HIDE);


тестировал на двух компах с разными ОС ХР и Win 7  ни в первом ни во втором случае рабочий стол пользователя запустившего программу не расшаривается  , если исправляю код где указываю вместо username логин то все работает , подскажите в чем может быть ошибка или помогите   каким способом указать программе расшарить рабочий стол именного того пользователя который запустил прогу

p.s  За ранние огромное спасибо
  
Ответы (11)
ava
kami | 20.02.2013, 17:51 #
Лучше получать папку рабочего стола средствами Винды:
SHGetFolderPath + CSIDL = CSIDL_DESKTOPDIRECTORY

И подставлять в shellexecute. Иначе можно "нарваться" на множество разных интересных штук, начиная с того, что винда может быть не на диске C.

Добавлено позднее:
например, так
(смотреть функцию GetSpecialFolderPath в Implementation)
ava
snakaebaka | 21.02.2013, 08:02 #
kami

Спасибо огромное !!!!!  Такой метод действительно удобней , а по поводу метки диска С или Д в компании все компы устанавливаются с меткой С т.к я сам это делаю=) , еще раз огромное Вам спасибо !
ava
snakaebaka | 21.02.2013, 11:26 #
kami

подскажи еще один момент если н есложно , т.к в делфи не очень силен , сокрее всего даже не силен очень +)
Нашел я путь до рабочего стола с верным логином как мне в shellexecute передать  путь ?


implementation

{$R *.dfm}
function GetMyDesktop : string;
var  SpecialDir: PItemIdList;
begin
SetLength(result, MAX_PATH);
SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, SpecialDir);
SHGetPathFromIDList(SpecialDir, PChar(Result));
SetLength(result, lStrLen(PChar(Result)));
      end;

  procedure TForm1.Button1Click(Sender: TObject);
begin
Shellexecute(0,nil,'net','share 666= GetMyDesktop 'nil,SW_HIDE);  \\ не могу понять как передать результат в шел экзекут ?
end;
ava
Чучмек | 21.02.2013, 11:36 #

Shellexecute(0,nil,'net','share 666= "'+GetMyDesktop+'"',nil,SW_HIDE)
ava
snakaebaka | 21.02.2013, 12:08 #
Чучмек

ругается

incompatible types : 'String' and 'PAnsiChar'
ava
Чучмек | 21.02.2013, 12:16 #

    
Shellexecute(0,nil,'net',PChar('share 666= "'+GetMyDesktop+'"'),nil,SW_HIDE);
ava
snakaebaka | 21.02.2013, 13:07 #
Цитата (Чучмек @ 21.2.2013,  12:16)

  

Shellexecute(0,nil,'net',PChar('share 666= "'+GetMyDesktop+'"'),nil,SW_HIDE);


Спасибо Огромное !!! все работает
ava
snakaebaka | 21.02.2013, 14:38 #
Цитата (Чучмек @ 21.2.2013,  12:16)

  

Shellexecute(0,nil,'net',PChar('share 666= "'+GetMyDesktop+'"'),nil,SW_HIDE);

   добавить к полученой папке рабочий стол папку test ?

Чучмек выручай )

у меня теперь еще одна проблема последняя буду очень очень признателен если подскажешь как мне теперь добавитьк полученой папке рабочего стола папку тест , чтобы расширивался не весь рабочий стол а только папка test ?  +GetMyDesktop+test'??? папку test я создал на всех компах на которых тестирую что бы получился путь C:\users\+GetMyDesktop+\test
ava
Чучмек | 21.02.2013, 15:46 #
Также.

PChar('share 666= "'+GetMyDesktop+'\test"')
 
ava
snakaebaka | 21.02.2013, 15:57 #
Цитата (Чучмек @ 21.2.2013,  15:46)
Также.



PChar('share 666= "'+GetMyDesktop+'\test"')


СПАСИБО ОГРОМНОЕ!!! спасибо спасибо спасибо , все заработало +)
ava
snakaebaka | 22.02.2013, 10:30 #
Чучмек,

Добрый день!

Прошу прощение за мою наглость , мне просто для себя  нужно понять , понимаю что много мануалов и есть гугл и подобные ресурсы , но меня интересует как передавать параметры в свой код

PChar('share 666= "'+GetMyDesktop+'\test"')
   если мне нужно из той же папки скопировать файл test.txt  как мне передать этот путь да и вообще не только копировать , это я как пример привел , просто не могу понять как передать путь после  +GetMyDesktop+  , \test\test.txt , для копирования  к примеру я пишу



copyFile ('c:\1.txt','d:\1.txt',true);

  с этим все понятно у меня с диска С копируется файл в диск Д , как мне таким же способом скопировать файл из директории которую я получил в предыдущем коде  +GetMyDesktop+'\test  в корень диска С ?


ВСЕМ ОГРОМНОЕ СПАСИБО , разобрался +)

copyFile (PChar ('GetMyDesktop+'\test\test.txt'),'d:\test.txt',true);



P.s какой же я тупой ) сразу не мог догодатся , спасибо большое Чучмек
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить