
Actualmente estoy desarrollando una aplicación, donde una de sus funciones es obtener el texto seleccionado (sombreado) de cualquier parte de Windows, sea navegadores, archivos de texto, o cualquier otro lugar donde se pueda sombrear el archivo.
En una anterior oportunidad (http://www.delphiacc...oradores-txt-)/), me ayudaron mucho sugiriéndome y dándome ejemplos con el visor de portapapeles, es decir, que el texto sombreado por el usuario fuera copiado al portapapeles, para luego traérmelo con un programa a través del visor clipboard. Lo cual me funcionó a la perfección.
En el proyecto en el cual estoy trabajando, el usuario usa una hotkey personalizada, que registra el programa, la cual es CTRL+Q. Cuando el usuario presiona las teclas de esta HotKey, por dentro del código del programa se simula el presionado de teclas CTRL+C. Lo cual me ha funcionado:
//Inicio del programa private { Private declarations } hotKeyCTRLQ: integer; VisorClipbrd: HWND; //Gestión de HotKeys (accesos directos) procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; //Captura HOtKey procedure CrearHotKeyCtrlQ; procedure DestruirHotKeyCtrlQ; //Gestión Clipboards procedure ObtenerValorClipboard; end; //Implementación de Métodos: procedure TformPrincipal.CrearHotKeyCtrlQ; begin hotKeyCtrlQ:= GlobalAddAtom('hotKeyCtrlQ_nombre'); RegisterHotKey(Handle, hotKeyCtrlQ, MOD_CONTROL, Ord('Q')); end; procedure TformPrincipal.DestruirHotKeyCtrlQ; begin UnRegisterHotKey(Handle, hotKeyCtrlQ); GlobalDeleteAtom(hotKeyCtrlQ); end; //Acá de detecta la HotKey presionada por el usuario, y la simulación CTRL+C procedure TformPrincipal.WMHotKey(var Msg: TWMHotKey); begin if Msg.HotKey = hotKeyCtrlQ then begin ClipBoard.Clear; repeat //Realiza iteraciones hasta que el usuario suelte los botones. until (GetAsyncKeyState(Ord('Q')) = 0) and (GetAsyncKeyState(VK_CONTROL) = 0); //Acá se hace la simulación de teclas CTRL+C keybd_event(VK_CONTROL,0,0,0); keybd_event(Ord('C'),0,0,0); keybd_event(Ord('C'),0,2,0); keybd_event(VK_CONTROL,0,2,0); //En lugar de la simulación de acá arriba, se colocaría la función de copiado (¡si se puede!) end; end;
Sin embargo, yo trabajo con una aplicación (desarrollada por una compañía ajena a mí), donde uno de los campos de edición (importantes para mi proyecto) bloquea las HotKeys CTRL+C, para copiar al portapapeles. Por lo que es indiferente de que el usuario presione CTRL+Q o CTRL+C, ya que el contenido no se copia al portapapeles.
Esto me motiva a preguntarles si existe alguna forma de copiar contenido al portapapeles sin usar los comandos CTRL+C. Quizás se podría llamar a la función misma de Windows para copiar, o con un código de bajo nivel, no lo se, estoy confundido


Estoy programando en delphi xe2 con windows 7.
Disculpen el testamento y gracias de antemano por la atención

