我正在尝试编写一个位于系统托盘中的小应用程序.我已经注册了一个热键.当激活热键并激活应用程序时,我想将Ctrl + C发送到最后一个活动窗口,这样我就可以将突出显示的文本放入剪贴板.
这是我到目前为止所得到的:
//http://stackoverflow.com/questions/9468476/switch-to-last-active-application-like-alt-tab
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll")]
static extern IntPtr GetLastActivePopup(IntPtr hWnd);
[DllImport("user32.dll", ExactSpelling = true)]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
const uint GA_PARENT = 1;
const uint GA_ROOT = 2;
const uint GA_ROOTOWNER = 3;
public static IntPtr GetPreviousWindow()
{
IntPtr activeAppWindow = GetForegroundWindow();
if (activeAppWindow == IntPtr.Zero)
return IntPtr.Zero;
IntPtr prevAppWindow = GetLastActivePopup(activeAppWindow);
return IsWindowVisible(prevAppWindow) ? prevAppWindow : IntPtr.Zero;
}
public static void FocusToPreviousWindow()
{
IntPtr prevWindow = GetPreviousWindow();
if (prevWindow != IntPtr.Zero)
SetForegroundWindow(prevWindow);
}
...
private static void OnHotKeyFired()
{
FocusToPreviousWindow();
SendKeys.SendWait("^(c)");
_viewModel.Input = Clipboard.GetText();
new UIWindow(_viewModel).ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
但我不能让SendKeys工作.在大多数应用程序中没有任何好处,这意味着ctrl-c不会被解雇.在Ms Word中,当执行SendWait时,我的文档中插入了版权符号(c).
更新:
我尝试过WM_COPY和SendMessage:
private static void OnHotKeyFired()
{
IntPtr handle = GetPreviousWindow();
SendMessage(handle, WM_COPY, IntPtr.Zero, IntPtr.Zero);
_viewModel.Input = Clipboard.GetText();
...
Run Code Online (Sandbox Code Playgroud)
它适用于Word但不适用于Excel,Notepad,Visual Studio
SendKeys.SendWait("^(c)");
Run Code Online (Sandbox Code Playgroud)
这不会发送Ctrl + C,也会发送括号.你可能意味着"^{c}",花括号而不是圆括号.否则Word插入版权符号的原因,它会自动更正(c)到©.固定:
SendKeys.SendWait("^c");
Run Code Online (Sandbox Code Playgroud)
如果您仍有问题,可能会,然后阅读SendKeys的MSDN文章.它建议使用.config文件,以便它使用不同的方式来注入击键.SendInput()比后来的Windows版本上的日志钩子效果更好.
| 归档时间: |
|
| 查看次数: |
887 次 |
| 最近记录: |