Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как открыть окно проводника, для рабочей группы? с помощью команды ShellExecute 
:(
    Опции темы
Bog d`An
Дата 14.1.2006, 04:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

Репутация: нет
Всего: 3



Название темы отражает её суть smile
Итак: можно ли это сделать? Если да то что передавать? Если нет, то как быть?
Зарание спасибо.
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
Snowy
Дата 16.1.2006, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата
Как открыть окно проводника, для рабочей группы?, с помощью команды ShellExecute

Вообще проводник запускается так же, как и все другие программы.
Код

var
  s: string;
begin
  s := GetEnvironmentVariable('windir') + '\explorer.exe';
  ShellExecute(0, 'Open', PChar(s), nil, nil, sw_show);
end;

Не ясно, что имеется ввиду под
Цитата
для рабочей группы

PM MAIL   Вверх
Alexeis
Дата 16.1.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Цитата

Не ясно, что имеется ввиду под
Цитата

для рабочей группы



Вероятно сетевое окружение


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Bog d`An
Дата 16.1.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

Репутация: нет
Всего: 3



Цитата(Snowy @ 16.1.2006, 10:38)
Цитата
Как открыть окно проводника, для рабочей группы?, с помощью команды ShellExecute

Вообще проводник запускается так же, как и все другие программы.
Код

var
  s: string;
begin
  s := GetEnvironmentVariable('windir') + '\explorer.exe';
  ShellExecute(0, 'Open', PChar(s), nil, nil, sw_show);
end;

Не ясно, что имеется ввиду под
Цитата
для рабочей группы

Даже проще - если передать какой-нибудь путь

Так вот нужно открыть именно сетевое окружение. Определённую рабочую группу.
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
SoWa
Дата 16.1.2006, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Вопрос: А как еще можно открыть приложение, кроме ShellExecute?


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
FRAGNATIC
Дата 16.1.2006, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



Цитата(SoWa @ 16.1.2006, 23:04 Найти цитируемый пост)

А как еще можно открыть приложение

WinExec
CreateProcess

PM MAIL   Вверх
Bog d`An
Дата 17.1.2006, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

Репутация: нет
Всего: 3



Ага, можно и так... а всё-таки, как открыть проводник к сетевому окружению?
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
FRAGNATIC
Дата 17.1.2006, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


Профиль
Группа: Участник
Сообщений: 901
Регистрация: 17.10.2004
Где: ICQ

Репутация: нет
Всего: 11



Bog d`An
попробовать не могу локалки нету)
но попробую открыть имено сам путь )
типа ShellExecute(0, 'Open', 'C:\', nil, nil, sw_show); откроет проводник и диск С )
попробую такимже оброзом путь к компу в сетке указть)

PM MAIL   Вверх
Snowy
Дата 17.1.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



С группой такой номер не пройдет. У них нет прямого пути.
К конкретному компьютеру в сети можно.
Хотя при желании и это можно победить.
Создаем локально линк на группу.
Этот линк засовываем в ресурс своей программы.
Из программы сохраняем линк на диск и запускаем.
PM MAIL   Вверх
Alexeis
Дата 17.1.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Пользователь может в окне проводника кликнуть по надписи сетевое окружение.
Может как-нибудь симулировать этот щелчок или что-то в этом роде smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Bog d`An
Дата 17.1.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

Репутация: нет
Всего: 3



Цитата(Snowy @ 17.1.2006, 14:26 Найти цитируемый пост)

Создаем локально линк на группу.

Вручную?
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
Snowy
Дата 17.1.2006, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(Bog d`An @ 17.1.2006, 23:02 Найти цитируемый пост)
Вручную?

Именно. Тащим линк на рабочий стол, а потом юзаем файлик.
PM MAIL   Вверх
Girder
Дата 18.1.2006, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Цитата(Snowy @ 17.1.2006, 23:14 Найти цитируемый пост)

Именно. Тащим линк на рабочий стол, а потом юзаем файлик.
А зачем?

Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
uses ShlObj,ActiveX,ShellApi;

const CSIDL_NETWORK = $0012;

var pidlItself:PItemIDList;

function CreatePIDL(Size: Integer): PItemIDList;
var
  Malloc: IMalloc;
begin
  SHGetMalloc(Malloc);

  Result := Malloc.Alloc(Size);
  if Assigned(Result) then
    FillChar(Result^, Size, 0);
end;

function NextPIDL(IDList: PItemIDList): PItemIDList;
begin
  Result := IDList;
  Inc(PChar(Result), IDList^.mkid.cb);
end;

function GetPIDLSize(IDList: PItemIDList): Integer;
begin
  Result := 0;
  if Assigned(IDList) then
  begin
    Result := SizeOf(IDList^.mkid.cb);
    while IDList^.mkid.cb <> 0 do
    begin
      Result := Result + IDList^.mkid.cb;
      IDList := NextPIDL(IDList);
    end;
  end;
end;

