network drive
2005.08.29 17:07
프로그램으로 네트워크 드라이브 연결/해제 | 델파이 2005/05/04 20:28
http://blog.naver.com/tonyup/80012576356
출처 : http://www.howto.pe.kr
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.
{
//**** Return value list
Value (Hex Value) Meaning
-----------------------------------------------------------------------
WN_SUCCESS (&H0) Function was successful.
WN_NOT_SUPPORTED (&H1) Function was not supported.
WN_OUT_OF_MEMORY (&HB) System was out of memory.
WN_NET_ERROR (&H2) An error occurred on the network.
WN_BAD_POINTER (&H4) Pointer was invalid.
WN_BAD_NETNAME (&H32) Network resource name was invalid.
WN_BAD_LOCALNAME (&H33) Local device name was invalid.
WN_BAD_PASSWORD (&H6) Password was invalid.
WN_ACCESS_DENIED (&H7) A security violation occurred.
WN_ALREADY_CONNECTED (&H34) Local device was already connected
to a remote resource.
}
http://blog.naver.com/tonyup/80012576356
출처 : http://www.howto.pe.kr
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.
{
//**** Return value list
Value (Hex Value) Meaning
-----------------------------------------------------------------------
WN_SUCCESS (&H0) Function was successful.
WN_NOT_SUPPORTED (&H1) Function was not supported.
WN_OUT_OF_MEMORY (&HB) System was out of memory.
WN_NET_ERROR (&H2) An error occurred on the network.
WN_BAD_POINTER (&H4) Pointer was invalid.
WN_BAD_NETNAME (&H32) Network resource name was invalid.
WN_BAD_LOCALNAME (&H33) Local device name was invalid.
WN_BAD_PASSWORD (&H6) Password was invalid.
WN_ACCESS_DENIED (&H7) A security violation occurred.
WN_ALREADY_CONNECTED (&H34) Local device was already connected
to a remote resource.
}
댓글 5
-
han
2005.08.29 17:18
http://www.codeguru.com/Cpp/I-N/network/basicnetworkoperations/article.php/c5429/ -
han
2005.08.29 17:18
-
han
2005.08.29 17:32
네트워크 드라이브 연결 설정 과 해지
프로그래밍을 하다 보면 사용자 PC에서 Network Drive를 연결 할 필요가 있다.
사용자에게 부팅시에 꼭 Network Drive를 설정 하라고 신신당부 해 놓지만 꼭 잊어 먹고 안된다고 전화오곤 한다.
지금은 바뀌었지만 전에 인사시스템에서 직원의 사진을 보여 주기 위해서 DB를 이용하지 않고, 그냥 Network Dirve를 연결 사용 하였던걸 기억해 보자.( 인사 시스템 사진 본적 없어 모른다고 하기 없기) 임원들과 몇몇 부서장을 위해 프로그램을 설치 해 드렸지만, 정작 사용시점에는 사진이 안나온다고 가끔씩 연락 오곤 했다. 원인은 한가지~~~~~
그런데 또 Netwotrk Drive를 사용할 일이 생겨 버렸다. 청약서를 스캐닝하여 보여 주고자 했는데, 이역시 HOST의 DB에 두자니 사용 빈도에 비하여 Disk Space낭비가 너무 심하였다. 그래서 HDD에 저장(4개의 HDD에 저장 되었다.)하고, 계약월도에 따라 적절한 드라이브를 선택하여 조회 할 수 있도록 프로그램 하였다. 그런데 연결 드라이브가 4개나 되어 사용자들에게 일일이 신신당부 하였지만 에고고고…(꼭 계속 속썩이는 사용자가 있다).
그래서 몇번의 도전 끝에 성공.
역시 WINAPI를 사용 해야겠다.
먼저 탐색기에서 보이는 “Netwotk환경”을 선택 하였을 때처럼 Dialog Box를 뜨게 할 수 있다.
WNetConnectionDialog( Handle, RESOURCETYPE_DISK );
단 한줄로 구현 끝.
그런데 이경우에는 연결 드라이브명을 미리 약속하고 있어야 하고, 프로그래머 마음대로 의 설정이 아니라, 사용자 마음대로의 설정이고, 매번 시작 할 때 Dailog Box가 뜨게 된다.
역시 좀 불편 해보인다.
프로그램으로 구현
a) 연결 설정
procedure Thes560of.Connect_Drive;
begin
StrPCopy(lpszPassword, 'img2f1'); // 네트워크 드라이브(공유폴더)의 비밀번호
StrPCopy(lpszNetPath, '\img2f'); // 네트워크 드라이브+공유폴더
StrPCopy(lpszLocalName, 'Z:'); // 로컬 드라이브명
rt := WNetAddConnection(lpszNetPath, lpszPassword, lpszLocalName);
if not ((rt = 0) or (rt = 85)) then
begin
MessageDlg('네트워크 드라이브를 연결할 수 없습니다'+', Return Code: ' +
(IntToStr(rt)) ,mtInformation, [mbOk], 0);
end;
// Err Message의 일부
// 7 : 비밀번호를 확인
// 85 : 이미 연결
end;
b) 연결
procedure Thes560of.DisConnect_Drive;
begin
StrPCopy(lpszLocalName, 'Z:'); // 로컬 드라이브명
rt := WNetCancelConnection(lpszLocalName, True);
if not((rt = 2250) or (rt = 0)) then
begin
MessageDlg('네트워크 드라이브의 연결을 해제할 수 없습니다'+',
Return Code: ' + (IntToStr(rt)) ,mtInformation, [mbOk], 0);
end;
end;
이렇게 구현하여 자~알 쓰고 있답니다.
-
han
2005.08.29 18:13
-
han
2005.08.29 18:13
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
784 | check your e-mail as a second address of hotmail [2] | YG | 2005.09.04 | 2263 |
783 | 무뎌진 마음 | WHRIA | 2005.09.04 | 2139 |
782 | 걱정 | WHRIA | 2005.09.04 | 2168 |
781 | 건담 SEED | WHRIA | 2005.09.04 | 2102 |
780 | 과거 현재 미래 | WHRIA | 2005.09.03 | 2139 |
779 | WhriaView 1.02 완성 | WHRIA | 2005.09.03 | 2156 |
778 | 야호 [1] | J | 2005.09.02 | 2122 |
777 | 요구르트... | han | 2005.09.02 | 2086 |
776 | 한글사용..과연 올바른가... | aris | 2005.09.01 | 2183 |
775 | 고독한 자기 개발의 삶 [1] | han | 2005.09.01 | 2285 |
774 | 잠 | han | 2005.08.31 | 2089 |
773 | 에너지 | w | 2005.08.30 | 2173 |
772 | sunscreen | han | 2005.08.29 | 2589 |
» | network drive [5] | han | 2005.08.29 | 2116 |
770 | 구글 얼쓰 [1] | han | 2005.08.29 | 2152 |