ASP.NET 페이지 라이프 사이클
http://msdn.microsoft.com/en-us/library/ms178472.aspx

전체화면 (Application.Current.Host.Content.IsFullScreen = true;) 에서는 보안의 이유로 키보드 사용을 제한 하고 있다. 참고해 봅시다~
---이 키만 사용 가능---
ESC
space
arrow keys
tab
home
enter
end
pageup/pagedown
-----------------------
출처 :
http://silverlight.net/blogs/msnow/archive/2008/09/04/silverlight-tip-of-the-day-35-full-screen-mode-implementation.aspx
1. Visual Studio 2008 실행한다. (VS 2005도 특별히 틀릴것 같진 않다.)
2. 프로젝트를 열거나 생성한다. (C#.NET 프로젝트(클래스라이브러리 또는 응용프로그램 등등)
3. 아래 참조 추가를 한다. (아마 오피스가 설치되어있어야 할것 같다.)
ApplicationClass app = new ApplicationClass();
Presentation ppt = app.Presentations.Open(open.FileName, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
for (int i = 0; i < ppt.Slides.Count; ++i)
{
ppt.Slides[i + 1].Export(@"E:\Test\VS2008\Winform\TestPPT\TestPPT\bin\Debug\" + i + ".png", "PNG", (int)ppt.Slides[i + 1].Master.Width, (int)ppt.Slides[i + 1].Master.Height);
}
ppt.Close();
app.Quit();
}
System.Net 네임스페이스를 통해서 단순히 소켓프로그래밍(TCP통신, UDP통신)만 하는것이 아니다.
여러가지 많은 것을 할 수 있는데.. System.Net.NetworkInformation.Ping에 대해 알아보겠다.
보통 cmd창에서 아래와 같이 해본사람이 많을 것이다.
c:\> ping 127.0.0.1 (엔터)
이런 작업을 C#.NET 코드로 구현이 매우 쉽게 가능했다. 아래 샘플 코드만으로도 쉽게 이해할 수 있으리라 생각한다.
Ping.Send 함수는 overloading이 많은데 자세한 내용은 아래 링크를 참고하면 되겠다.
-> http://msdn.microsoft.com/ko-kr/library/7hzczzed.aspx
참고로 무조건 timeout이 발생하는 hostname이 있을 수 있다. (예:www.daum.net, www.naver.com 등)
이것은 아마도 네트워크 관리자(?)가 해당 서버로 ping요청이 허용되지 않도록 막았을 가능성이 매우 크다.
-------------------------------------- 샘플코드 --------------------------------------
System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingReply reply = p.Send("127.0.0.1"); // www.contoso.com
MessageBox.Show(reply.Status.ToString() + "//" + reply.RoundtripTime.ToString());
--------------------------------------------------------------------------------------
09.03.19
오늘도 출근길 전철에서 있었던 일이다.
오늘은 그 전처럼 사람들이 붐비지 않았다.
역시나 오늘도 의정부역에서 출발하는 전철을 타게되었다.
시발(욕아님)하는 열차라 자리에 앉아 잠을 청했다.
목적지에 점점 다가오는 기분에 눈을 떴다.
뭔가 클로즈업이 되었다.
앞에 서 있는 아가씨가 남대문, 아니 여대문(?)을 버젓이 열어 놓고 계신게 아닌가..
(다행히 속옷은 보이지 않았다~ 왜 아쉬워?)
그 졸린 상태에서도 난 생각했다.
생각1 - 저기요.. 거기열렸어요?라고 말한다.
생각2 - 핸폰문자를입력하여핸폰을보여준다.
생각3 - 일행이 있어보여 내릴때 그 사람에게 대신 말한다.
근데 그 생각의 갈등을 뒤로하고 다시 자버렸다. ㅋㅋ
사실 말하기도 뻘쭘하고 변x로 오해를 살 수 있어서.. 우헤~
내릴 역에 도착할 때쯤 다시 눈을 뜨니 그녀는 이미 사라진 상태였다.
과연 그녀는 어디로 갔을까? 안타까울 따름이다.ㅋㅋ
Silverlight를 ControlTemplate와 DataTemplate 를 접했다.
자주 접한 것 같지만 이 녀석들은 내겐 참 헷갈린다. (곧 잡아 먹어주겠다~ 흐흐흐)
이번 블로깅을 통해 조금이나마 개념 파악을 위해 DataTemplate를 정리해 보고자 한다.
그중 가장 흔하게 접하는 것이 ListBox 컨트롤의 ListBoxItem일 것이다.
이 ListBoxItem을 XAML 코드를 보면서 이해해 보고자 한다.
ListBoxItem을 다른 형태로 출력하는 방법은 아래 2가지가 있다.
(사실 아마 더 있을지도 모른다. 지금 개념파악을 위해 정리하는 것이므로 더 있으면 추가하도록 할 것이다.)
--------------------------------코드보기-----------------------------------
1) Inline 방법
<UserControl ...>
<ListBox x:Name="MyBooks" Margin="5" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Birthday}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</UserControl>
--------------------------------------------------------------------------------
2) Resource 방법
<UserControl ...>
<UserControl.Resources>
<DataTemplate x:Key="DataTemplate1">
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="{Binding Birthday}" />
</StackPanel>
</DataTemplate>
</UserControl.Resources>
...
<ListBox ItemTemplate="{StaticResource DataTemplate1}" x:Name="listboxMediaList" Margin="5,3,5,5" Grid.Row="1" />
...
</UserControl>
09.03.12
오늘 출근길에 있었던 일이었다.
전철에 앉아서 졸고있던 나는 앞에 서있던 사람이 신문으로 머리를 빗어주고 있었다.
그리고 다른 앞사람이 그사람 무릎이 내 무릎을 차고 있었다.
왠만하면 깨지 않으려 노력했으나 못 참고 깨어날 수 밖에 없었다.
눈을 떠보니 평소와 다르게 사람이 엄청 많았다.
'아니 뭐야. 왜 이렇게 인간들이 많아?'라는 생각과 함께 졸린 눈을 비비며 정신을 좀 차려볼까 해서 눈에 힘을 주고 있었다.
그때 신설동역에 정차하여 문이 열리자마자 사람들이 우루루~ 내리는 것이 아닌가...
그 인파 사이에 끼어 있던 아가씨가 휩쓸려 가지 않으려 봉을 잡고 버티고 있었다.
표정에선 인내와 고통을 참고 있어 보였다.
결국 못참겠다 싶었는지 한마디를 내 뱉었다..
'씨바~ㄹ'
듣자마자 쫄았다.. ㅋㅋ
그 말을 들으니 난,
그 아가씨가 은근히 카리스마 있어보였고, 멋져보였고, 알흠다워 보였을리 없었다.
오히려 성인이 된 그 아가씨의 입에서 그런 말이 나왔다는 것에 대해 아쉬움만 남았다.
왠지 내가 저기에 서있었으면 나도 저런 말이 나왔을까 생각을 해보게 된다.
(나 또한 욕쟁이 이므로....)
하나의 팁쯤이라고 생각해도 될 듯 하다.
.NET 에서 자바스크립트에서 사용되는 escape와 같은 함수를 사용하고 싶을때가 혹시라도 있을 것이다.
그럴 경우 난 System.Web.HttpUtility.UrlEncode를 사용하면 되는줄 알았다.
하지만 변환되는 형식이 당연히 틀렸다. (사실 틀릴줄은 알았지만 뭐 그냥 써도 되는줄로 알고 었었을 뿐이다.)
그런데 구글링을 통해서 알아낸 사실은 따로 escape와 같은 역할을 하는 클래스가 존재한다는 것이었다.
그 방법은 아래와 같다.
1. Microsoft.JScript 어셈블리를 참조한다.
2.
escape => Microsoft.JScript.GlobalObject.escape("바꿀 문자열");
unescape => Microsoft.JScript.GlobalObject.unescape("바꿀 문자열");
이외에도 Microsoft.JScript.GlobalObject 클래스의 멤버가 여러가지 있으니 나중에 자바스크립트 관련된 일이 있으면
이 클래스를 우선 참고할 필요가 있겠다.
ps. 참 쉽죠 잉~?
IE를 띄우려면 2가지 방법이 있다.
Process 클래스를 이용한 방법과 System32폴더에 존재하는 SHDocVw.dll을 참조해서 사용하는 것이다.
첫째 Process 클래스를 이용한 방법을 알아보자.
오나전 쉽다. 아래 코드를 보면 이해가 될 것이다.
여기서 Process 클래스의 WaitForExit(); 함수를 호출하면 Modal형태로 띄울 수 있게된다.
------------------------------------------------------------------------------------------------------------
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
startInfo.Arguments = "http://www.naver.com";
Process browser = new Process();
browser.StartInfo = startInfo;
browser.Start();
browser.WaitForExit();
}
------------------------------------------------------------------------------------------------------------
둘째 SHDocVw.dll를 참조한 방법을 살펴보자.
1. System32 폴더에서 SHDocVw.dll를 찾아 참조를 한다.
2. 그리고 아래 샘플 코드를 보면 이해가 될 것이라 생각한다.
- (예1) 브라우저로 창을 띄움
------------------------------------------------------------------------------------------------------------
object vPost, vHeaders, vFlags, vTargetFrame, vUrl;
string cPostData;
vFlags = null;
vTargetFrame = null;
vUrl = "http://localhost/testpage.asp";
vHeaders = "Content-Type: application/x-www-form-urlencoded" + Convert.ToChar(10) + Convert.ToChar(13);
cPostData = "test1=1&test2=2&test3=3";
vPost = ASCIIEncoding.ASCII.GetBytes(cPostData);
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
ie.Visible = true;
ie.Navigate2(ref vUrl, ref vFlags, ref vTargetFrame, ref vPost, ref vHeaders);
------------------------------------------------------------------------------------------------------------
- (예2) 팝업(팝업형태의브라우저)으로 창을 띄움
a. 빨갛게 되어있는 소스만 틀리므로 그부분을 참고한다.
b. SHDocVw.IWebBrowserApp 속성은 더 있는데 어떻게 써야할지는 아직 잘 모르겠다~ (모르면 구글링을 해보세요)
------------------------------------------------------------------------------------------------------------
object vPost, vHeaders, vFlags, vTargetFrame, vUrl;
string cPostData;
vFlags = null;
vTargetFrame = null;
vUrl = "http://localhost/testpage.asp";
vHeaders = "Content-Type: application/x-www-form-urlencoded" + Convert.ToChar(10) + Convert.ToChar(13);
cPostData = "test1=1&test2=2&test3=3";
vPost = ASCIIEncoding.ASCII.GetBytes(cPostData);
SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
SHDocVw.IWebBrowserApp WebBro = (SHDocVw.IWebBrowserApp)ie;
WebBro.Height = 500; // 세로 길이
WebBro.Width = 500; // 가로 길이
WebBro.ToolBar = 0;
WebBro.Visible = true;
WebBro.Navigate(vUrl.ToString(), ref vFlags, ref vTargetFrame, ref vPost, ref vHeaders);
------------------------------------------------------------------------------------------------------------
아무튼 위와 같은 코드를 통해 IE를 띄울 수 있으며
Process에서는 MainWindowHandle 가지고 있고 SHDocVw.InternetExplorer 클래스 또한 HWND라는 속성이 있으므로
각 속성들을 통해 프로세스를 주무를 수 있지 않을까 싶다. (안되면 뭐 말고~)