Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > определение имя пользвателя shellapi


Автор: snakaebaka 20.2.2013, 15:10
Добрый день!

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

код 

Код

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


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

p.s  За ранние огромное спасибо 
  

Автор: kami 20.2.2013, 17:51
Лучше получать папку рабочего стола средствами Винды:
http://ttp://msdn.microsoft.com/ru-ru/library/windows/desktop/bb762181(v=vs.85).aspx + http://msdn.microsoft.com/ru-ru/library/windows/desktop/bb762494(v=vs.85).aspx = CSIDL_DESKTOPDIRECTORY

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

Добавлено @ 17:54
http://www.delphisources.ru/forum/showthread.php?t=5362
(смотреть функцию GetSpecialFolderPath в Implementation)

Автор: snakaebaka 21.2.2013, 08:02
kami

Спасибо огромное !!!!!  Такой метод действительно удобней , а по поводу метки диска С или Д в компании все компы устанавливаются с меткой С т.к я сам это делаю=) , еще раз огромное Вам спасибо !

Автор: snakaebaka 21.2.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;

Автор: Чучмек 21.2.2013, 11:36
Код

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

Автор: snakaebaka 21.2.2013, 12:08
Чучмек

ругается 

incompatible types : 'String' and 'PAnsiChar'

Автор: Чучмек 21.2.2013, 12:16
Код

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

Автор: snakaebaka 21.2.2013, 13:07
Цитата(Чучмек @ 21.2.2013,  12:16)
Код

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

Спасибо Огромное !!! все работает

Автор: snakaebaka 21.2.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

Автор: Чучмек 21.2.2013, 15:46
Также.
Код

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

Автор: snakaebaka 21.2.2013, 15:57
Цитата(Чучмек @ 21.2.2013,  15:46)
Также.
Код

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

СПАСИБО ОГРОМНОЕ!!! спасибо спасибо спасибо , все заработало +)

Автор: snakaebaka 22.2.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 какой же я тупой ) сразу не мог догодатся , спасибо большое Чучмек

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)