출처 : http://tarotcrd.tistory.com/154

위의 출처에서 해당 글의 내용을 보고 참 도움을 많이 받기는 했는데, 가독성이 떨어지는데다, 해당 소스 부분을 직접 긁어 코드화 시킬 수 없어서 여기에 다시 정리해서 올린다.

Winform-WebBrowser Control을 이용하면, 웹의 내용을 그대로 띄울 수 있다.
그래서 WinForm과는 다른 유연하게 제공되는 표(Table)을 표현 할 수 있고, 각종 Form을 구성할 수도 있다.

그런데, 이런 웹 기반의 프로그램을 이런 저런 구성하다가 보면, 웹의 내용을 표출하는 것 뿐만 아니라, 웹에서 입력된 각종 값들을 WinForm에서 활용하고 싶을 때가 있다. 이 경우 Javascript를 통해 웹 상의 정보를 읽는 것은 가능한데, 이 정보를 WinForm에 어떻게 전달할까?

역으로, WinForm에서 특정 작업을 수행했는데, 이 정보를 WebBrowser Control을 통해 웹 상에 전달 하고 싶을 때는 어떻게 할까?

위의 질문에 대한 답을 아래에 제시할 수 있다.

Web(Javascript) –> WinForm(Webbrowser Control)

맨 먼저 할 작업은 웹에서 제공되는 정보를 winform에서 받아서 처리하는 방법이다.

웹에서 먼저 javascript를 구성하도록 한다.

<html>
<head>
	<title>Test Page</title>
	<script type="text/javascript">
		function submitToForm()
		{
			var textboxvalue = document.getElementById('text1').value;
			window.external.CallForm(textboxvalue);
		}
	</script>
</head>
<body>
	<form>
		<input type="text" id="text1" name="text1"></input>
		<input type="button" id="btn1" name="btn1" value="submit" onclick="submitToForm()"></input>
	</form>
</body>
</html>

HTML 소스 중, Javascript만 보면, 다음과 같은 코드가 있다.

window.external.CallForm(textboxvalue);

바로 window.external 부분이 핵심인데, window.external까지 쓰고, 그 뒤에 C# Winform 상에서 실행할 함수 명과, 값을 넘겨줄 때 사용할 파라미터를 건네면 된다.

이제 웹브라우저 컨트롤을 Windows Form에 넣고 다음과 같이 코드를 수정하도록 한다.

TestApp 라는 솔루션 내에 Form1이라는 Winform을 하나 생성한 뒤에, 디자이너 화면에서 webbrowser 컨트롤을 폼에다 넣으면 된다. 자동적으로 webBrowser1 이라는 변수가 생성이 된다.




자 이제 소스 부분을 열도록 한다. 그리고 using을 사용해서 다음 두개의 네임스페이스를 추가한다.

using System.Security.Permissions;
using System.Runtime.InteropServices;

Form1에서 Form Load 이벤트 핸들러를 생성한다. (Form1_Load 함수가 자동으로 생성된다.). 그리고 그 안에 다음과 같은 속성을 설정하도록 한다.

webBrowser1.ObjectForScripting = true;

이제 javascript에서 호출받을 함수를 만든다. 위의 Javascript에서 CallForm 이라고 만들었으므로, 여기서도 CallForm이라는 이름의 함수를 새로 만들어 추가하면 된다.외부에서 노출되어야 되기 때문에, 반드시 public으로 만들어야 하며, 파라미터가 있을 시에는 파라미터 갯수만큼 object로 변수를 만든다.

public void CallForm(object msg)
{
	string sMsg = (string)msg;
	{
		// 받은 msg 값을 가지고 처리하는 로직.
	}
}

사실 Javascript에서는 데이터 형(문자열, 숫자, 날짜 등등)에 관계 없이 무조건 쓸 수 있지만, C#에서는 그 형이 정해져야 한다. 그렇다고, Javascript에서 맞춰줄 수는 없다. 방법은 Javascript에서 파라미터를 받을 때, object로 받아, 그 값의 형에 따라 캐스팅을 하는 방법을 제시한다.

위의 수정 내용을 다 합친 코드는 아래와 같다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Permissions;
using System.Runtime.InteropServices;

