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

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
rilley
Junior
Junior
Posts: 22
Joined: 11 Feb 2010, 01:24
Judet: Harghita

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

Post by 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!



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

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

Post by 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". ;)

rilley
Junior
Junior
Posts: 22
Joined: 11 Feb 2010, 01:24
Judet: Harghita

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

Post by 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.

User avatar
MrSmersh
Microsoft MVP
Microsoft MVP
Posts: 289
Joined: 20 Jul 2007, 10:18
Location: Timisoara
Contact:

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

Post by 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/i ... 06661.html. Adevarat va merge dupa primul restart, sau kil de explorer, dar poate in cazul asta e acceptabil.

rilley
Junior
Junior
Posts: 22
Joined: 11 Feb 2010, 01:24
Judet: Harghita

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

Post by 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)...

User avatar
MrSmersh
Microsoft MVP
Microsoft MVP
Posts: 289
Joined: 20 Jul 2007, 10:18
Location: Timisoara
Contact:

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

Post by 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".

rilley
Junior
Junior
Posts: 22
Joined: 11 Feb 2010, 01:24
Judet: Harghita

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

Post by rilley » 15 Feb 2010, 18:55

Da ma refer sa ascund o anumita iconita (1 singura) de langa ceas care nu apartine windowsului.

User avatar
cristianamarie
Membru++
Membru++
Posts: 480
Joined: 12 Mar 2009, 18:47
Judet: Iaşi
Location: Iasi

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

Post by cristianamarie » 15 Feb 2010, 23:28

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

Code: Select all

BOOL DeleteTrayIcon(HWND hWnd, UINT uID) {
  NOTIFYICONDATA nid = {0};
  nid.hWnd = hWnd;
  nid.uID = uID;
  return Shell_NotifyIcon(NIM_DELETE, &nid);
}
rilley wrote: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 wrote: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.
Attachments
hook.png
hook.png (54.81 KiB) Viewed 7069 times
Nuclear launch detected

rilley
Junior
Junior
Posts: 22
Joined: 11 Feb 2010, 01:24
Judet: Harghita

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

Post by rilley » 16 Feb 2010, 00:24

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

Multumesc.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

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

Post by Ovidiu Cucu » 16 Feb 2010, 00:34

rilley wrote:Destul de complicat...
Poti incerca tu sa il faci, daca nu iti este greu?
Pana una-alta trage, te rog, un ochi aici: http://www.codexpert.ro/forum/viewtopic.php?f=22&t=387

rilley
Junior
Junior
Posts: 22
Joined: 11 Feb 2010, 01:24
Judet: Harghita

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

Post by 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.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

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

Post by Ovidiu Cucu » 16 Feb 2010, 01:21

rilley wrote: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.

User avatar
cristianamarie
Membru++
Membru++
Posts: 480
Joined: 12 Mar 2009, 18:47
Judet: Iaşi
Location: Iasi

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

Post by cristianamarie » 16 Feb 2010, 10:45

rilley wrote: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 wrote: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

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

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

Post by Dragos Cojocari » 16 Feb 2010, 14:45

rilley wrote: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: http://www.codexpert.ro/forum/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:

mateia
Junior
Junior
Posts: 19
Joined: 17 Jan 2009, 18:13
Judet: Sibiu
Location: Sibiu

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

Post by 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.

Post Reply