본문 바로가기

Delphi/꿀팁

네트워크 내 공유폴더에 접속하기

공유폴더에 접속하기

procedure SharedFolderConnect;

var

  sFolderPath : string;


  function UseConnection(const aDomain, aUserID, aPassWord: string): Integer;

  var

    NetResource : TNetResource;

    wResult : Integer;

    pcRemotePath, pcUserID, pcPassword : pChar;

  begin

    Result := -1;


    GetMem(pcRemotePath, Length(aDomain) + 1);

    GetMem(pcUserID, Length(aUserID) + 1);

    GetMem(pcPassword, Length(aPassWord) + 1);


    StrPCopy(pcRemotePath, aDomain);

    StrPCopy(pcUserID, aUserID);

    StrPCopy(pcPassword, aPassWord);


    try

      NetResource.dwScope := RESOURCE_GLOBALNET;

      NetResource.dwType := RESOURCETYPE_DISK;

      NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SHARE;

      NetResource.dwUsage := RESOURCEUSAGE_CONNECTABLE;

      NetResource.lpLocalName := '';

      NetResource.lpRemoteName := pcRemotePath;

      NetResource.lpComment := '';

      NetResource.lpProvider := '';


      Result := WNetAddConnection2(NetResource, pcPassword, pcUserID, CONNECT_INTERACTIVE);

    finally

      FreeMem(pcRemotePath);

      FreeMem(pcUserID);

      FreeMem(pcPassword);

    end;

  end;

begin

  sFolderPath := '\\127.0.0.1\Folder';  //접속하려는 폴더의 주소


  if not DirectoryExists(sFolderPath) then  //권한이 필요 없을 경우엔 폴더를 확인할 수 있습니다.

  begin 

    //권한이 필요할 경우엔 접속하려는 폴더의 사용자계정 정보를 입력합니다.

    if (UseConnection(sFolderPath, '사용자계정 ID', '사용자계정 PW') > 0) then

      ShowMessage('접속 성공');

    else

      ShowMessage('접속 실패');

  end

  else

    ShowMessage('접속 성공');

end;

NetResorce 참조 -> https://docs.microsoft.com/ko-kr/windows/win32/api/winnetwk/nf-winnetwk-wnetopenenuma?redirectedfrom=MSDN

반응형