[C++/MFC Only] Vreau sa ascund o iconita din tray....

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.

[C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde rilley » 11 Feb 2010, 13:51

[C++/MFC Only] Vreau sa ascund o iconita din tray....

Buna,

Vreau sa ascund o iconita din tray(de langa ceas), atunci cand se afiseaza, ea nu se afiseaza tot timplul, (se deschide prin intermediul unui process deschis, dar nu vreau sa fie inchis acel process)
Nu vreau sa folosesc softuri(PS Tray Factory....), vreau sa fac codu meu.
Daca se poate sa fie in C++/MFC Only... (ca in consola nu prea renteaza), sau DLL!!!

Functionarea lui:
Sa verifice cand apar iconite noi in tray(dar sa nu fie cu ciclu while, sa consume din CPU, sa fie prin Message LOOP.... sau asa ceva)
Cand apare iconita noua, sa ii verifice "TOOLTIP`U" si "WINDOW CLASS`u", si daca corespund cu ce informatie ii dau eu in codul sursa, iconita sa nu se afiseze, sau sa fie ascunsa. (Poate sa verifice si procesul dar acela nu vreau sa il inchid)


MULTUMESC MULT!
rilley
Junior
Junior
 
Mesaje: 11
Membru din: 11 Feb 2010, 01:24

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde Ovidiu Cucu » 14 Feb 2010, 22:24

Daca iconitele apartin de aplicatia ta, atunci poti sa le pui sau le scoti dupa cum vrea muschii tai folosind functia Shell_NotifyIcon.
Daca nu, deci sunt puse din alta aplicatie (proces), problema se complica si se poate rezolva cu una din tehnicile, mult iubite de catre hackeri, numite "DLL Injection and API Hooking".
"Windows via C/C++" a lui Jeffrey Richter are pentru asta dedicat un capitol intreg.

// desi, eu cred, nu-i o treaba prea simpla pentru cineva care inca oscileaza intre "C++/MFC only", "consola" si... "DLL". ;)
Ovidiu Cucu
Microsoft MVP - Visual C++
Avatar utilizator
Ovidiu Cucu
Fondator
Fondator
 
Mesaje: 2220
Membru din: 11 Iul 2007, 16:10
Localitate: Iasi

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde rilley » 15 Feb 2010, 12:20

Multumesc pentru raspuns,

Iconita nu apartine de aplicatia mea, ci apartine de un process anume.

Am sa incerc metoda ta, daca voi reusi.

Salut.

//Daca mai are alcineva alte ideei puteti posta.
rilley
Junior
Junior
 
Mesaje: 11
Membru din: 11 Feb 2010, 01:24

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde MrSmersh » 15 Feb 2010, 14:25

Acuma eu sa zic (normal suparat ca Ovidiu a intrat pe teritoriul meu cu Richter :biggrin: ), bas injectii? Intradevar ar merge da e o metoda destul de delicata.
Eu m-as uita cum zic la explorer sa faca always hide la icon din tray... Am un feeling ca e o setare in registry, si codeguru nu ma contrazice http://www.codeguru.com/forum/archive/index.php/t-306661.html. Adevarat va merge dupa primul restart, sau kil de explorer, dar poate in cazul asta e acceptabil.
Avatar utilizator
MrSmersh
Membru++
Membru++
 
Mesaje: 267
Membru din: 20 Iul 2007, 10:18
Localitate: Timisoara

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde rilley » 15 Feb 2010, 14:40

Exista asa ceva?

Sa ascunzi o iconita anume, prin registri?
Dar nu ca la windows 7, ca il pune intr-un buton (Notification Area Icons)...
rilley
Junior
Junior
 
Mesaje: 11
Membru din: 11 Feb 2010, 01:24

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde MrSmersh » 15 Feb 2010, 16:42

Daca te referi la icon din tray adica de linga ceas merge din registry. Deci din notification area, la fel ii spune si in 7. Celelalte si pe celelalte OS e relativ complex sa le faci "uitate".
Avatar utilizator
MrSmersh
Membru++
Membru++
 
Mesaje: 267
Membru din: 20 Iul 2007, 10:18
Localitate: Timisoara

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde rilley » 15 Feb 2010, 18:55

Da ma refer sa ascund o anumita iconita (1 singura) de langa ceas care nu apartine windowsului.
rilley
Junior
Junior
 
Mesaje: 11
Membru din: 11 Feb 2010, 01:24

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde cristianamarie » 15 Feb 2010, 23:28

rilley scrie:Vreau sa ascund o iconita din tray....

Cod: Selectaţi tot
BOOL DeleteTrayIcon(HWND hWnd, UINT uID) {
  NOTIFYICONDATA nid = {0};
  nid.hWnd = hWnd;
  nid.uID = uID;
  return Shell_NotifyIcon(NIM_DELETE, &nid);
}


rilley scrie:Sa verifice cand apar iconite noi in tray(dar sa nu fie cu ciclu while, sa consume din CPU, sa fie prin Message LOOP.... sau asa ceva)

Presupun ca vrei un callback si/sau notificare. Nasol. Nu exista. Fereastra cred ca variaza de la Windows la Windows; pe Windows 7 e un toolbar, in teorie ai nevoie de un hook WH_CALLWNDPROCRET si te uiti la CWPRETSTRUCT dupa un hwnd care are clasa toolbar si a procesat cu succes mesajul TB_ADDBUTTONS. Sau orice alt mesaj de toolbar care altereaza numarul butoanelor. In momentul asta, iti informezi propriul exe cu un mesaj global (RegisterWindowsMessageW etc) si atunci esti informat ca s-a schimbat numarul butoanelor. Poti trimite cu acest mesaj in wParam direct HWND-ul de la toolbar-ul care tine tray icons ca sa poti examina direct.

rilley scrie:Cand apare iconita noua, sa ii verifice "TOOLTIP`U" si "WINDOW CLASS`u", si daca corespund cu ce informatie ii dau eu in codul sursa, iconita sa nu se afiseze, sau sa fie ascunsa. (Poate sa verifice si procesul dar acela nu vreau sa il inchid)
La fel, poti arma o structura, o aloci, si mesaj global, sau (mai bine) RegisterClipboardFormat, scrii in clipboard (din hook) ce iti trebuie tie si din nou mesaj de informare la aplicatia ta, care preia din clipboard ce a scris hook-ul.[/quote]

Noroc.
Fişiere ataşate
hook.png
hook.png (54.81 KiB) Vizualizat de 203 ori
Nuclear launch detected
Avatar utilizator
cristianamarie
Membru++
Membru++
 
Mesaje: 292
Membru din: 12 Mar 2009, 18:47
Localitate: Iasi

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde rilley » 16 Feb 2010, 00:24

Destul de complicat....
Poti incerca tu sa il faci, daca nu iti este greu?

Multumesc.
rilley
Junior
Junior
 
Mesaje: 11
Membru din: 11 Feb 2010, 01:24

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde Ovidiu Cucu » 16 Feb 2010, 00:34

rilley scrie:Destul de complicat...
Poti incerca tu sa il faci, daca nu iti este greu?

Pana una-alta trage, te rog, un ochi aici: viewtopic.php?f=22&t=387
Ovidiu Cucu
Microsoft MVP - Visual C++
Avatar utilizator
Ovidiu Cucu
Fondator
Fondator
 
Mesaje: 2220
Membru din: 11 Iul 2007, 16:10
Localitate: Iasi

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde rilley » 16 Feb 2010, 00:57

Offtopic: Da ce e drept, inca nu mi-am dat silinta, apeland cel mai probabil la generozitatea unora, dar topicul cu siguranta nu se refera la tema pentru scoala.
rilley
Junior
Junior
 
Mesaje: 11
Membru din: 11 Feb 2010, 01:24

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde Ovidiu Cucu » 16 Feb 2010, 01:21

rilley scrie:Offtopic: Da ce e drept, inca nu mi-am dat silinta, apeland cel mai probabil la generozitatea unora, dar topicul cu siguranta nu se refera la tema pentru scoala.


[ offtopic ]
Macar sa ne spui si noua ce ai incercat si n-ai reusit. Atunci poate ne dam si noi silinta.
Ovidiu Cucu
Microsoft MVP - Visual C++
Avatar utilizator
Ovidiu Cucu
Fondator
Fondator
 
Mesaje: 2220
Membru din: 11 Iul 2007, 16:10
Localitate: Iasi

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde cristianamarie » 16 Feb 2010, 10:45

rilley scrie:Destul de complicat....
Ce am zis eu, e. Nu ca asta ar fi singura cale, poate sint altele mai bune si eu bat cimpii.
rilley scrie:Poti incerca tu sa il faci, daca nu iti este greu?
Multumesc.
Ce e drept, simplu nu e. Iar eu lucrez pe bani (si cred ca marea majoritate de pe forum gindesc la fel, parerea mea).
Sfaturi, hints, samples, dau pe forums. Produse la cheie, nu.

***
Ovidiu are dreptate. Chiar daca nu se incadreaza pentru tine la capitolul "Tema pentru acasa", tot in asta intra cam orice poate fi vazut ca "eu nu pot, fa tu". (Eu inteleg ca acolada deschisa de mine e neplacuta. Dar asa stau lucrurile, fara nici o suparare).

Daca tu ai incerca sa scrii codul, si ajungi in punctul in care "in ****-sa pe gheata, hook-ul ala imi blocheaza sistemul, nu intra in functie, am postat mesajul da' nu ajunge" etc., acolo putem sa ne dam cu parerea.
Nuclear launch detected
Avatar utilizator
cristianamarie
Membru++
Membru++
 
Mesaje: 292
Membru din: 12 Mar 2009, 18:47
Localitate: Iasi

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde Dragos Cojocari » 16 Feb 2010, 14:45

rilley scrie:Offtopic: Da ce e drept, inca nu mi-am dat silinta, apeland cel mai probabil la generozitatea unora, dar topicul cu siguranta nu se refera la tema pentru scoala.

Titlul postului si modul in care pui problema duc la rapsunsuri ca cele de mai sus sau ca al meu de aici: viewtopic.php?f=14&t=1310

Lumea de pe aici e de treaba si ajuta dar conditia necesara ( nu neaparata si suficienta) e sa vada un minim de efort si bunavointa din partea ta. Iar chestii de genul asta sigur nu iti vor aduce brownie points.

Destul de complicat....
Poti incerca tu sa il faci, daca nu iti este greu?


:thumbdown:
No hai la treaba
Avatar utilizator
Dragos Cojocari
Fondator
Fondator
 
Mesaje: 727
Membru din: 11 Iul 2007, 14:11
Localitate: Cluj-Napoca

Re: [C++/MFC Only] Vreau sa ascund o iconita din tray....

Mesajde mateia » 05 Mar 2010, 17:21

Salutare,

Ti-ai rezolvat problema ? Uita-te te rog aici:

http://stackoverflow.com/questions/1971 ... g-position
http://www.codeproject.com/KB/applicati ... yInfo.aspx
http://www.mlin.net/files/TraySaverSource.zip
http://www.mlin.net/files/TraySaverB10.exe

Daca nici asta nu-ti ajunge ca sa rezolvi problema, da un semnal.

Numai bine.
mateia
Junior
Junior
 
Mesaje: 17
Membru din: 17 Ian 2009, 18:13
Localitate: Sibiu

Următorul

Înapoi la MFC, ATL, WTL si GDI+.

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 1 vizitator