Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Cannot open Clipboard (https://www.clubdelphi.com/foros/showthread.php?t=72779)

broly7 11-03-2011 11:09:33

Cannot open Clipboard
 
Buenas, verán estoy trabajando con la uses clipbrd. Y según he leido por los foros cada vez que el portapapeles guarda o pega alguna cadena, debe mantener el APi visor desde el que hizo la última función, (o algo asi entendí). Y por eso me tira siempre este error del que estoy quemado.
Pongo las 2 últimas funciones desde donde vienen los errores:

Código Delphi [-]
Function CTRLC:string;
begin
wnd:=0;
wnd := FindWindow (Nil,'OtroProgramaexterno'); //Aquí cambia la ventana donde trabaja
if wnd<>0 then begin
BringWindowToTop(wnd);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event($43, 0, 0, 0); // Ctrl+'C'
keybd_event($43, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); 
end;
end;

E inmediátamente seguido ejecuto esta función:

Código Delphi [-]
Function CheckPaste:string;
var
S:string;
begin
S:=Clipboard.AsText;
if S = '' then //CHAN-CHAN! Aqui es donde sucede el error "Cannot open clipboard"
begin
form1.Timer1.Enabled:=false;
Showmessage('...');
end else
begin
Showmessage('...');
end;
end;

En cambio he porbado a ejecutar las 2 funciones por separado con 2 botones de acción y sí funciona.
Y el error creo que se da por lo que dije de que cambia el handle o algo.
Gracias, a ver si hay suerte y lo puedo solucionar.

PD: me he mirado 400 veces este hilo pero no he sacado nada en claro ya que no trabaja con el uses clipbrd. 1 Saludo. =)

Neftali [Germán.Estévez] 11-03-2011 12:37:53

¿Exactamente qué necesitas hacer?
¿Comunicarte entre las dos aplicaciones?
¿Puedes usar otro método que no sea el portapapeles?

broly7 11-03-2011 12:52:04

No puedo Neftali, tiene que ser con el portapapeles, porque trabajo con otra aplicación que yo no he creado, que contiene un campo de texto con el cual trabajo. Esta última función selecciona todo el supuesto texto con "ctrl-A"(no esta puesta en el topic), hace un ctrl-c igual que llenará o no llenará el portapapeles; para saber si lo he pegado, o por el contrario no lo he pegado usoesa función "Checkpaste" que mira en el clipboard si está lleno o vacío. Y siempre me ocurre ese error al llamar seguias esas 2 funciones.
Gracias

Neftali [Germán.Estévez] 11-03-2011 15:46:30

A esto me refería, a saber qué es lo que tienes que hacer. Que el campo sea de otra aplicación no quiere decir que no se pueda acceder. Creo que explorando ventanas podrías llegar a obtener el valor de ese campo, sin tener que pasarlo por el portapapeles.

broly7 11-03-2011 19:00:59

Con el TABULADOR te refieres? O inyectando algo en el proceso.

Neftali [Germán.Estévez] 12-03-2011 13:59:17

A partir de buscar y encontrar la ventana de la aplicación, creo que se pueden encontrar las "ventanas hijas" de esa y por ahí puedes llegar a controles que deriven de TWindows (por ejemplo un Edit) y acceder a ellos.
No se si eso te podría servir, pero creo que puede ser un camino viable.

broly7 12-03-2011 14:25:13

Y alguna forma de bypasear ese error?
Quizas jugando un poco mas con el clipboard, nose, la verdad necesito ayuda.

broly7 14-03-2011 18:19:38

Por si alguno en un futuo le sirve, lo he resuelto lo mas guarramente posible probando cosas. Y es llamando a la función que da error con un timer de 1ms por ejemplo, aunque sea muy guarro dejo la garantía de que funciona y seguro que a alguien le servirá.


La franja horaria es GMT +2. Ahora son las 13:24:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi