2014-09-08 7 views
-5

C#에서 이벤트 기록기를 만들려고합니다. 프로그램에는 텍스트 상자가 있고 런타임에 텍스트 상자에 사용자의 활동을 보여주는 메모장 문서를 열어야합니다. 지금까지 텍스트 파일에 파일을 저장하는 방법도 알고 있습니다. 또한 textChanged 이벤트를 2 개의 텍스트 상자에 사용하는 방법을 알고 있지만 메모장과 같은 텍스트 편집 응용 프로그램에서는 사용할 수 없습니다. 누군가가 올바른 방향으로 나를 가리키며이 일을하는 법을 알려줄 수 있습니까? 긴 텍스트를 염두에두고, 내가 의미를 갖기를 바랍니다 :-)응용 프로그램 활동 기록계

+0

여기 메모장으로 무엇을하려고하는지 명확하지 않습니다. 실행중인 메모장 인스턴스에 텍스트를 입력하려고합니까? 대신 응용 프로그램 창에 텍스트를 표시하면 어떻습니까? – David

+0

런타임 중에 메모장에 사용자 입력을 표시하려고합니다. – YoungDisciple09

+0

메모장 창에 대한 핸들을 가져 와서 일부 저수준 Windows API를 사용하여 키 입력을 보내는 것 외에 다른 작업을 수행 할 수 있는지 잘 모르겠습니다. 그러나 그것은 텍스트를 보여주기위한 많은 노력처럼 보입니다. 응용 프로그램에는 텍스트를 표시 할 수있는 네이티브 컨트롤이 있습니다. 하나의 큰 TextBox가있는 양식을 열고 더 쉽게 * 많이 * 작성할 수 있습니다. – David

답변

0

Sytem.Diagnostics.Process를 사용하여 프로세스를 시작한 다음 SendKey.Send를 사용하여 텍스트를 Notpad 창으로 보낼 수 있습니다. (textbox.TextChanged/button.Clicked)

[DllImport("user32.dll",EntryPoint="FindWindow")] 
private static extern IntPtr FindWindow(string sClass, string sWindow); 

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SetForegroundWindow(IntPtr hWnd); 

이 이벤트 핸들러이 추가 :

클래스에 이러한 API 호출을 추가 :이 시도

IntPtr notepadHwnd = FindWindow("Notepad",(string)null); 
if (notepadHwnd == null) 
{ 
    System.Diagnostics.Process notepad = new Process(); 
    notepad.StartInfo.FileName = "notepad.exe"; 
    notepad.Start(); 
    System.Threading.Thread.Sleep(500); 
    notepadHwnd = FindWindow("Notepad",(string)null); 
} 
// get the text from the users input 
string msg = textBox1.Text; 
if (notepadHwnd != null) 
{  
    SetForgroundWindow(notepadHwnd); 

    // Send the string to the application that has focus 
    // note: If you need to erase existing text (ie. on TextChanged) 
    // you could use SendKeys.Send("^a{BACKSPACE}"); to select all and delete 
    SendKeys.Send(msg); 
} 

편집 : 추가를 FindWindow 및 SetForgroundWindow. 이 코드는 다른 메모장 창을 열지 않았다고 가정합니다.

+0

Process.Start ("notepad.exe", "path");를 사용했습니다. 코드의 첫 번째 3 줄에 대해 내가 얻은 동일한 출력을 제공합니다. 그것은 텍스트 상자에 뭔가를 입력 할 때마다 새로운 여러 메모장 파일을 엽니 다. 기본적으로 '텍스트 입력을 읽는 대신 입력을 쓰고 텍스트 상자를 무시합니다 – YoungDisciple09

+0

나는 당신을 팔로우하지 않습니다. 메모장을 열고 textbox1.Text의 텍스트를 다시 textbox1로 다시 씁니다. – jbriggs

+0

SendKeys가 작동하도록 메모장을 활성화 된 창으로 설정하려고 내 대답을 편집했습니다. – jbriggs

관련 문제