namespace TestApp
{
    [PermissionSet(SecurityAction.Demand, Name="FullTrust")]
    [ComVisible(true)]
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.ObjectForScripting = true;
        }

        public void CallForm(object msg)
        {
            string sMsg = (string)msg;
            {
                // 받은 msg 값을 가지고 처리하는 로직.

            }
        }
    }

WinForm –> Web(Javascript)

이제 역으로 WinForm에서 webBrowser 컨트롤 내에 띄워진 Javascript를 실행하는 방법을 제시한다.
이 부분은 앞서 설명한 방법과는 다르게 webControl에게 시키기만 하면 된다.

먼저 Winform에서는 다음과 같은 코드를 작성한다.

private void ExecJavascript(string sValue1, string sValue2)
{
	try
	{
		webBrowser1.Document.InvokeScript("CallScript", new object[] { sValue1, sValue2 });
	}
	catch
	{
        }
}

보면 Javascript를 부를 때, Document.InvokeScript를 사용한다는 것을 쉽게 알 수 있다. 해당 함수의 첫번째 파라미터에는 호출 할 Javascript의 함수 이름을 넣고, 두 번째에는 object 배열로 해서 파라미터를 넘기면 된다. ( c#의 invoke를 사용해 본적이 많으면 쉽다.) 만일 파라미터가 여러 개인 경우에는 갯수에 맞게 개수를 늘려 배열로 생성해주면 된다.

자 이제 javascript 부분을 살펴보자. 다른 HTML 부분은 필요없고, script 섹션 내에 위의 설정한 “CallScript”라는 함수를 생성해주면 된다.

function CallScrript(va1, va2)
{
	alert('Val1 : ' + val1 + " / Val2 : ' + val2);
}

이제 WinForm에서 webbrowser1.Document.InvokeScript를 실행하면, webBrowser 컨트롤 내의 HTML Script가 실행 됩니다.

 

정리

Javascript –> WinForm을 호출하는 방식은 Javascript에서 ActiveX 를 호출하는 것과 비슷하다. 보안적인 이슈만 없다면, HtML 위에 작성된 javscript 호출하는 것 역시 간단하다.사실 webBrowser 컨트롤이 WinForm과 거의 한몸이기 때문에 이런 방식이 가능하다. 

스스로 예제를 작성해서 구성해 보면 좀 더 확실하게 이해 할 수 있을 것이다. 

728x90

램 팝니다. 

이번에는 집에 묵혀져 있던 램들을 모두 처분합니다.

노트북용 

PC3-8500S 1G * 2

PC2-6400S 1G

PC2-5300S 1G * 2


데스크톱용

PC2-4200U 512M * 2

PC-3200U 1G

PC-2100U 256M * 2


문제는 램 중에서 노트북 램들은 테스트가 되었는데,

데스크톱 램은 테스트를 전혀 안해서... 사실 그냥 덤에 가까운 램들입니다.













728x90

X360을 판매합니다.

아주 오래된 제품입니다.


판매대상은, 

본체(내부 120G 하드 포함) + 아답터

패드 2개 ( 충전기는 달려 있는데, 의미 없습니다.)

VGA 케이블

랜케이블


필요하신 분은 인터넷 공유기(Level One 10/100짜리 유선 공유기)를 같이 드립니다.















728x90

종료!

 

스트라이다 판매 완료되었으므로, 이번에는 PSP를 판다.

역시 클리앙에 판다.

UMD : DJMAX 2, DJMAX Clazziquai, DJMAX Black Squre, 진삼국무쌍(케이스 메뉴얼 없음)

본체

로지텍 암 케이스

아답터

밧데리

4G 메모리

32M 메모리


사설 AS 받은 적있습니다. 아날로그 키가 작동하지 않는 문제가 발생해서, 수리를 했습니다.


>


>>>

>


···






728x90

거래완료!


가격은 18만원...

클리앙에서 팝니다.

5.1 버전입니다.

















728x90

요즘 응용 프로그램을 만들면서, 이런 저런 배포 방법을 고민하다가,
한동안 등한시 했던 ClickOnce를 보았다.
일단 빌드 서버 없이, 웹 서버만 있으면 빌드에서 배포까지 다 되니 생각보다 편하다고 생각했다.

그런데, 오늘 내 태블릿 PC에다 내가 만든 메모 프로그램을 설치해서 사용하려는데, 실행이 안된다.
물론 보안적인 이슈로 인해 MS에서도 더 이상의 기술지원은 없다는 풍문을 듣기는 했지만, 이렇게 단칼에 거부될 줄은… 사실 구글 크롬도 ClickOnce 기술로 배포되고 있다고 알고 있다.

일단 Google과 같은데서는 잘 되는게, 내 쪽에 안되는 이유를 굳이 들자면, 응용프로그램 인증서가 없어서다. 배포자의 이름이 Unknown이니 배포시 악의적인 배포자인지 여부 때문에, 결국 실행이 안되는 문제다.

물론 편법으로 실행가능하게 하는 방법이 있긴 하지만, 이것은 역시 방법이 아닌 것 같다.

(사실 정식 인증서를 만들고 싶어도, 돈이 없어서 –_-;;; 파는 것도 아닌 것에 매년 돈 내가면서 제공할 의무는 없지 않은가?? )

나중에 시간될 때 다시 빌드서버나 구성해서, 자동으로 배포본 까지 만들 수 있도록 해야겠다.

이렇게 날 당황하게 만들 줄은 몰랐다…

728x90

지금 Esxi 서버를 돌리고 있다.
그 중, 가장 중요한 데이터들을 담고 있는 NAS VM을 들고 있는 Esxi 서버의 HDD#1이 Fault 상태에 빠졌다.
서버 외관의 HDD에 녹색 불이 아닌, 주황색 불..

비상이라고 생각되어, HDD 교체를 했다.
문제는 HDD 교체 후의 상태인데, Windows 같은 경우 HP에서 제공하는 서버 감시 드라이버 및 응용 프로그램을 통해 Build 상태를 볼 수 있다. ( 디스크 관리자에서도 표시 )

그런데, ESXi 서버가 되니.. 난감.

어디서 확인할 수 있을까 했더니, Health Status에서 볼 수 있다.

물론 조건은 있다.

지금 돌리고 있는 서버가 HP DL360 G6 인데, 바로, HP 에서 커스터마이징한 ESXi 버전을 설치해야 한다.
만일 Dell 서버면 Dell 에서 제공하는 커스터마이징된 ESXi 버전이 설치되어 있어야 이런 확인이 가능하다.

물론 Windows처럼 Progress가 나타나면 좋을 텐데, 그렇지 않은 점은 좀 아쉽다.

Recovery.... 잘 끝나길 비는 수 밖에 없을 듯 싶다.

728x90

요즘 하루 하루 업무를 하면서 내가 무슨일을 하고 있는지 기록을 남기고 싶었다.
업무 뿐만 아니라, 간단하게 주고 받은 개인적인 정보라든가, 요청 내용, 그 외에 상황들
일기장 까지는 아니지만, 그 순간 잠깐 기록하고 싶은 마음이 들었다.
단! SNS와는 전혀 다른 방향으로,
뭔가 남에게 노출되는건 정말 꺼리는 정말 개인적인 정보들로만 남발된!
그런 메모!

그래서 마이크로소프트의 원노트도 꺼내보고, 에버노트도 꺼내보며, 포스트잇 프로그램들도 깔아서 써보고, 그외 각종 노트, 메모 프로그램을 깔아서 써보았다. 다양한 사용자들과 다양한 욕구들을 만족 시키기 위해서 여러가지 기능들이 남발하거나, 겹쳐져 존재 했다.

매번 제목 넣으라는 것도 마음에 들지 않았고, 중구난방 화면 가득 붙여져 나가는 포스트잇 스타일의 메모도 탐탁치 않았다. 뭐 종류 별로 정리해서 담으라고 각종 분류 도구를 주는 것도 탐탁치 않았다.

그냥 몇줄의 메모를 남기고 싶은데, 매번 쓸 때마다 제목을 적으라고 해서 내 생각을 매번 요약해야 되니 이것도 일.
또, 내 생각이 어느 순간은 업무, 어느 순간은 취미, 어느 순간은 집안 일 이렇게 바뀌는데, 매번 그 순간 순간 마다 기록을 하다 보니, 결국 분류 실패로 메모들이 정리가 안되었다. 게다가 포스트잇 스타일은 화면 가득 방해 놓는 것도 영, 싫었다.

난 그저, 그냥 쓰고 싶을 뿐인데 말이다.
순간 생각 나거나, 순간 기록을 위한 그냥 텍스트로 입력해서 저장하고,
나중에 날짜나 시간대 별로, 쭉~ 나열해 볼 수 있는 그런 단순한 메모장이 필요했다.

그를 위해서 만들어봤다.

프로그램 사전 정보

  • 프로그램 이름 : KNOIE Memo
  • 용도 : 개인 기록 저장용.
  • 권장 사항 : Windows XP 이상,
                    RAM 1G 이상,
                    HDD 10M, .
                   NET Framework 4.0 이상

 

설치 방법

Click Once로 배포를 간단하게 만들었다.

http://neohind.cafe24.com/deploy/memooff

사이트에 접속해서, “Install” 혹은 “설치” 버튼을 눌러
설치 파일을 다운 받거나 직접 실행하면 된다.

가난한 개발자다 보니, 별도 배포용 인증서가 없다. ( 년 10~20만원을 지불해야 하는데, 무료 배포 버전에 무슨.. 인증서를 -_-;; )
그래서, “알 수 없는 배포자”로 나오기 때문에, 마치 설치 금지 처럼 나오기는 하지만, 대충 무시하고 설치하면 된다.
( 다만, .NET Framework 가 없으면 설치도 안되고, 실행도 안된다. -_-;;; )

사용법

정상적으로 설치되고 실행 되었으면, 오른쪽 아래 트레이 아이콘이 나온다.

이 프로그램은 모두 이 트래이아이콘에서 출발한다.

 

1. 메모기록

여기서 단순 클릭을 하면 메모 입력 창이 뜬다.

적당한 날짜와 시간을 설정하거나, 그대로 둔 뒤, 텍스트 박스 안에 로그를 넣는다.

다 썼으면 “Upload” 버튼을 누른다.

그러면 자동으로 메모장 화면이 닫힌다.

끝.

2. 기록 내용 보기

트레이 아이콘에서 오른쪽 버튼을 누르면 나오는 메뉴에서, View List를 클릭한다.


그러면 다음과 같은 창이 뜬다.

오늘 날짜를 기준으로 모든 기록 내용이 날짜 순으로 나오게 된다.

처음 날짜는 시작 일자, 나중 날짜는 끝 일자이다. 적당히 선택한 뒤, 조회를 누르면 해당 일자 사이의 모든 기록을 볼 수 있다. 성능 및 표시 방법의 문제로 인해 메모 내용이 모두 펼쳐지진 않는다.

원하는 기록을 클릭하면 자동으로 펼쳐지는 정도만 된다.

 

3. 종료

트래이 아이콘에서 오른쪽 버튼을 클릭해서 나오는 메뉴에서

Exit 를 선택하면 끝!

 

정리

이 프로그램을 사용하는데 필요한 추가적인 내용은 다음과 같다.

  • 모든 데이터는 내 문서 폴더에 있는 knoiememo.db 파일에 저장된다.
    ( 반드시 이 데이터베이스 파일을 백업해야 한다.)
  • 쓰기 창을 띄웠는데도 화면에 나타나지 않은 경우 ALT + TAB을 눌러 아이콘을 선택하면 된다.

지금은 시작 프로그램이기 때문에, 아직은 개선할 사항이 많다.
현재 버전에서 개선해야 할 점이나, 추가해볼 필요가 있는 내용은 다음과 같다.

  • 첨부파일 기능
  • DB 파일 자동 백업 기능 ( 클라우드 등 )
  • DB 파일 통합 기능
  • 암호화 처리
  • RTF 형식의 입력 처리

일단은 이렇게 생각은 했지만, 사실 당장 내가 쓰는데는 지장이 없어 시간이 될 때 하나씩 업데이트 할 예정이다.

만일 사용 중 버그가 있으면 댓글을 통해 알려주면 수정해서 업데이트 할 예정이다.

728x90

+ Recent posts

728x90