Q&A

  • 공유는 어떻게.....
안녕하세요 또 질문을 하게 되네요.

LAN에서 NT4.0을 쓰고있는데 공유를 만드는 방법 좀 가르켜 주세요...

(윈도우에서가 아니라 델파이에서 공유를 만드는 방법을 예기 하는 겁니다.)

아시는 분은 제발 좀알려주세요.....초보라서 상세하게.....

좋은 밤 되세요...





3  COMMENTS
  • Profile
    별지기 1999.06.29 01:42
    다른사람이 만든 프로그램을 실행시켜 보았습니다.

    그런데.....메뉴 화면에서 특졍 메뉴를 선택했을경우

    폼이 화면에 실행되어야하는데 그게 되지를 않습니다.

    메뉴폼의 해당 유닛의 소스를 자세히 살펴보앗는데..

    RunAppWinName,RunAppClassName,RunAppHandle,LockWindowUpdate

    의 못보던 변수(?)가 있었습니다.

    프로그램 실행장면을 좀더 자세히 설명하자면

    메뉴항목중 아래에 서브메뉴가 있는경우는 실행이 되지만

    서브메뉴가 없는경우는 폼이 실행이 되지를 않습니다..

    도와주십시요..



  • Profile
    김영대 1999.04.19 18:49
    장철진 wrote:

    > 안녕하세요 또 질문을 하게 되네요.

    > LAN에서 NT4.0을 쓰고있는데 공유를 만드는 방법 좀 가르켜 주세요...

    > (윈도우에서가 아니라 델파이에서 공유를 만드는 방법을 예기 하는 겁니다.)

    > 아시는 분은 제발 좀알려주세요.....초보라서 상세하게.....

    > 좋은 밤 되세요...

    >

    >



    안녕하세요 김영대입니다

    아래 예제는 Windows 95/98 에서만 정확히 동작합니다

    NT에서는 SVRAPI.DLL이 아닌 다른 DLL 이 사용되지만

    NetShareAdd(), NetShareDel() API의 사용함에 있어서 공유정보

    구조체만 다를뿐 사용법은 동일합니다



    // 아래 예제는 Windows NT/Windows 2000 는 지원하지 않습니다

    // 다른 플랫폼은 MSDN 사이트를 참고하세요

    // http://msdn.microsoft.com/library/sdkdoc/network/ntlmapi_18bz.htm



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    type

    // Win95/98 에서는 share info는 0,1,2,50 structure 만 사용가능

    Share_Info50 = packed record

    shi50_netname : array[0..12] of Char; {13}

    shi50_type : Byte;

    shi50_flags : Word;

    shi50_remark : PChar;

    shi50_path : PChar;

    shi50_rw_password : array[0..8] of Char; {9}

    shi50_ro_password : array[0..8] of Char;

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    function NetShareAdd(ServerName: PChar;

    ShareLevel: SmallInt;

    Buffer: Pointer;

    Size: Word): Integer; stdcall; external 'SVRAPI.DLL';



    function NetShareDel(ServerName: PChar;

    NetName: PChar;

    Reserved: Word): Integer; stdcall; external 'SVRAPI.DLL';



    function ShareResource(ServerName: PChar; FilePath: PChar;

    NetName: PChar; Remark: PChar;

    ShareType: Byte; Flags: Word;

    RWPass: PChar; ROPass: PChar): Integer;

    var

    MyShare: Share_Info50;

    PMyShare: ^Share_Info50;

    begin

    strLcopy(MyShare.shi50_netname, NetName, 13);

    MyShare.shi50_type := ShareType;

    MyShare.shi50_flags := Flags;

    MyShare.shi50_remark := Remark;

    MyShare.shi50_path := FilePath;

    strLcopy(MyShare.shi50_rw_password, RWPass, 9);

    strLcopy(MyShare.shi50_ro_password, ROPass, 9);

    PMyShare := @MyShare;

    Result := NetShareAdd(ServerName, 50, PMyShare, SizeOf(MyShare));

    end;



    function DeleteShare(ServerName: PChar; NetName: PChar): Integer;

    begin

    Result := NetShareDel(ServerName,NetName, 0);

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    rt: Integer;

    begin

    rt := ShareResource(nil, // 컴퓨터 이름 (nil 은 Local Machine을 의미합니다)

    'C:ZZZ', // 공유할 폴더 (전부 대문자로 지정)

    'ZZZ', // 공유이름

    '공유예제', // 설명

    0, // 0=디렉토리 공유, 1=프린터 공유

    // 256 or 1= 읽기 전용, 256 or 2=읽기/쓰기, 256 or 1 or 2=암호에 따라 다름

    256 or 1 or 2,

    '1111', // 읽기/쓰기 암호

    '2222'); // 읽기 전용 암호

    if rt = 0 then

    ShowMessage('폴더가 공유되었습니다')

    else

    ShowMessage('폴더를 공유할 수 없습니다. 에러번호('+IntToStr(rt)+')');

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    var

    rt: Integer;

    begin

    rt := DeleteShare(nil, 'ZZZ');

    if rt = 0 then

    ShowMessage('폴더의 공유를 해제하였습니다')

    else

    ShowMessage('폴더의 공유를 해제할 수 없습니다. 에러번호('+IntToStr(rt)+')');

    end;



    end.



  • Profile
    구창민 1999.04.18 02:26
    장철진 wrote:

    > 안녕하세요 또 질문을 하게 되네요.

    > LAN에서 NT4.0을 쓰고있는데 공유를 만드는 방법 좀 가르켜 주세요...

    > (윈도우에서가 아니라 델파이에서 공유를 만드는 방법을 예기 하는 겁니다.)

    > 아시는 분은 제발 좀알려주세요.....초보라서 상세하게.....

    > 좋은 밤 되세요...

    >

    >



    장철진님 안녕하세요?

    NT에서는 테스트 해보지 못했습니다.

    아래글은 김영대님이 올리신 글인데

    한번 테스트 해보세요. 되면 결과도 올려주시구요.

    그럼 .. 도움되시기 바래요.



    네트워크 드라이브 연결/해제

    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    // 네트워크 드라이브 연결

    procedure TForm1.Button1Click(Sender: TObject);

    var

    lpszNetPath,

    lpszPassword,

    lpszLocalName: array[0..50] of Char;

    rt: DWORD;

    begin

    StrPCopy(lpszPassword, '1234'); // 네트워크 드라이브(공유폴더)의 비밀번호

    StrPCopy(lpszNetPath, 'Unify5insa'); // 네트워크 드라이브+공유폴더

    StrPCopy(lpszLocalName, 'F:'); // 로컬 드라이브명



    rt := WNetAddConnection(lpszNetPath, lpszPassword, lpszLocalName);



    if rt = 7 then

    begin

    ShowMessage('네트워크 드라이브를 연결할 수 없습니다. 비밀번호를 확인하세요');

    end

    else if rt <> WN_SUCCESS then

    begin

    MessageDlg('네트워크 드라이브를 연결할 수 없습니다'+

    ', Return Code: ' + (IntToStr(rt)) ,

    mtInformation, [mbOk], 0);

    end

    else

    begin

    ShowMessage('네트워크 드라이브가 설정되었습니다');

    end;

    end;



    // 네트워크 드라이브 연결 해제

    procedure TForm1.Button2Click(Sender: TObject);

    var

    lpszLocalName: array[0..50] of Char;

    rt: DWORD;

    begin

    StrPCopy(lpszLocalName, 'F:'); // 로컬 드라이브명

    rt := WNetCancelConnection(lpszLocalName, True);



    if rt <> WN_SUCCESS then

    begin

    MessageDlg('네트워크 드라이브의 연결을 해제할 수 없습니다'+

    ', Return Code: ' + (IntToStr(rt)) ,

    mtInformation, [mbOk], 0);

    end

    else

    begin

    ShowMessage('네트워크 드라이브의 연결이 해제되었습니다');

    end;

    end;



    end.