Premetto che sono vicino alla soluzione, ma mi sfugge qualcosa.
Se non avete voglia di leggere, bhe vi assicuro che è un problema interessante, vi consiglio di darci un occhio!
Mio cugino ha una cartella con dentro 6 giga di musica, un giorno mi fa: "Riesci a farmi un programma che se premo un tasto mi cancellala canzone che sto ascoltando, così posso filtare le canzoni belle dai 6 giga che ho finchè gioco".
Io gli dico che non ci sono problemi, avevo due soluzioni in mente:
1 creare una sorta di lettore musicale e tramite le hook globali capire se si preme un tasto, quindi cambiare il file in riproduzione (perchè altrimenti non si può cancellarlo) e cancellare il file.
2 scaricare un lettore musicale diverso da Windows Media Player, uno con interfaccia molto semplice, (io hoi scaricato yPlay, ecco l'interfaccia ), e leggere dal titolo tramite GetWindowText la canzone in riproduzione, aggiungere la path dove si trova la cartella delle canzoni (che viene spedita al programma da file) e fare un bel DeleteFile!
Prima però bisogna cambiare il file audio in riproduzione! Subito ho pensato a i tasti speciali della tastiera che lo consentono...ma yPlay non li supporta.
Così ho deciso di inviare un Wm_COMMAND con BT_CLICKED (o BN_CLICKED non mi ricordo xD) specificando l'HWND di yPlay, trovata con FindWindow() (che cerca la classe della finestrqa di yPlay FindWindow("ThunderRT6FormDC",NULL) ), poi mi sono accorto che yPlay è una finestra stupida! e piuttosto di fare la OWNER_DRAW sui bottoni, li ha creati a mano gestendo probabilmente la notifica del mouse.
Nietne paura Semplicemente ho cercato l'HWND che contiene questi "falsi bottoni", mediante un lungo lavoro di FindWindowEx(yPlay,Child_precedente,NULL,NULL);
Niente paura anche qui, ho scoperto che la ChildWindow che contiene i pulasanti si può trovare servendosi di questo:
HWND _1 = NULL, _2 = NULL;
win = (HWND)393874;
while(1)
{
_1 = FindWindowEx(win, _2,NULL,"");
if(_1 == NULL)
break;
RECT rect;
GetWindowRect(_1,&rect);
_2 = _1;
e la n-esima finstra che si ottiene (non mi ricordo il numero preciso) è SEMPRE la childwindow che cerco!
Soddisfatto, allora ho pensato: "bene basta inviare un semplice messaggio con SendMessage", ecco il codice:
HWND win = finstra della child window contenente i "pulsanti"
SHORT x, y;
x = 151;
y = 20;
DWORD param = (DWORD)x;
param |= (DWORD)y << 16;
SetCursorPos(rect.left + x, rect.top + y);
SendMessage(win,WM_LBUTTONDOWN,MK_LBUTTON,param);
SendMessage(win,WM_LBUTTONUP,MK_LBUTTON,param);
E invece niente da fareeeee...non capisco perché me lo sto chiedendo in tutte le lingue del mondo!!
Aspetto interessamenti, anche perché è interessante come problema!