PDA

View Full Version : [C Winapi] Multi Clipboard


girex
22-03-2008, 21:01
In pratica come dice la parola simula 9 diverse clipboard ognuna diversa dalle altre..

Il programma è quasi pronto ma non riesco ancora a risolvere due gravi problemi, descritti nei commenti del source...

in pratica sono 2:
non funziona il sendkeys
salvando del testo in una delle 9 clipboard
il contenuto delle altre viene corrotto...

http://www.evilsocket.net/nopaste/copy.php?key=5706424

andbin
22-03-2008, 22:43
Scusa se lo dico ma ... il tuo sorgente è un pochino delirante. Innanzitutto hai fatto una applicazione "console" ma questo potrebbe ancora andare. Poi comunque usi la tecnica del "polling" per testare la condizione dei tasti. Già qui non è certo ottimale. Se ben ricordo (ora non ho voglia/tempo di andare a controllare sulla documentazione ufficiale), GetClipboardData() non ritorna un puntatore ma un HANDLE.
Vedo che usi SendInput per sintetizzare un tasto .... in genere sarebbe buona cosa sintetizzare anche il key up, non solo il key down.

Il tutto è condito da codice molto LOLloso del tipo:
send_clip_text(clipboard[i - 112], strlen(clipboard[i - 112]));

(non potevi mettere VK_F1 al posto di 112 e fare la strlen magari nella funzione??)

o peggio da una funzione set_null a cui passi addirittura un puntatore triplo a char ... io lavoro in "C" da 9 anni e credo di aver visto un char*** ben poche volte. Non ho esaminato a fondo il tuo sorgente ma penso proprio che quel char*** sia inutile e che potevi farlo in altro modo quel set_null.

71104
22-03-2008, 23:18
quella funzione set_null deve averla scritta mentre era ubriaco :rotfl:

la riporto per intero, per la gioia dei lettori :D

void set_null(char ***clipboard)
{
int i = 0;
for(i = 0; i < 9; i++)
{
memset(*clipboard[i], 0x00, strlen(*clipboard[i]));
*clipboard[i] = NULL;
}
}



non vorrei fare la figura del solito alienato, ma... che per caso a Pasqua è tradizione fare scherzi o roba simile, tipo pesce d'Aprile...? :stordita:

no perché oggi è già la seconda BURLA pasquale che leggo sul forum; qui potete leggere la prima:
http://www.hwupgrade.it/forum/showthread.php?t=1706808
:asd:

girex
22-03-2008, 23:27
In primis ti rigrazio per il caloroso benvenuto, ebbene si era il mio primo post (o forse è proprio per questo che sei stato così poco ospitale?!).

2 - L'aplicazione è si una ConsoleApplication ma come hai ben potuto notare cè la funzione banner che nasconde la finestra per simulare il comportamento di un "demone"...

3 - Avrei preferito anch'io implementare il controllo dei tasti tramite la ricezione degli Interrupt della tastiera ma credo che sia più difficile o comunque non mi sono preoccupato di questo aspetto visto che i miei script vengono fatti per diletto (essendo minorenne non posso dedicarmi a lavori retribuiti).

4 - Cosa ti fa tanto ridere quel 112 al posto di VK_F1?
Sai che includendo la windows.h è completamente uguale scrivere 112 o VK_F1?

5 - Ho preferito passargli la lunghezza della stringa come parametro per questione di abitudine nient'altro. Senza dubbio è preferibile rispetto al mettere nella condizione del for i < strlen(str) in quanto si calcolerebbe la lunghezza di str ad ogni ciclo...

6 - In effetti si, quel set_null è mal implementato, ma non l'ho neanche provato e ripensandoci ci sono modi migliori per ottenere il risultato voluto..

7 - Complimenti lavori in C da 9 anni e sei un programmatore Java certificato senza dubbio sei qualificato.

8 - Nonostante ciò non credo tu abbia il diritto di sbeffeggiare (o almeno così ho interpretato io) un semplice user che chiede aiuto... anzi se sono sembrato uno di quelli chiedo aiuto sperando che mi risolvano tutto e io sto apposto e me ne vado chiedo IO scusa per primo, davvero, non volevo...

9 - Per la simulazione del SendKeys tramite il SendInput ho risolto con questa funzione :
VkKeyScan(clipboard[i])

10 - GetClipboardData ritornerà si un Handle, ma credo (dimmi se sbaglio, possibilissimo) che un HANDLE equivalga a un void* e quindi con un semplice cast ottengo l'equivalente stringa di testo della clipboard (e in effetti, funziona).

11 - Rimane ancora il problema che le altre clipboard al salvataggio di una si corrompono...

12 - AAArgh dimenticavo, non sintetizzo la keyup del tasto perchè non pensavo si dovesse fare (pensavo male) perchè a differenza del comportamento di keybd_event a me non sembra che il tasto rimanga premuto, in quando spara il testo e si ferma, non continua a sparare sempre le stesse lettere... (ripeto, pensavo male)

Con questo me ne vado, non vorrei essere sembrato offensivo, ma io si, mi sono sentito offeso nella lettura del tuo post.
Sarai anche più esperto di me, ma questo non ti dà la briga di sbeffeggiarmi...

Saluti!