J'ai le code suivant qui fonctionne bien dans le bloc-notes, mais pas dans WORD !!comment puis-je simuler CTRL + C en C#
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", SetLastError = true)]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
[DllImport("kernel32.dll")]
public static extern uint GetCurrentThreadId();
[DllImport("user32.dll")]
public static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach);
[DllImport("user32.dll")]
public static extern IntPtr GetFocus();
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam);
// second overload of SendMessage
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, out int wParam, out int lParam);
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
public const uint WM_GETTEXT = 0x0D;
public const uint WM_GETTEXTLENGTH = 0x0E;
public const uint EM_GETSEL = 0xB0;
IntPtr hWnd = WinUser.GetForegroundWindow();
uint processId;
uint activeThreadId = WinUser.GetWindowThreadProcessId(hWnd, out processId);
uint currentThreadId = WinUser.GetCurrentThreadId();
WinUser.AttachThreadInput(activeThreadId, currentThreadId, true);
IntPtr focusedHandle = WinUser.GetFocus();
WinUser.AttachThreadInput(activeThreadId, currentThreadId, false);
int len = WinUser.SendMessage(focusedHandle, WinUser.WM_GETTEXTLENGTH, 0, null);
StringBuilder sb = new StringBuilder(len);
int numChars = WinUser.SendMessage(focusedHandle, WinUser.WM_GETTEXT, len + 1, sb);
int start, next;
string selectedText = "";
WinUser.SendMessage(focusedHandle, WinUser.EM_GETSEL, out start, out next);
try
{
selectedText = sb.ToString().Substring(start, next - start);
}
malheureusement, les déclarations ci-dessus "{Microsoft Word}" lors de la sélection d'un texte dans Word ou tout autre "richtextbox". Comment CTRL + C le fait-il?
REMARQUE: Cela fonctionne très bien dans le bloc-notes ou sur n'importe quel éditeur de texte simple.
Voulez-vous simuler une pression de touche ou des données de copie? – Benny
Non, je veux juste copier les données d'une autre fenêtre. Sans utiliser CTRL + C, au lieu de faire ce qui précède. – Anand
Je ne peux pas croire quelqu'un a voté cette question et il y a plus de 1K vues !! .. – Anand