이글에서는 윈도우즈 클리이언트 Web browser에 표시되는 HTML의 접속링크를 만들어 웹 화면에서 링크를 클릭하면 자동으로 로컬 어플리케이션을 실행하는 방법을 설명합니다.
기존URL(mailto:) 이해하기
예를 들면 다음과 같은링크를 만들어 클릭하면 현재 등록된 메일 클라이언트 프로그램이 기동됩니다.
<a href="mailto:test@sample.com?subject=테스트제목">테스트내용</a>
테스트내용
위 링크를 클릭하면 Windows OS 버전 또는 기본 연결 어플리케이션 설정에 따라 표시되는 화면이 다르지만 다음과 같은 화면이 표시됩니다.
신규URL(testreg:)작성하기
위에서 설명한 기존 mailto:를 모방하여 새로운 접속링크를 만들면 웹 브라우저에서 링크를 클릭하여 notepad,ftp클라이언트 프로그램, 원격 테스크톱 연결, ssh클리이언트 프로그램을 자동으로 기동할 수 있습니다. 좀 더 깊이 들어가면 각 프로그램이 유저/패스워드를 전달받는 매개변수(parameter, 파라미터)가 존재한다면 호줄시 인수(argument, 인자)로 넘겨주면 자동으로 인증까지 실행할 수 있습니다.
레지스트리 등록하기
HKEY_CLASSES_ROOT 레지스트리 키 아래의 URL Protocol 설정은 커스텀 URI 스킴(프로토콜) CUSTOM URI Schemes을 정의하는 데 사용됩니다.
이를 통해 특정 URL 패턴이 웹 브라우저에서 열릴 때 실행될 프로그램을 지정할 수 있습니다.
예를 들어, mailto: URL이 클릭되면 기본 메일 클라이언트가 열리는 것과 같은 방식으로 작동합니다.
우선 필요한 레지스트리를 작성합니다.
HKEY_CLASSES_ROOT\myprotocol (여기서 myprotocol은 커스텀 URI 스킴을 나타냅니다.)
URL Protocol: (이 값은 빈 문자열일 수 있으며, 이 키의 존재 자체가 이 프로토콜 이름을 URL 프로토콜로 식별합니다.)
shell
open
command
실행할 명령 줄, 예를 들어 “C:\Program Files\MyApp\myapp.exe” “%1”
여기서 %1은 URL 전체가 됩니다.
이 구조를 통해, 커스텀 URI 스킴에 대한 클릭 이벤트가 발생했을 때,
운영 체제는 해당 경로를 따라 command 키의 기본값에 지정된 프로그램을 실행합니다.
“C:\Program Files\MyApp\myapp.exe” “%1” 명령어는 myapp.exe 프로그램을 실행하고,
사용자가 클릭한 커스텀 URL을 인자로 넘깁니다.
위의 레지스트리가 등록되면 캡쳐와 같이 testreg키 아래 shell키, 그 아래에 open키, 그 아래에 command키를 가지는 트리 구조가 되며 testreg는 문자열 값 URL Protocol을 가지고 command는 실행할 로컬 파일의 패스와 인수값을 가지게 됩니다. 가장 위의 testreg키의 이름은 자유지만 그 외 나머지 키들은 그대로 적어주어야 합니다.
아래의 내용은 .reg 파일의 구조입니다. 레지스트리 등록은 Microsoft 서포트 페이지를 참조하세요.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\rdpconn]
@="URL:rdpconn"
"EditFlags"=dword:00000002
"FriendlyTypeName"=""
"URL Protocol"=""
[HKEY_CLASSES_ROOT\rdpconn\DefaultIcon]
@=""
[HKEY_CLASSES_ROOT\rdpconn\shell]
@="open"
[HKEY_CLASSES_ROOT\rdpconn\shell\open]
[HKEY_CLASSES_ROOT\rdpconn\shell\open\command]
@="\"C:\app\myrdp\rdbconn.bat\" \"%1\""
HTML 태그 추가하기
HTML 내에는 다양한 하이퍼링크가 존재하지만 <a> 태그를 이용하여 설명하겠습니다. 아래와 같은 태그를 넣어주고 브라우저 상에서 링크를 클릭하면 testreg 레지스트리에서 지정한 프로그램이 실행됩니다.
<a href="testreg:넘겨줄 인수 값">URI Scheme 테스트</a>
HTML에 추가해서 외부에 공개하더라도 모든 사용자의 레지스트리에 같은 레지스트리가 등록되어있지 않기 때문에 호출에 실패하여 기동하지 않습니다. 모든 사용자에게 같은 기능을 제공하기 위해서는 사용자의 컴퓨터에 동일한 레지스트리를 추가하는 인스톨 과정이 필요합니다.