2016-08-09 3 views
1

"출력 유형"이 "Windows 응용 프로그램"인 콘솔 앱이 있습니다 (헤드리스 동작, 즉 UI가없고 콘솔 창이 없음). 목적은 Windows 클립 보드에서 텍스트를 "정리"하는 것입니다. 즉 앞뒤 공백을 모두 지우고 서식을 제거하는 것입니다.Visual Studio 외부에서 실행할 때 내 클립 보드 조작 응용 프로그램이 다르게 동작하는 이유는 무엇입니까?

디버깅 할 때 유용하지만 탐색기에서 실행하면 클립 보드 내용이 지워집니다. 나도 "디버그"에서합니다 (dubugger에서 프로그램을 실행 한 후

enter image description here

: MS Word에서 서식

[STAThread] 
internal static void Main(string[] args) 
{ 
    var currentClipboardText = System.Windows.Clipboard.GetText(); 

    // only if the clipboard has text; leave any other content intact. 
    if(!string.IsNullOrEmpty(currentClipboardText)) 
    { 
     currentClipboardText = currentClipboardText.Trim(); 
     var pattern = @"[\t\r\n\v\f\u2028\u2029]"; // match vert. whitesp & tabs 
     currentClipboardText = Regex.Replace(currentClipboardText, pattern, " "); 
     System.Windows.Clipboard.SetDataObject(currentClipboardText);     
    } 
} 

샘플 입력, 클립 보드에 복사 : 여기

내 코드입니다 모드 또는 "릴리스"모드는 아무런 차이가 없습니다.) 클립 보드에서 Word로 다시 붙여 넣은 결과는 다음과 같습니다.

enter image description here

동일한 운동을하고 Windows 탐색기에서 두 번 클릭하여 프로그램을 실행하면 (예 :

enter image description here

여기 차이점은 무엇입니까 다음 \bin\Debug 디렉토리에), Word에 붙여 클립 보드에 남아있는 텍스트가 없다? Visual Studio 외부에서 작동하지 않는 이유는 무엇입니까?

답변

2

기본적으로 SetDataObject를 사용하여 시스템 클립 보드에 배치 된 데이터는 응용 프로그램이 종료 될 때 클립 보드에서 자동으로 지워집니다.

MSDN

사용 System.Windows.Clipboard.SetDataObject(currentClipboardText, true); 대신 응용 프로그램이 종료 후 클립 보드의 데이터를 유지합니다.

+0

흥미 롭습니다. 이제 내 질문은 짐작할 수 있습니다. 디버깅 할 때 * 분명하지 않은 이유는 무엇입니까? –

+0

@ adv12 -하지만 그것은 자식 프로세스에서 발생합니다. –

+0

이 변경되면 탐색기에서 실행할 때 응용 프로그램이 충돌합니다. 아직도 VS 디버그에서 잘 작동합니다. –

0

코드를 테스트했으며 디버깅 할 때 작동하지 않습니다. 줄 바꿈 :

System.Windows.Clipboard.SetDataObject (currentClipboardText);

함께 :

System.Windows.Clipboard.SetText (currentClipboardText);

디버깅 할 때 및 디버깅하지 않을 때 작동했습니다. 나는 Word가 더 이상 DataObject를 붙여 넣을 수있는 텍스트로 인식하지 않는다고 생각합니다.

이 방법으로 문제가 해결되기를 바랍니다.