0
我正在使用以下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);
也許我解釋了我的問題,對不起。因爲如果你有一個開放的記事本,上面的代碼已經工作。但我喜歡得到它與任何打開的窗口(當前窗口),而不是隻用記事本工作... 我喜歡有一個小應用程序在後臺運行,如果你按快捷鍵,它應該粘貼一些文字在活動窗口。 – Simon
我在解釋你對WM_PASTE的使用不正確。您正在尋找的窗口是GetForegroundWindow。但自動化API是你真正想要的。 –