2013-07-30 1 views
1

내 응용 프로그램은 일종의 "스크립팅"시스템입니다. this answer의 정보를 사용하여 드롭 타겟으로 사용할 수있는 "스크립트"를 만들었지 만 기본 동작은 편집을 위해 스크립트를 여는 것입니다. 실행하려면 /r 인수를 전달해야합니다. 어느 쪽이든 방법이 있습니까? 실행 동사를 사용하거나 b. 여분의 인수를 전달 하시겠습니까? Windows 탐색기로 문서를 추가 인수로 놓기

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob] 
@="MyApp Job" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shell] 
@="open" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shell\open] 

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shell\open\command] 
@="\"C:\\Program Files\\MyApp\\MyApp.exe\" \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\"" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shell\Run] 
@="&Run" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shell\Run\command] 
@="\"C:\\Program Files\\MyApp\\MyApp.exe\" /r \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\"" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shellex] 

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shellex\DropHandler] 
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.myJob] 
@="MyAppJob" 

는 (프로그램 이름은 위의 변경되었습니다.)

나는 DropHandler 하위 키에 키 "Verb"="Run"을 추가하는 시도했지만, 물론, 그것은 그렇게 간단하지 않다.

내가 설정할 수 있음을 알고 있습니다. 을 기본 동사로 실행하십시오. 가능한 경우 수행하지 않는 것이 좋습니다.

+0

두 번째 파일을 스크립트 파일에 놓으면'myapp.exe/r target_script.myjob dropped_file.xyz' 형식의 실행 파일을 통해 스크립트를 실행해야합니다. 그렇다면, 한 가지 옵션은 이러한 상황을 처리하고 적절한 매개 변수를 myapp.exe에 넘기는 두 번째 "더미"실행 파일을 만드는 것입니다. – Polynomial

+0

@ Polynomial 그게 정확히 내가 뭘했는지는 모르겠지만 적어도 모든 스크립트에 대해 "더미 실행 파일"을 만들 필요없이 설정할 방법을 알 수는 없다. – RoadieRich

+0

좋은 지적. 제대로 작동하려면 IDropHandler를 사용하여 자체 셸 확장 DLL을 작성해야 할 수 있습니다. 이렇게하면 기본 동사를 재정의 할 수 있습니다. – Polynomial

답변

2

좋아, 답에서 제안한 것처럼, 내 자신의 ShellExtension dll을 만드는 것이 었습니다. 제공된 Microsoft 예제를 살펴 보았지만 컴파일되지 않았으며 CodeProject에 대한 예제가별로 의미가 없었습니다 (다른 버전의 VS로 작성된 것 같습니다).

그러나 나는이 C# codeproject tutorial을 발견했는데, 쉘 확장을위한 C# 라이브러리 인 SharpShell으로 나를 소개했다. 이 간단한 문제 전체의 많은 :

[ComVisible(true)] 
[COMServerAssociation(AssociationType.ClassOfExtension, ".myjob")] 
public class MyAppDropHandler : SharpDropHandler 
{ 
    protected override void DragEnter(DragEventArgs dragEventArgs) 
    { 
     dragEventArgs.Effect = DragDropEffects.Move; 
    } 

    protected override void Drop(DragEventArgs dragEventArgs) 
    { 
     new Process 
     { 
      StartInfo = 
      { 
       FileName = this.SelectedItemPath, 
       Verb = "Run", 
       Arguments = String.Join(" ", list.Select(s => String.Format("\"{0}\"", s))) 
      } 
     }.Start(); 
    } 
} 

나는 다음 확장 here 등록에 대한 지침을 따라, 그리고 그것을 잘 작동 것으로 보인다.

+0

멋지다, 나는 누군가 그것을 보았던 것을 보는 것이 멋지다는 도서관을 썼다! –

관련 문제