C\#에서 VBScript,javascript 등 스 크 립 트 의 구현 코드 를 호출 합 니 다.

1.MSScriptControl 을 사용 하여 마이크로소프트 사이트 에 Windows Script Control 을 다운로드 합 니 다.이것 은 ActiveX(R)컨트롤 이기 때문에.NET 에서 저 를 사용 하여 Interop 을 사 용 했 습 니 다.설치 가 완료 되면 새 C\#Windows 프로그램 항목 을 만 듭 니 다.솔 루 션 자원 관리자 에서 참조 노드 를 선택 하고 오른쪽 단 추 를 누 르 면 참조 메뉴 를 추가 하고 참조 대화 상 자 를 팝 업 합 니 다.Windows Script Control 이 설 치 된 디 렉 터 리 를 찾 으 려 면 msscript.ocx 파일 을 선택 하 십시오.인용 노드 에 MSScriptControl 구성 요 소 를 추가 합 니 다.다음은 Interop 후의 모든 대상 입 니 다.ScriptControl 은 ActiveX(TM)Script 를 지원 하 는 숙주 Script 엔진 에 간단 한 인 터 페 이 스 를 제공 합 니 다.다음은 Script Control Class 류 로 전 환 된 ScriptControl 의 속성 과 방법 에 대해 설명 하 겠 습 니 다.속성 AllowUI 속성:ScriptControl 자체 나 Scirpt 엔진 에 표 시 된 사용자 인터페이스 요소 입 니 다.읽 고 쓸 수 있 습 니 다.CodeObject 속성:대상 을 되 돌려 줍 니 다.이 대상 은 지정 한 모듈 의 공용 구성원 을 호출 하 는 데 사 용 됩 니 다.읽 기만 하 다.Error 속성:Error 대상 을 되 돌려 줍 니 다.마지막 오류 에 대한 자세 한 정 보 를 포함 합 니 다.읽 기만 하 다.Language 속성:사용 중인 Script 언어 이름 을 설정 하거나 되 돌려 줍 니 다.읽 기와 쓰기.Modules 속성:ScriptControl 대상 에 게 모듈 집합 을 되 돌려 줍 니 다.읽 기만 하 다.Procedures 속성:지정 한 모듈 에서 정 의 된 프로 세 스 집합 을 되 돌려 줍 니 다.읽 기만 하 다.Sitehwnd 속성:창의 hwnd 를 설정 하거나 되 돌려 줍 니 다.Script 코드 를 실행 하면 이 창 은 대화 상자 와 다른 사용자 인터페이스 요 소 를 표시 하 는 데 사 용 됩 니 다.읽 기와 쓰기.State 속성:ScriptControl 대상 을 설정 하거나 되 돌려 주 는 모드 입 니 다.읽 기와 쓰기.Timeout 속성:시간(밀리초)을 설정 하거나 되 돌려 줍 니 다.이 시간 이후 사용 자 는 Script 코드 의 실행 을 중단 하거나 코드 를 계속 실행 할 수 있 도록 선택 할 수 있 습 니 다.읽 기와 쓰기.UseSafeSubset 속성:Boolean 값 을 설정 하거나 되 돌려 주 며 숙주 프로그램 에 보안 요구 가 있 는 지 알려 줍 니 다.홈 프로그램 에 보안 제어 가 필요 하 다 면 UseSafeSubset 는 True 이 고 그렇지 않 으 면 false 입 니 다.읽 기와 쓰기.방법 AddCode 방법:모듈 에 지정 한 코드 를 추가 합 니 다.AddCode 방법 을 여러 번 호출 할 수 있 습 니 다.AddObject 방법:호스트 개체 모델 을 Script 엔진 에 사용 할 수 있 도록 합 니 다.Eval 방법:표현 식 을 계산 하고 결 과 를 되 돌려 줍 니 다.Execute Statement 방법:지정 한 문 구 를 실행 합 니 다.Reset 방법:ScriptControl 에 추 가 된 모든 Script 코드 와 대상 을 포기 합 니 다.Run 방법:지정 한 과정 을 실행 합 니 다.이벤트 오류 이벤트:실행 중 오류 가 발생 했 을 때 이 이벤트 가 발생 합 니 다.Timeout 이벤트:Timeout 속성 이 지정 한 시간 을 초과 하고 사용자 가 결과 대화 상자 에서 End 를 선 택 했 을 때 이 이벤트 가 발생 합 니 다.AllowUI 속성 을 false 로 설정 하면 대화 상자 와 같은 문 구 를 표시 하 는 데 도움 이 되 지 않 습 니 다.예 를 들 어 VBScript 에서 MsgBox 구문,javascript 에서 alert 등 이 있 습 니 다.또한 실행 중인 스 크 립 트 가 TimeOut 설정 의 밀리초 수 를 초과 하면 시간 알림 을 초과 하 는 대화 상자 가 나 오지 않 습 니 다.반대로.Language 속성 을 다시 설정 하면 AddCode 로 불 러 온 코드 를 비 웁 니 다.TimeOut 속성 에 대해 시간 초과 가 발생 했 을 때 ScriptControl 은 대상 의 AllowUI 속성 을 검사 하여 사용자 인터페이스 요 소 를 표시 할 수 있 는 지 확인 합 니 다.독자 가 더 자세 한 이 해 를 필요 로 한다 면 MSDN 문 서 를 볼 수 있다.컨트롤 을 쉽게 사용 하기 위해 서 저 는 ScriptEngine 류 로 포장 하 였 습 니 다.다음은 전체 코드 입 니 다.

