Copy and Modify selected text in different application
Question
I have a windows application running at the backend. I have functions in this applications mapped to hot keys. Like if I put a message box into this function and give hot key as Alt+Ctrl+D. then on pressing Alt, Ctrl and D together the message box comes up. My application is working fine till this point.
Now I want to write a code inside this function so that when I am using another application like notepad, I select a particular line of text and press the hot key Alt + Ctrl + D it is supposed to copy the selected text append it with "_copied" and paste it back to notepad.
Anyone who has tried a similar application please help me with your valuable inputs.
Solution
Your question has two answers
How can my app set a global hotkey
You have to call an API funcion called RegisterHotKey
BOOL RegisterHotKey(
HWND hWnd, // window to receive hot-key notification
int id, // identifier of hot key
UINT fsModifiers, // key-modifier flags
UINT vk // virtual-key code
);
More info here: http://www.codeproject.com/KB/system/nishhotkeys01.aspx
How to get the selected text from the foreground window
Easiest way is to send crl-C to the window and then capture the clipboard content.
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
static public extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
.....
private void SendCtrlC(IntPtr hWnd)
{
uint KEYEVENTF_KEYUP = 2;
byte VK_CONTROL = 0x11;
SetForegroundWindow(hWnd);
keybd_event(VK_CONTROL,0,0,0);
keybd_event (0x43, 0, 0, 0 ); //Send the C key (43 is "C")
keybd_event (0x43, 0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);// 'Left Control Up
}
Disclaimer: Code by Marcus Peters from here: http://bytes.com/forum/post1029553-5.html
Posted here for your convenience.
OTHER TIPS
Use the Clipboard class to copy the contents to the clipboard, then paste in the notepad.
You could also write the contents to a text file and open it with notepad by running the notepad.exe application with the text file's path as a command line parameter.
I think you can use SendInput function to send the text to the target window or just the command to paste it if you have put it in clipboard before.