function ConcatPIDLs(IDList1, IDList2: PItemIDList): PItemIDList;
var
  cb1, cb2: Integer;
begin
  if Assigned(IDList1) then
    cb1 := GetPIDLSize(IDList1) - SizeOf(IDList1^.mkid.cb)
  else
    cb1 := 0;

  cb2 := GetPIDLSize(IDList2);

  Result := CreatePIDL(cb1 + cb2);
  if Assigned(Result) then
  begin
    if Assigned(IDList1) then
      CopyMemory(Result, IDList1, cb1);
    CopyMemory(PChar(Result) + cb1, IDList2, cb2);
  end;
end; 

function GetName(pidl:PItemIDList;const sr:STRRET):string;
var p:PChar;
begin
  Result:='';
  case sr.uType of
   STRRET_CSTR: Result:=sr.cStr;
   STRRET_WSTR: Result:=sr.pOleStr;
   STRRET_OFFSET: begin
                   p:[email protected][sr.uOffset-SizeOf(pidl.mkid.cb)];
                   SetString(Result,p,pidl.mkid.cb-sr.uOffset);
                  end;
   end;                  
end;

function OpenFolder(folder:IShellFolder; var Level:integer; const FF:String):Boolean;
var pidlChild:PItemIDList;
    Value:STRRET;
    Iterator:IEnumIDList;
    celtFetched:ULONG;
    child:IShellFolder;
    hr:HRESULT;
    M:IMAlloc;
    SEI:ShellExecuteInfo;
begin
 Result:=false;
 if (Level=0)or(trim(FF)='') then exit;
 hr:=folder.EnumObjects(0,SHCONTF_FOLDERS or SHCONTF_INCLUDEHIDDEN,Iterator);
 if Succeeded(hr) then
  try
   dec(Level);
   while true do
    begin
     hr:=Iterator.Next(1,pidlChild,celtFetched);
     if hr<>NOERROR then Break;
      try
       hr:=folder.GetDisplayNameOf(pidlChild,SHGDN_INFOLDER or SHGDN_INCLUDE_NONFILESYS,Value);
       if Succeeded(hr) then
        begin
         if AnsiCompareText(GetName(pidlChild,Value),FF)=0 then
          begin
           Form1.Caption:=GetName(pidlChild,Value);
           Result:=true;
           FillChar(SEI,SizeOf(SEI),#0);
           SEI.cbSize:=SizeOf(SEI);
           SEI.fMask:=SEE_MASK_IDLIST;
           SEI.lpVerb:='Open';
           SEI.nShow:=SW_NORMAL;
           SEI.lpIDList:=ConcatPIDLs(pidlItself,pidlChild);
           ShellExecuteEx(@SEI);
           SHGetMAlloc(M);
           M.Free(SEI.lpIDList);
           M:=nil;
           exit;
          end;
         SHGetMAlloc(M);
         M.Free(Value.pOleStr);
         M:=nil;
        end;
       hr:=folder.BindToObject(pidlChild,nil,IID_IShellFolder,Pointer(child));
       if Succeeded(hr) then
        try
         Result:=OpenFolder(child,Level,FF);
         if Result then exit;
        finally
         child:=nil;
        end;
      finally
       SHGetMAlloc(M);
       M.Free(pidlChild);
       M:=nil;
      end;
    end;
    inc(Level);
  finally
   Iterator:=nil;
  end;
end;


procedure GetFolderPath(nFolder:Integer);
var hr:HResult;
    M:IMAlloc;
    dISF,ISF:IShellFolder;
    r:Boolean;
    Level:integer;
begin
 CoInitializeEx(nil,COINIT_MULTITHREADED);
 if SHGetDesktopFolder(dISF)<>S_OK then exit;
 hr:=SHGetSpecialFolderLocation(0,nFolder,pidlItself);
 if Succeeded(hr)and(dISF.BindToObject(pidlItself,nil,IID_IShellFolder,Pointer(ISF))=S_OK) then
  begin
   Level:=4; //На всяк пожарный ограничиваем глубину погружения :)
   r:=OpenFolder(ISF,Level,'Microsoft Windows Network'); //Как пример открываем: Microsoft Windows Network
   if r then
    begin
     Form1.Caption:='+';
    end;
   SHGetMAlloc(M);
   M.Free(pidlItself);
   M:=nil;
   ISF:=nil;
  end;
 dISF:=nil;
 CoUninitialize;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 GetFolderPath(CSIDL_NETWORK); 
end;

end.

Добавлено @ 19:09
А если тебе просто открыть "сетевое окружение" то можно и так сделать:

Код
ShellExecute(handle, 'open', 'explorer' , '/e, /root, ::{208D2C60-3AEA-1069-A2D7-08002B30309D}', nil, SW_SHOWNORMAL);



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Bog d`An
Дата 19.1.2006, 04:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

Репутация: нет
Всего: 3



Girder, спасибо, сяду рабирать...
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.