2012-03-20 4 views
0

활성 응용 프로그램에 일부 키 입력을 보내기 위해이 클래스를 사용하고자하므로 Sendkeys 클래스 관련 문제가 있습니다. 는 첫 단계로 제가 vb.net에서 간단한 응용 프로그램을 만든 것을 달성하기 위해, 그래서 {입력합니다} 키 입력을 테스트 할 2010VB.NET에서 키 스트로크를 보내는 간단한 응용 프로그램

Public Class Form1 
Public Shared data As String 
Private Sub SendintText(command As String) 
    Try 
     SendKeys.SendWait(command) 
    Catch e As Exception 
     MsgBox(e.StackTrace) 
    End Try 
End Sub 

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    data = TextBox1.Text.ToString 
    SendingText(data) 
End Sub 

내가 출마하려고 엔드 클래스

{Enter} 무한 루프 오류가 발생했습니다 : 처리되지 않은 'System.StackOverflowException'형식의 예외가 System.Windows.Forms.dll에서 발생했습니다. 누군가 나를 도울 수 있습니까?

  1. 비주얼 스튜디오
  2. 대상 응용 프로그램

어떻게 :

LATER 편집 : 백그라운드에서 난 두 응용 프로그램이있는 경우 그 때까지 나는 또 다른 예

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    System.Threading.Thread.Sleep(2000) 
    SendKeys.SendWait("{ENTER}") 
End Sub 

을 발견했다 이제 대상을 응용 프로그램에 집중합니다. 이제 폼을 실행할 때 f orm 활성화되었습니다. 거기에 어떤 매개 변수 (내가 보내고 싶은 열쇠)와 명령 프롬프트에서 winform을 호출하는 모든 솔루션은 무엇입니까?

나중에 Edit2가 강력한 텍스트 난 창문 양식에 대한 생각을 포기, 그래서 finnally 내가 키 입력을 시뮬레이션 콘솔 응용 프로그램에서 간단한 프로그램 ... 수입 시스템 수입 System.Windows.Forms을 만들었습니다 오의 방법으로

모듈 Module1의

Sub Main(ByVal args() As String) 
    Dim data As String = args(0) 
    Console.WriteLine("You insert the : {0}", data) 
    System.Threading.Thread.Sleep(5000) 
    SendKeys.SendWait(data) 
End Sub 

엔드 모듈

rder는 \ "test \"가 필요한 매개 변수에서 큰 따옴표를 사용합니다 ... (유용성이있을 수 있으므로 15 분을 알아 냈습니다) ... 정보를 제공해 주셔서 다시 한번 감사드립니다.

+0

을 버튼 클릭에 해당 응용 프로그램을 활성화해야합니다. 그렇다면 버튼에 키를 보내는 목적은 무엇입니까 ?? – PraveenVenu

+0

난 그냥 응용 프로그램에 보내는 키를 (텍스트 상자에 해당 키를 입력하여) 테스트하고 싶습니다 ... 거기에 어떤 가능성이 있습니까? – Operagust

+0

물론 그렇게 할 수 있습니다. 봤어?뭘 찾았 니? – UnhandledExcepSean

답변

0

, 당신은이 포커스를 얻었을 먼저 보내 다음 키

MSDN Link

// Get a handle to an application window. 
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)] 
public static extern IntPtr FindWindow(string lpClassName, 
    string lpWindowName); 

// Activate an application window. 
[DllImport("USER32.DLL")] 
public static extern bool SetForegroundWindow(IntPtr hWnd); 

// Send a series of key presses to the Calculator application. 
private void button1_Click(object sender, EventArgs e) 
{ 
    // Get a handle to the Calculator application. The window class 
    // and window name were obtained using the Spy++ tool. 
    IntPtr calculatorHandle = FindWindow("CalcFrame","Calculator"); 

    // Verify that Calculator is a running process. 
    if (calculatorHandle == IntPtr.Zero) 
    { 
     MessageBox.Show("Calculator is not running."); 
     return; 
    } 

    // Make Calculator the foreground application and send it 
    // a set of calculations. 
    SetForegroundWindow(calculatorHandle); 
    SendKeys.SendWait("111"); 
    SendKeys.SendWait("*"); 
    SendKeys.SendWait("11"); 
    SendKeys.SendWait("="); 
} 
+0

예를 들어 주셔서 감사합니다. 질문을 게시하기 전에 이미 읽었습니다. – Operagust

+0

또한 항상이 창 폼 응용 프로그램을 실행할 때 포커스가 Windows 응용 프로그램을 열어도 Windows 양식에있는 것으로 나타났습니다. – Operagust

+0

"SendWait가 아니기 때문에 VB.NET에서이 작업을 수행 할 수 없습니다. SendKeys의 회원 "입니다. 어떤 제안? – Lou

0

버튼에 초점이 있습니다. 버튼 클릭 이벤트는 Enter 키 입력을 보냅니다. Enter를 보내면 버튼 클릭 이벤트가 시작됩니다. 무한 루프.

무한 루프를 중지하기 위해 sendkeys 루틴이 완료된 후에 버튼을 비활성화하고 버튼을 다시 활성화 할 수 있습니다.

키 스트로크를 보내려는 응용 프로그램으로 포커스를 다시 전환하는 것이 좋습니다. 버튼을 클릭하면 다른 응용 프로그램으로 sendkey하기 위해

+0

포커스를 설정하려고했는데 같은 오류가 나타났습니다. 아마도 뭔가를 놓친 것 같아요. parametrization sendkey를 테스트하는 중 ...이 간단한 응용 프로그램의 목적입니다. – Operagust

관련 문제