2014-11-19 1 views
0

가상 키보드와 같은 소프트웨어를 만들고 싶다면 AlwaysTop 창을 사용하고 다른 프로세스/창에 데이터를 넣으십시오. 이 경우 모든 데이터를 클립 보드에 기록하고이 데이터가 패턴과 호환되는지 비교합니다 (A###은 patern이고 A123은 patern과 호환 됨). 그렇다면 응용 프로그램에서이를 목록 상자에 넣고 사용자가 붙여 넣을 수 있습니다 다른 프로세스/windows (이미 열려있는) 목록에있는 항목을 클릭하십시오.배경 창/프로세스를 상단에 놓는 방법

제 질문은 마지막 응용 프로그램/프로세스에이 정보를 저장하는 방법에 관한 것입니다. 이미 프로토 타입의 코드를 시작했지만 표시된 코드가 잘못되었습니다. 내 코드에서 현재 프로세스이므로 클릭하기 전에 마지막으로 사용해야합니다. 내 양식에.

public partial class Form1 : Form 
{ 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    [DllImport("user32.dll")] 
    static extern IntPtr SetForegroundWindow(IntPtr hWnd); 

    [DllImport("user32.dll")] 
    internal static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

    [DllImport("User32.dll")] 
    static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); 


    private void button2_Click(object sender, EventArgs e) 
    { 
    Process currentProcess = Process.GetCurrentProcess(); //this line is wrong 
    IntPtr hWnd = currentProcess.MainWindowHandle;   //this line is wrong 
    if (hWnd != IntPtr.Zero) 
    { 
     SetForegroundWindow(hWnd); 
     ShowWindow(hWnd, 9); 
    SendKeys.Send("A123"); 
    } 
    } 

} 
} 

답변

0

나는 간단한 해결책을 얻을 대신 난 그냥 내가 필요로하는 모든 경우에 조합 ALT + TAB 작업을 전송하는 과정을 얻는다. 솔루션 아래 사람이 미래에 필요로하는 경우 :

string old_clipboard = Clipboard.GetText(); 
Clipboard.SetText("A123"); 
SendKeys.SendWait("%{Tab}"); 
SendKeys.SendWait("^V"); 
Thread.Sleep(100); 
Clipboard.SetText(old_clipboard); 

시를 : SendWait이^V의 대상으로, 발신자 창에서만 작동하기 때문에 나는 한 지연을 넣어 또 다른 프로세스가 잘 본건 작업을 키우면입니다 .

감사합니다. =)