如何使用SendMessage将内容粘贴到其他窗口

时间:2013-06-23 13:28:33

标签: c# .net sendmessage

我正在使用以下SendMessage函数将文本发送/粘贴到其他应用程序。 但在该函数中,我必须从其他应用程序中给出窗口的名称。

如何更改此选项以获取当前活动窗口并粘贴代码?

代码:

[DllImport("user32.dll")]  
public static extern int SendMessage(int hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam);  

[DllImport("user32.dll", SetLastError = true)]  
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);  

[DllImport("user32.dll", SetLastError = true)]  
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

public const int WM_PASTE = 0x0302;

IntPtr windowHandle = FindWindow("NOTEPAD", null);  
IntPtr editHandle = FindWindowEx(windowHandle, IntPtr.Zero, "EDIT", null);  
string textToSendToFile = "Input here your text";
Clipboard.SetText("Test");
SendMessage((int)editHandle, WM_PASTE, 0, textToSendToFile); 

我也有这个,但我真的不知道如何将它与上面的代码结合起来......

[DllImportAttribute("user32.dll", EntryPoint = "GetForegroundWindow")]
public static extern IntPtr GetForegroundWindow();

[DllImportAttribute("user32.dll", EntryPoint = "GetWindowThreadProcessId")]
public static extern uint GetWindowThreadProcessId([InAttribute()] IntPtr hWnd, IntPtr lpdwProcessId);

IntPtr hWndForegroundWindow = GetForegroundWindow();
uint activeThreadID = GetWindowThreadProcessId(hWndForegroundWindow, IntPtr.Zero);

1 个答案:

答案 0 :(得分:0)

WM_PASTE消息不使用参数。它只是指示收件人获取剪贴板的内容并粘贴它们。因此,如果您希望收件人做任何事情,您需要先填充剪贴板。

如果您不想污染剪贴板,并且您不应该因为它属于该用户,那么您可以发送传递lParam中文本的EM_REPLACESEL消息。

如果要查找用户当前正在处理的窗口,请使用GetForegroundWindow。

但是,最好不要伪造低级消息,而是使用自动化API。