using System;
using MSScriptControl;
using System.Text;
namespace ZZ
{
/// <summary>
///
/// </summary>
public enum ScriptLanguage
{
/// <summary>
/// JScript
/// </summary>
JScript,
/// <summary>
/// VBscript
/// </summary>
VBscript,
/// <summary>
/// javascript
/// </summary>
javascript
}
/// <summary>
///
/// </summary>
public delegate void RunErrorHandler();
/// <summary>
///
/// </summary>
public delegate void RunTimeoutHandler();
/// <summary>
/// ScriptEngine
/// </summary>
public class ScriptEngine
{
private ScriptControl msc;
//
public event RunErrorHandler RunError;
//
public event RunTimeoutHandler RunTimeout;
/// <summary>
///
/// </summary>
public ScriptEngine():this(ScriptLanguage.VBscript)
{
}
/// <summary>
///
/// </summary>
/// <param name="language"> </param>
public ScriptEngine(ScriptLanguage language)
{
this.msc = new ScriptControlClass();
this.msc.UseSafeSubset = true;
this.msc.Language = language.ToString();
((DScriptControlSource_Event)this.msc).Error += new DScriptControlSource_ErrorEventHandler(ScriptEngine_Error);
((DScriptControlSource_Event)this.msc).Timeout += new DScriptControlSource_TimeoutEventHandler(ScriptEngine_Timeout);
}
/// <summary>
/// Eval
/// </summary>
/// <param name="expression"> </param>
/// <param name="codeBody"> </param>
/// <returns> object</returns>
public object Eval(string expression,string codeBody)
{
msc.AddCode(codeBody);
return msc.Eval(expression);
}
/// <summary>
/// Eval
/// </summary>
/// <param name="language"> </param>
/// <param name="expression"> </param>
/// <param name="codeBody"> </param>
/// <returns> object</returns>
public object Eval(ScriptLanguage language,string expression,string codeBody)
{
if(this.Language != language)
this.Language = language;
return Eval(expression,codeBody);
}
/// <summary>
/// Run
/// </summary>
/// <param name="mainFunctionName"> </param>
/// <param name="parameters"> </param>
/// <param name="codeBody"> </param>
/// <returns> object</returns>
public object Run(string mainFunctionName,object[] parameters,string codeBody)
{
this.msc.AddCode(codeBody);
return msc.Run(mainFunctionName,ref para

좋은 웹페이지 즐겨찾기