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


Автор: zhefran 21.8.2010, 15:25
Как узнать список активных подключений моего компьютера к другим в сети - имеется в виду к росшаренным папкам (аналог комманды в командной строке net use)?

Автор: Matematik 21.8.2010, 17:58
Посмотри тут http://msdn.microsoft.com/en-us/library/aa385391%28v=VS.85%29.aspx

Автор: zhefran 26.8.2010, 11:09
Цитата(Matematik @ 21.8.2010,  17:58)
Посмотри тут http://msdn.microsoft.com/en-us/library/aa385391%28v=VS.85%29.aspx


Я так понял мне нужна функция WNetOpenEnum. Только ко мне не доходит какими дожны быть в ней для моих целей параметры: dwScope и dwUsage.

Автор: Akella 28.8.2010, 12:40
http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=delphi+WNetOpenEnum

Автор: zhefran 30.8.2010, 12:47
Я подключался к компьютеру без захода в папку на удаленной машине, в связи с этим не отображались ресурсы к которым подключался при значении dwScope равно RESOURCE_CONNECTED.

П. С. При net use  в таких случаях отображается  \\IP\IPC$. В Delphi это можно как-то вытянуть?

Автор: cat512 30.8.2010, 14:14
Цитата(zhefran @ 30.8.2010,  12:47)
Я подключался к компьютеру без захода в папку на удаленной машине, в связи с этим не отображались ресурсы к которым подключался при значении dwScope равно RESOURCE_CONNECTED.

П. С. При net use  в таких случаях отображается  \\IP\IPC$. В Delphi это можно как-то вытянуть?

Да возьми заюзай Net.exe в дочернем процессе, а консольный вывод перенаправь в родительский процесс. И будет у тебя Net.exe завраплен
в гуи

Автор: zhefran 1.9.2010, 15:03
Цитата(cat512 @  30.8.2010,  14:14 Найти цитируемый пост)
Да возьми заюзай Net.exe в дочернем процессе, а консольный вывод перенаправь в родительский процесс. И будет у тебя Net.exe завраплен
в гуи 


Никогда такого не делал. Можешь скинуть пример или обьяснить как это делается? 

Автор: cat512 2.9.2010, 11:32
Цитата(zhefran @ 1.9.2010,  15:03)
Цитата(cat512 @  30.8.2010,  14:14 Найти цитируемый пост)
Да возьми заюзай Net.exe в дочернем процессе, а консольный вывод перенаправь в родительский процесс. И будет у тебя Net.exe завраплен
в гуи 


Никогда такого не делал. Можешь скинуть пример или обьяснить как это делается?

примерно так:
Код


uses

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure ExecConsoleApp(
  const ProcessName: string;
  const CommandLine: AnsiString;
  Errors: TStrings
  );
var
  sa: TSECURITYATTRIBUTES;
  si: TSTARTUPINFO;
  pi: TPROCESSINFORMATION;
  hPipeErrorsRead: THANDLE;
  hPipeErrorsWrite: THANDLE;
  Res, bTest: Boolean;
  szBuffer: array[0..256] of Char;
  dwNumberOfBytesRead: DWORD;
  Stream: TMemoryStream;
begin
  sa.nLength := sizeof(sa);
  sa.bInheritHandle := True;
  sa.lpSecurityDescriptor := nil;
  CreatePipe(hPipeErrorsRead, hPipeErrorsWrite, @sa, 0);
  ZeroMemory(@si, SizeOf(si));
  ZeroMemory(@pi, SizeOf(pi));
  si.cb := SizeOf(si);
  si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
  si.wShowWindow := SW_HIDE;
  si.hStdInput := 0;
  si.hStdOutput := hPipeErrorsWrite;
  si.hStdError := 0;

  Res := CreateProcess(PChar(ProcessName), pchar(CommandLine), nil, nil, true,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi);

  if not Res then
  begin
    CloseHandle(hPipeErrorsRead);
    CloseHandle(hPipeErrorsWrite);
    Exit;
  end;
  CloseHandle(hPipeErrorsWrite);

  Stream := TMemoryStream.Create;
  try
    while true do
    begin
      bTest := ReadFile(hPipeErrorsRead, szBuffer, 256, dwNumberOfBytesRead,
        nil);
      if not bTest then
      begin
        break;
      end;
      Stream.Write(szBuffer, dwNumberOfBytesRead);
    end;
    Stream.Position := 0;
    Errors.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;

  WaitForSingleObject(pi.hProcess, INFINITE);
  CloseHandle(pi.hProcess);
  CloseHandle(hPipeErrorsRead);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  ServerName: string;
  RootDir: string;
  Password: string;
  User: string;

const
  AppName = 'C:\windows\system32\net.exe';
begin
  ExecConsoleApp(
    AppName,
//Собственно команды которые должны использ.
      Edit1.Text,
    Memo1.Lines
    );


end;

end.

Только надо строку сконвертить из Dos-овской кодировки в Win-довую

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