Tôi cần mô phỏng một lần nhấn phím trong ứng dụng của bên thứ ba. Giả sử tôi có một ứng dụng C# cần gửi "8" đến ứng dụng Máy tính. Tôi không thể sử dụng SendKeys của. Net hoặc keybd_event của win32 api bởi vì cả hai đều yêu cầu cửa sổ là một trong những hoạt động hàng đầu, mà không phải là trường hợp trong tình hình của tôi.Tôi không thể hiểu cách sử dụng các cuộc gọi SendMessage hoặc PostMessage
Vì vậy, để lại cho tôi các cuộc gọi sendMessage và postMessage. Tôi đã cố gắng trong ba giờ đồng hồ cố gắng để có được một số kết quả nhưng bây giờ tôi hoàn toàn vô vọng.
tôi có như sau:
[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName,string lpWindowName);
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam);
private void button1_Click(object sender, EventArgs e)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSCOMMAND = 0x018;
const int SC_CLOSE = 0x053;
int WindowToFind = FindWindow(null,"Calculator");
int result = SendMessage(WindowToFind, WM_SYSCOMMAND, SC_CLOSE, 0);
Boolean result2 = PostMessage(WindowToFind, WM_SYSCOMMAND, SC_CLOSE, 0);
int result3 = SendMessage(WindowToFind, WM_KEYDOWN,((int)Keys.NumPad7), 0);
Boolean result4 = PostMessage(WindowToFind, WM_KEYDOWN, ((int)Keys.NumPad7), 0);
}
Như bạn thấy đấy, tôi làm cho bốn nỗ lực để giao tiếp với Máy tính. Sử dụng cả hai sendMessage và PostMessage để đóng cửa sổ và cũng để gửi phím 7. Không có gì hoạt động. Phương thức FindWindow hoạt động vì tôi có được trình xử lý của ứng dụng (thậm chí tôi đã thử khởi chạy quá trình đó và truy cập nó với process.MainWindowHandler, nhưng không may mắn). Không có lỗi hoặc ngoại lệ, nhưng nó không làm gì trong Máy tính.
Tôi cũng đã thử chính xác những điều tương tự với notepad và không có gì thay đổi quá.
Wow. Điều đó làm việc? Nói về một dự đoán may mắn. Tôi chưa bao giờ sử dụng hai phương pháp win32 đó. –
Im thực sự trên 32bits, nhưng nó làm việc tuy nhiên :) –
Hey, bất cứ điều gì hoạt động :) –