2011-01-26 4 views
3

여기 상황이 있습니다. 제 직업에서는 바코드를 레코드 세트로 스캔 할 수있는 기존 프로그램을 사용합니다. 문제는이 레코드 세트를 만들기 위해 각 항목을 개별적으로 스캔해야한다는 것입니다. 추가 버튼을 클릭하여 텍스트 상자를 불러 와서 바코드를 스캔합니다 (또는 입력 할 수 있습니다)내 프로그램에서 기존 프로그램 텍스트 박스로 텍스트 보내기

이렇게하지 않으려면 바코드 목록을 만드는 프로그램을 C#으로 작성했습니다 나는 바코드를 복사하고 기존 프로그램 텍스트 상자에 붙여 넣은 다음 바코드를 보내어 다음 바코드를 준비 할 수 있도록 간단한 복사 및 붙여 넣기 유형 설치를 설정하는 방법을 찾고있었습니다. 목록을 통과 할 때까지 한 번에 하나씩 바코드를 보내 게됩니다.

내 C# 프로그램을 제어 할 수 있지만 업무용 프로그램이 나에 의해 작성되지 않았으며 코드 나 API에 액세스 할 수 없습니다. 누군가이 문제를 해결할 수있는 해결책을 제안 할 수 있습니까? SendMessage라는 것을 찾았지만 먼저 프로세스를 검색해야한다고 말한 이후로 어떻게 작동하는지 완전히 알 수는 없습니다.

+2

토끼 구멍에 오신 것을 환영합니다. P/invoke를 당겨 잠시 머물러 라. – Will

답변

2

나는 http://inputsimulator.codeplex.com/을 사용하여 비슷한 문제를 해결했다.

  1. 바코드
  2. 을 눌러 입력 창을
  3. 입력을 열어 당신의 핵심 다른 소프트웨어를 사용하여 파일의 내용을 읽어 그것은 단순히 당신이 할 수 있도록 키 프레스를 자동화 할 수 있습니다 바코드
  4. 를 눌러 복귀

나는 어떤 API와 프로그램에 대한 이런 짓을했는지, 그리고 수동 입력을 방지하는 방법으로 잘 작동합니다. 그래도 조금 못 생겼어!

+1

멋진 프로젝트입니다. 하지만 활성 창으로 키를 보내는 것만 나타납니다. 특정 창에 키를 보내도록 호출을 래핑합니까? – Will

+0

@ 윌, 아니요, 죄송합니다. 특정 창으로 보내지 않습니다. – Bebben

0

.NET 3+의 일부인 UI Automation 프레임 워크를 사용할 수 있습니다.

그런 다음 UISpy 같은 도구를 사용하여 해당 텍스트 필드를 기준으로 필요한 정보를 추출하면 C# 응용 프로그램 및 UI 자동화 프레임 워크에서 래치 할 수 있습니다.

예제는 MSDN Magazine article을 통해 존재합니다.

+0

좋아,이 텍스트를 보내는 데 사용됩니다. UI 자동화를 사용하여 키 누르기를 보내는 방법이 있습니까? 나는 주변을 수색했지만 많은 성공을 거두지 못했다.아니면 keypress 나 sendmessage를 사용해야합니까? 그 기능을 수행하는 버튼이 없기 때문에 Enter 키 누르기를 시뮬레이트해야합니다. 감사합니다. – Chris

+0

@Chris 프레임 워크가 시각적 트리에 액세스해야하기 때문에 UI 자동화를 사용하려면 노출 된 UI 요소가 필요합니다. 단추가 없으면 텍스트 상자에서 포커스가 손실되었을 때 커밋됩니다. 그것은 작동하지만 확실하지 않은 경우/r/n 귀하의 텍스트 후 귀하의 SetValue 내에 배치 해 봤어? SendKeys.Send ("{ENTER}")를 호출 해 볼 수도 있습니다. 텍스트의 SetValue 뒤에. –

1

SendMessage를 사용하는 경우 spy ++를 사용하여 텍스트 상자의 클래스와 이름을 검색하면 텍스트 상자를 처리 할 수 ​​있습니다. 나는 settext에 대한 API 호출을 보았을 것이라고 확신하지만, 지금은 찾지 못하고있다. 그러나 WM_KEYDOWN, WM_KEYDOWN 메시지를 사용하여 데이터 입력을 시뮬레이션 할 수 있습니다. 같은 사용

http://msdn.microsoft.com/en-us/library/ff468861%28v=vs.85%29.aspx

[DllImport("user32.dll")] 
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 

private const int WM_KEYDOWN = 0x0100; 
private const int WM_KEYUP = 0x0101; 

:

SendMessage(textboxHandle, WM_KEYDOWN, KeyCode, null); 
SendMessage(textboxHandle, WM_KEYUP, KeyCode, null); 

키 코드 목록; http://msdn.microsoft.com/en-us/library/dd375731%28v=vs.85%29.aspx

+1

SendMessage (textboxHandle, WM_SETTEXT, 0, text) – stefan

+0

그게 하나입니다, 건배 =) – Rob

관련 문제