我有一个在后台运行的外部程序。如果我在计算机上的任何地方选择一个号码,并点击一个热键(假设说F10),那么外部程序会选择该号码。
现在我正在尝试创建一个ac#winform应用程序,如果用户在应用程序中选择文本并点击一个按钮,外部程序将选择这个突出显示的文本(所以我实际模拟一个F10按键)
这就是我的尝试:
SendKeys.Send("{F10}");
和
[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hWnd);
private void button1_Click(object sender, EventArgs e)
{
textBox1.SelectAll();
while (true)
{
Process[] processes = Process.GetProcessesByName("programname");
foreach (Process proc in processes)
{
SetForegroundWindow(proc.MainWindowHandle);
SendKeys.SendWait("{F10}");
}
Thread.Sleep(5000);
}
}
但是外部程序没有响应以上任何一个.. 希望你们能帮助我。
答案 0 :(得分:1)
我希望你所谈论的程序为热键注册自己。这意味着当您在任何地方按F10时,WM_HOTKEY消息将被发送到热键应用程序。当您使用SendKeys.Send时,您正在发送不同的Windows消息,因此热键不会被拾取。
所以你可能需要使用适当的值来PostMessage WM_HOTKEY。请注意,正在按下的实际键不会在消息中发送 - 在热门应用程序的RegisterHotKey中传递的ID在WParam中,所以你必须以某种方式找出这个id。如果它是一个常数,你可以尝试使用Spy ++来解决它。