PDA

View Full Version : come windows gestisce il "copia e incolla"...


Frank1962
28-09-2003, 20:04
come da titolo, stò cercando di riuscire a "copiare" letteralmente del testo da una semplicissima finestra che ho creato in C utilizzando l'API MessageBox ......in pratica vorrei fare una specie di "selezione" della zona dove si trova la finestra per poi poter fare un "copia e incolla" su un txt salvandomi quindi tutto il testo "C++ Frame", "Cerca di copiarmi se ci riesci! ^_^" e anche l'Ok del button!! :D

Ho allegato un'immagine che dovrebbe, in teoria, indicare quello che voglio fare .....come vedete se provo a selezionare la finestra questa diventa inattiva e non riesco, ovviamente, a selezionare il testo! (ho preso l'immagine con il tasto stamp, il puntatore del mouse cmq dovrebbe essere in basso a destra)

...dite che è possibile ? .....sono gg che cerco per internet qualche api che possa essermi utile ma non ho trovato nulla :(

ciao e grazie all'eventuale benefattore che riuscirà a darmi qualche dritta per questo epico :D dilemma!


PS: so che può sembrare un problema del c****, infatti lo è :D , però mi serve saperlo cmq per proseguire la crezione di un programma che stò facendo...

cionci
28-09-2003, 21:07
Per la clipboard è facilissimo...ci sono le API: OpenClipboard, EmptyClipboard, SetClipboardData, GetClipboardData, CloseClipboard.
Per prendere tutti i testi di una finestra è un po' più complicato...ci penso un po'...

ri
28-09-2003, 23:30
uhm.. pensandoci così al volo mi sa che si dovrebbe risalire la catena, partendo dalla finestra e cercando ricorsivamente i figli, e per ognuno riconoscere che tipo di oggetto è, e se è un oggetto con una parte testuale recuperarne il testo
però ho sonno e non mi va di pensarci troppo, l'mfc non mi piace granchè :)

cionci
29-09-2003, 08:45
Originariamente inviato da ri
l'mfc non mi piace granchè :)
Lo deve fare con le API...non con MFC...

cionci
29-09-2003, 08:50
Per ottenere tutti i figli di un hWnd c'è EnumChildWindows...a quel punto ti basta richiedere su ogni child window un GetWindowText e dovresti essere a cavallo... Per stampare le posizioni giuste del testo devi costruirti la stampa in base a GetWindowRect...

ri
29-09-2003, 08:50
uhm, tieni ragione pure te... ok, da oggi non rispondo più 5 minuti prima di andare a letto :p

cmq... con le api si fa comunque in questo modo...

misterx
29-09-2003, 12:19
non è semplicissimo ma prova con:



char MioTesto[254];


SendMessage(hWnd,WM_GETTEXT,sizeof(MioTesto),(long)MioTesto);



ovviamente hWnd te lo devi ricavare

Frank1962
30-09-2003, 04:38
ho provato a mandare un SendMessage (ovviamente mettendo l'handle della finestra manualmente) ma mi da sempre un errore:

->fatal error C1083: impossibile aprire il file libreria dei tipi "...\Vc7\PlatformSDK\lib\user32.lib": Errore durante il caricamento della libreria DLL dei tipi<-

...che cosa può essere ? il file user32.lib si trova nella cartella lib! :(


il codice che uso è:

#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winuser.h>
#import <user32.lib>


int WINAPI WinMain()
{
char MioTesto[254];
LRESULT SendMessage(000805E6,WM_GETTEXT, WPARAM wParam, LPARAM lParam);
return 0;
}

..come compilatore uso quello del .NET ...in cosa sbaglio ? :confused:

Frank1962
30-09-2003, 04:47
Originariamente inviato da cionci
Per ottenere tutti i figli di un hWnd c'è EnumChildWindows...a quel punto ti basta richiedere su ogni child window un GetWindowText e dovresti essere a cavallo... Per stampare le posizioni giuste del testo devi costruirti la stampa in base a GetWindowRect...
...funzionerà anche per delle finestre di programmi scritti in linugaggio java ? ...con lo Spy++ quando seleziono la finestra di un programma fatto in java mi da solo l'handle della finestra principale e non quella dei singoli componenti! ...cosa che poi non ne ho mai capito il perchè :muro:

cionci
30-09-2003, 11:12
Sinceramente non lo so, probabilmente Java non traduce i widget presenti sulla finestra in finestre windows standard e le gestisce per conto suo (come se la finestra intera fosse un bitmap e clickando in un certo punto del bitmap si scatenano certi eventi, fosse così alllora capisco perchè sono così lente le interfacce in Java)...