반응형
안녕하세요
코딩하는남자 코딩연습생입니다
저번 PPT 슬라이드 실행과 연계해서 네트워크 공유 폴더의 파일을 C#에서 Soket으로 접속하여 실행되도록
구현하는 방법을 이번에 설명을 해볼까 합니다
C#으로 PPT슬라이드로 파일 실행하기는 아래 링크로 확인하시면 됩니다
https://codingman.tistory.com/37
그럼 다시 본론으로 돌아와서 당연히 네트워크 공유 폴더에 접근 할려면 Soket부터 구현을 해야 겠죠?
[Source Code]
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
다음 3개의 using문을 선언해 줍니다.
다음은 네트워크 접속시 인증과 윈도우 인증을 위한 구문 입니다
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct NETRESOURCE
{
public uint dwScope;
public uint dwType;
public uint dwDisplayType;
public uint dwUsage;
public string lpLocalName;
public string lpRemoteName;
public string lpComment;
public string lpProvider;
}
// API 함수 선언
[DllImport("mpr.dll", CharSet = CharSet.Auto)]
public static extern int WNetUseConnection(
IntPtr hwndOwner,
[MarshalAs(UnmanagedType.Struct)] ref NETRESOURCE lpNetResource,
string lpPassword,
string lpUserID,
uint dwFlags,
StringBuilder lpAccessName,
ref int lpBufferSize,
out uint lpResult);
// API 함수 선언 (공유해제)
[DllImport("mpr.dll", EntryPoint = "WNetCancelConnection2", CharSet = CharSet.Auto)]
public static extern int WNetCancelConnection2A(string lpName, int dwFlags, int fForce);
//PPT 함수 선언
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindow(IntPtr ZeroOnly, string lpWindowName);
//PPT 함수 선언
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
//PPT 함수 선언
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool SetWindowText(IntPtr hwnd, String lpString);
[DllImport("user32")]
private static extern bool SetForegroundWindow(IntPtr handle);
[DllImport("User32")]
private static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
private string FileName = "";
이렇게 구조체와 Dll파일을 Import 시켜줍니다
이제 준비가 되었으면 공유 폴더에 접속을 해야겠죠?
public int ConnectRemoteServer(string server)
{
int capacity = 64;
uint resultFlags = 0;
uint flags = 0;
System.Text.StringBuilder sb = new System.Text.StringBuilder(capacity);
NETRESOURCE ns = new NETRESOURCE();
ns.dwType = 1; // 공유 디스크
ns.lpLocalName = null; // 로컬 드라이브 지정하지 않음
ns.lpRemoteName = server;
ns.lpProvider = null;
int result = 0;
if (server == @"\\아이피주소\폴더명$")
{
result = WNetUseConnection(IntPtr.Zero, ref ns, "공유폴더접속암호", "폴더이름", flags,
sb, ref capacity, out resultFlags);
}
else
{
result = WNetUseConnection(IntPtr.Zero, ref ns, "공유폴더접속암호", "폴더이름", flags, sb, ref capacity, out resultFlags);
}
return result;
}
이제는 반대로 접속을 했다면 반대로 해제도 해야겠죠?
public void CencelRemoteServer(string server)
{
WNetCancelConnection2A(server, 1, 0);
}
이제 버튼을 통해 공유 폴더에 접근하는 구문입니다
ConnectRemoteServer(@"\\아이피주소\폴더이름");
그 다음 저의 경우 공유폴더에 있는 ppt파일을 실행 시키도록 구현했는데요
위의 ppt만들기 링크와 이어져 있습니다
FileName = @"\\아이피번호\폴더이름\파일이름.PPT";
PowerPoint.Application pptapp = new PowerPoint.Application();
pptapp.Visible = MsoTriState.msoCTrue;
PowerPoint.Presentation pptPres = pptapp.Presentations.Open(FileName, MsoTriState.msoCTrue, MsoTriState.msoCTrue, MsoTriState.msoCTrue);
PowerPoint.SlideShowWindow slideWindow = pptPres.SlideShowSettings.Run();
이렇게 하시면 공유폴더에 있는 특정 파일을 바로 파워포인트 슬라이드 모드로 실행이 됩니다
전에 글쓴 C#으로 파워포인트 슬라이드 실행하기와 이어서 같이 사용하시면
공유폴더에 있는 파일을 바로 파워포인트 슬라이드로 실행하는게 완성됩니다
반응형
'코딩정보 > C#' 카테고리의 다른 글
[C#] 텔레그램 API를 이용한 메세지 보내기 (0) | 2019.12.16 |
---|---|
[C#] 카카오 PC 대화창을 이용해 메세지 보내기 (0) | 2019.12.16 |
[C#]파워포인트 슬라이드 구현하기 (0) | 2019.12.13 |
[C#] ClickOnce를 이용한 배포하기 (2) | 2019.12.13 |
[C#] Soket 통신으로 RFID 연결하기 #2 (0) | 2019.12.13 |