2013-03-08 40 views
16

Tôi muốn gửi một phím cụ thể (ví dụ như k) sang một chương trình tên là notepad, và dưới đây là đoạn code mà tôi đã sử dụng:C# sử dụng chức năng Sendkey để gửi một chìa khóa để một ứng dụng khác

void sendkey() 
{ 
    [DllImport ("User32.dll")] 
    static extern int SetForegroundWindow(IntPtr point); 

    Process p = Process.GetProcessesByName("notepad")[0]; 
    IntPtr pointer = p.Handle; 
    SetForegroundWindow(pointer); 
    SendKeys.Send("k"); 
} 

Nhưng mã không hoạt động, có gì sai với mã?

Đã chỉnh sửa: Tôi có thể gửi chữ "K" vào sổ ghi chép không có sổ ghi chú làm cửa sổ đang hoạt động không? (Ví dụ như hoạt động cửa sổ = "Google chrome", notepad là trong backgound, có nghĩa là gửi một chìa khóa cho một ứng dụng nền)

+0

bạn có gặp bất kỳ lỗi nào không? – Zaki

+0

Không, tôi không, thay vào đó, nó chỉ cần gửi "K" đến cửa sổ trên cùng – User2012384

+1

xem nếu điều này giúp: http://stackoverflow.com/questions/825651/how-can-i-send-the-f4- key-to-a-process-in-c – Zaki

Trả lời

34

Nếu notepad đã được bắt đầu, bạn nên viết:

// import the function in your class 
[DllImport ("User32.dll")] 
static extern int SetForegroundWindow(IntPtr point); 

//... 

Process p = Process.GetProcessesByName("notepad").FirstOrDefault(); 
if(p != null) 
{ 
    IntPtr h = p.MainWindowHandle; 
    SetForegroundWindow(h); 
    SendKeys.SendWait("k"); 
} 

GetProcessesByName trả về một mảng các quá trình, vì vậy bạn sẽ nhận được một trong những đầu tiên (hoặc tìm một trong những bạn muốn).

Nếu bạn muốn bắt đầu notepad và gửi chìa khóa, bạn nên viết:

Process p = Process.Start("notepad.exe"); 
p.WaitForInputIdle(); 
IntPtr h = p.MainWindowHandle; 
SetForegroundWindow(h); 
SendKeys.SendWait("k"); 

Tình hình duy nhất mà các mã có thể không hoạt động là khi notepad được bắt đầu as Administrator và ứng dụng của bạn không phải là.

+0

Nhưng tôi không muốn bắt đầu chương trình, điều tôi muốn làm là gửi khóa đến chạy chương trình, có cách nào để làm điều này? – User2012384

+0

notepad đã được mở thủ công – User2012384

+0

@HugoWong Xem câu trả lời đã chỉnh sửa. –

Các vấn đề liên quan