Вызывает другое приложение для копирования данных в буфер обмена - PullRequest
1 голос
/ 29 августа 2010

Я пытаюсь программно заставить внешнее приложение WinForms скопировать свои данные в буфер обмена, и это сводит меня с ума.

Поскольку нажатие Ctrl-C в приложении делает правильную вещь, я былпытаюсь отправить ctrl-c с помощью моего приложения на 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);

Автоматический запуск Spy ++ ->

 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 Ответ

1 голос
/ 29 августа 2010

Вы можете использовать PostMessage

Или попробуйте SendInput , хотя тогда вы должны сначала выделить целевое окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...