2012-05-08 4 views
1

C#에서 놀고 내 작은 콘솔 프로그램에서 내 이름을 메모장 창에 표시하고 싶습니다. 나는 창 핸들 (IntPtr)을 가지고 있지만 실제로 여기서 무엇을해야하는지 알지 못한다.키패드를 메모장에 보내는 방법은 무엇입니까?

나는 SendKey를 사용할 수 있지만 메모장에 포커스 여부를 때마다이 일을 원하고, 내가 이해하면 윈도우가 초점을 맞추고있는 경우에만 작동 Senkey :(

편집 : 나는했습니다 시도 (눌러 B를 시뮬레이션하기 위해 노력하고) 다음

PostMessage(NotepadWindowHandle, 0x100, 0x42, 0); 
Thread.Sleep(1000); 
PostMessage(NotepadWindowHandle, 0x101, 0x42, 0); 

아무런 변화가 없습니다 :(그리고 그것은

+0

또한이 게시물로 볼 수 있습니다 : http://stackoverflow.com/questions/1922707/setting-external-application-focus 해당 VB 있지만 도움이됩니다. –

답변

2

당신이 올바른지, SendKey에만 초점을 작동 중단하지 않습니다 에드 창.

원하는 작업은 P/Invoke SendMessage이며 텍스트 상자의 핸들에 WM_SETTEXT을 보냅니다 (주 창 핸들이 아닙니다!). 그것을 얻으려면 GetWindow으로 도달 할 때까지 창 계층 구조를 탐색하십시오.

공짜로, 텍스트 상자의 핸들을 얻으려면 기본 메모장 창 핸들에서 GetWindow (GW_CHILD)을 호출하기 만하면 문자 그대로 첫 번째 자식이됩니다.

+0

참고로 이것은 텍스트를 입력하지 않습니다 *. WM_SETTEXT를 이해하는 창에서만 작동합니다. –

+0

메모장 창이 수행하는 작업. – Blindy

+0

메모장 윈도우가하는 ~. 그것은 EDIT 컨트롤이기 때문입니다. RichText 창이 작동한다고 믿기 때문에 워드 패드도 OK입니다. 나는 단지 텍스트를 타이핑하는 것이 아니라 다른 텍스트 입력 필드에서 작동하지 않을 수도 있다는 점을 지적하고있다. –

0

메모장의 창 핸들이있는 경우 먼저 전경 창으로 활성화하고 SendKey을 발행하십시오.

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

편집 : 전 대답을 유사한 문제에 대한 :

는 P는/전경 창으로 창을 설정하는 서명을 호출입니다 https://stackoverflow.com/a/8953524/1149773

관련 문제