Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    [C++] Inviare WM_LBUTTONDOWN a child window in finestra qualsiasi

    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!

  2. #2
    Se fosse una semplice immagine ?

    prova a mandare STN_CLICKED tramite WM_COMMAND

    http://msdn.microsoft.com/en-us/library/bb760784(v=VS.85).aspx

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    mmm

    ci avevo pensato...ma se fosse un immagine, sarebbe un common control => child window.

    Comunque tentar non nuoce, intanto se non funziona ho visto che forse può centrare c'è l'input è inviato da un altro thread...forse questa può aiutare:

    http://msdn.microsoft.com/en-us/library/ms681956(VS.85).aspx

    cosa dici?

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Forse se mandi un sendmessage cn 0x00050005 ti funge.
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    domani provo..perchè adesso sono stanchiissimo

    domani provo..perchè adesso sono stanchiissimo, grazie dell'interressamento!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.