thật sự thì em không biết đặt tiêu đề tiếng Việt như thế nào cho nó phù hợp nên em mới đặt như vậy.
Chuyện là em đnag viết một cái tool nhỏ, ứng dụng của nó là khi click vào một cái button bên đây thì nó sẽ mở một cái app khác (ở đây là em mở OpenVPN) và rồi sau đó sẽ ấn một button bên app OpenVPN.
và em đang bị kẹt ở chỗ là không tài nào send được cái sự kiện click chuột qua cái app bên kia. Tức là đã bật openVPN client lên rồi, nhưng lại không có chuyện gì xảy ra sau đó .
control ID của button Disconnect trong spy++:
và đây là đoạn code của em
private const int VM_COMMAND = 0x0111;
private const int BN_CLICKED = 0;
private const int ButtonId = 0xA3;
private const string fn = @"C:\Program Files\OpenVPN\bin\openvpn-gui.exe";
[DllImport("user32.dll")]
static extern IntPtr GetDlgItem(IntPtr hWnd, int nIDDlgItem);
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);
private static ProcessModule GetModule(Process p)
{
ProcessModule pm = null;
try
{
pm = p.MainModule;
}
catch
{
return null;
}
return pm;
}
public static void openApp()
{
IntPtr handle = IntPtr.Zero;
Process[] localAll = Process.GetProcesses();
IntPtr hWndButton = GetDlgItem(handle, ButtonId);
foreach(Process p in localAll)
{
if(p.MainWindowHandle != IntPtr.Zero)
{
ProcessModule pm = GetModule(p);
if(pm != null && p.MainModule.FileName == fn)
{
handle = p.MainWindowHandle;
break;
}
}
}
if(handle == IntPtr.Zero)
{
MessageBox.Show("Not Found.");
return;
}
int wParam = (BN_CLICKED << 16) | (ButtonId & 0xffff);
SendMessage(handle, VM_COMMAND, wParam, hWndButton);
}
Không biết code em sai chỗ nào và có cách nào khác ngoài dùng SendMessage
k ạ ? mong cách thánh chỉ giáo.