导致另一个应用程序将数据复制到剪贴板

时间:2010-08-29 04:15:15

标签: .net winforms winapi clipboard

我正在尝试以编程方式使外部WinForms应用程序将其数据复制到剪贴板,这让我发疯。

由于在应用程序中按Ctrl-C做了正确的事情,我一直在尝试使用我的C#应用​​程序将ctrl-c发送到另一个应用程序。

这是我的命令序列。我使用Spy ++比较了这些消息,除了我的SendMessages显示为发送和接收之外,它匹配,而WinForm上显示的相同操作显示为已发布。

我的代码:

          NativeMethods.SendMessage(hwnd, WM_KEYDOWN, 0x00000011, 0x001D0001);
          NativeMethods.SendMessage(hwnd, WM_KEYDOWN, 0x00000043, 0x002E0001);
          NativeMethods.SendMessage(hwnd, WM_CHAR, 0x00000003, 0x002E0001);
          NativeMethods.SendMessage(hwnd, WM_KEYUP, 0x00000043, 0xC02E0001);
          NativeMethods.SendMessage(hwnd, WM_KEYUP, 0x00000011, 0xC01D0001);

间谍++自动运行 - >

 0059043C P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:322 yPos:54 [wParam:00000001 lParam:00360142]
 0059043C P WM_LBUTTONUP fwKeys:0000 xPos:322 yPos:54 [wParam:00000000 lParam:00360142]
 0059043C P WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:0 fUp:0 [wParam:00000011 lParam:001D0001]
 0059043C P WM_KEYDOWN nVirtKey:'C' cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:0 fUp:0 [wParam:00000043 lParam:002E0001]
 0059043C P WM_CHAR chCharCode:'3' (3) cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:0 fUp:0 [wParam:00000003 lParam:002E0001]
 0059043C P WM_KEYUP nVirtKey:'C' cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:1 fUp:1 [wParam:00000043 lParam:C02E0001]
 0059043C P WM_KEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:1 fUp:1 [wParam:00000011 lParam:C01D0001]

My Spy ++序列:

 0059043C S WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:299 yPos:52 [wParam:00000001 lParam:0034012B]
 0059043C R WM_LBUTTONDOWN
 0059043C S WM_LBUTTONUP fwKeys:MK_LBUTTON xPos:299 yPos:52 [wParam:00000001 lParam:0034012B]
 0059043C R WM_LBUTTONUP
 0059043C S WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:0 fUp:0 [wParam:00000011 lParam:001D0001]
 0059043C R WM_KEYDOWN
 0059043C S WM_KEYDOWN nVirtKey:'C' cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:0 fUp:0 [wParam:00000043 lParam:002E0001]
 0059043C R WM_KEYDOWN
 0059043C S WM_CHAR chCharCode:'3' (3) cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:0 fUp:0 [wParam:00000003 lParam:002E0001]
 0059043C R WM_CHAR
 0059043C S WM_KEYUP nVirtKey:'C' cRepeat:1 ScanCode:2E fExtended:0 fAltDown:0 fRepeat:1 fUp:1 [wParam:00000043 lParam:C02E0001]
 0059043C R WM_KEYUP
 0059043C S WM_KEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:1 fUp:1 [wParam:00000011 lParam:C01D0001]
 0059043C R WM_KEYUP

1 个答案:

答案 0 :(得分:1)

您可以使用PostMessage

或尝试SendInput,尽管如此,你必须先让目标窗口成为焦点。