Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

System Tray...........   Найти похожие ветки 

 
-=@ndrew=-   (2003-08-29 09:42) [0]

уважаемые мастера, подскажите возможно ли скрыть из трея иконку чужого приложения, чтобы ее там не было видно.....


 
DVM ©   (2003-08-29 10:35) [1]

procedure KillNotify(pid:dword);
begin {убираем знчок}
EnumWindows(@enumwindowscallbacknotify,pid);
end;

function EnumWindowsCallbackNotify(window:hwnd;pid:dword):bool;stdcall;
var {вспомогательная callback-функция для EnumWindows}
winpid:dword;{Вспомогательная переменная}
NID:NotifyIcondata;{Структура, отвечающая за иконку}
cntr:integer;{Счётчик}
begin
result:=true;
NID.cbSize:=sizeof(nid);
GetWindowThreadProcessId(window,@winpid); {получаем процесс (PID) для окна}
if winpid=pid then {если окно принадлежит нашему процессу}
begin
result:=false;
nid.Wnd:=window; {Заполняем поле, отвечающее за окно-владельца}
{перебор (до описателя окна, и хотя можно покрыть весь диапазон, но...)}
for cntr:=1 to window do
begin
NID.uID:=cntr;{ID! Мы его не знаем, и поэтому перебор}
if Shell_NotifyIcon(NIM_Delete,@NID) then break; {удаляем иконку}
end;
end;
end;

подробнее тут:

http://www.programme.ru/archive/2001/3/032001_1.phtml


 
-=@ndrew=-   (2003-09-03 08:51) [2]

огромное спасибо!!!!!


 
Song ©   (2003-09-03 08:55) [3]

Оригинально..


 
Plok   (2003-09-03 10:45) [4]

а кто-нибудь может подробней объяснить.....
на примере какой-нибудь проги.......


 
Plok   (2003-09-03 11:29) [5]

что-то я тутсовсем не могу понять, чью иконку этот текст закрывает??? и что никто не может привести более подробр\ный пример???


 
Plok   (2003-09-03 11:54) [6]

людииииииии ну объясните человеку как это работает....


 
DVM ©   (2003-09-03 12:16) [7]

Ну что не понятно то? Вызываешь procedure KillNotify(pid:dword);
где PID - PID нужного процесса. Как получить PID, зная название окна или имя запускаемого файла это другой вопрос.


 
Plok   (2003-09-03 12:21) [8]

подскажите тогда как получмть PID??????????


 
DVM ©   (2003-09-03 12:36) [9]

Ты вообще смотрел код написанный выше? Строка GetWindowThreadProcessID() не на какие мысли не наводит? :)

Заодно уж Handle окна можно получить с помощью FindWindow() по его классу или заголовку.


 
Plok   (2003-09-03 12:53) [10]

а вот тут покажите мне ошибку, пожалуйста...

var
Form1: TForm1;
wind:Hwnd;
hand:dword;

implementation

{$R *.dfm}
function EnumWindowsCallbackNotify(window:hwnd;pid:dword):bool;stdcall;
var {


 
DVM ©   (2003-09-03 13:04) [11]

var PID:DWORD;
begin
GetWindowThreadProcessID(WND, @PID);
end;

вот этот PID и надо подставить в KillNotify.

И не надо трогать EnumWindowsCallbackNotify!


 
Plok   (2003-09-03 13:21) [12]

Вы имеете в виду вот так:

var
Form1: TForm1;
PID:dword;

implementation

{$R *.dfm}
function EnumWindowsCallbackNotify(window:hwnd;pid:dword):bool;stdcall;
var {


 
DVM ©   (2003-09-03 13:59) [13]

Я имею ввиду вот так:

var
Form1: TForm1;
ID: dword;

implementation

{$R *.dfm}

function EnumWindowsCallbackNotify(window:hwnd;pid:dword):bool;stdcall;
var {вспомогательная callback-функция для EnumWindows}
winpid:dword;{Вспомогательная переменная}
NID:NotifyIcondata;{Структура, отвечающая за иконку}
cntr:integer;{Счётчик}
begin
result:=true;
NID.cbSize:=sizeof(nid);
GetWindowThreadProcessId(window,@winpid); {получаем процесс (PID) для окна}
if winpid=pid then {если окно принадлежит нашему процессу}
begin
result:=false;
nid.Wnd:=window; {Заполняем поле, отвечающее за окно-владельца}
{перебор (до описателя окна, и хотя можно покрыть весь диапазон, но...)}
for cntr:=1 to window do
begin
NID.uID:=cntr;{ID! Мы его не знаем, и поэтому перебор}
if Shell_NotifyIcon(NIM_Delete,@NID) then break; {удаляем иконку}
end;
end;
end;

procedure KillNotify(pid:dword);
begin {убираем знчок}
EnumWindows(@enumwindowscallbacknotify,pid);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
GetWindowThreadProcessID(WND, @ID);
KillNotify(ID);
end;


 
Plok   (2003-09-03 15:48) [14]

to DVM

> GetWindowThreadProcessID(WND, @ID);

откуда тогда здесь WND?? к чему оно вообще относится??
у меня в приложении есть компонент с иконкой, и нужно, чтобы при нажатии кнопки иконка проподала из trey"я, мне не нужны стандартные средства компонента, потому что приложение экспериментальное..... а вообще я хотел убрать из трея иконку любого постороннего приложения, к примеру ReGet"a...
если Вам не трудно помогите это воплотить...


 
Plok   (2003-09-04 07:32) [15]

???????????????????????????


 
DVM ©   (2003-09-04 10:51) [16]

Ну............Нет слов!!!!!!!!!!!!!!!!
Ты сам себе противоречишь и ответы читаешь невнимательно!!!!
1)

> у меня в приложении есть компонент с иконкой, и нужно, чтобы
> при нажатии кнопки иконка проподала из trey"я

2)

> уважаемые мастера, подскажите возможно ли скрыть из трея
> иконку чужого приложения

3) Откуда берется WND????
Я же писал:

> Заодно уж Handle окна можно получить с помощью FindWindow()
> по его классу или заголовку.

Если это твое приложение, то WND - это HANDLE. Но так как написано выше убирать иконку - УЖЕ ИЗВРАЩЕНИЕ!!!
Для этого есть просто NIM_Delete!!!

Ты извини, конечно, но рановато тебе такими вещами заниматься!


 
DVM ©   (2003-09-04 10:53) [17]

Для чужого приложения:

procedure TForm1.Button1Click(Sender: TObject);
begin
GetWindowThreadProcessID(Findvindow(nil, "заголовок того приложения"), @ID);
KillNotify(ID);
end;

Для твоего
procedure TForm1.Button1Click(Sender: TObject);
begin
GetWindowThreadProcessID(HANDLE, @ID);
KillNotify(ID);
end;


 
Plok   (2003-09-04 16:01) [18]

Да я понимаю, что рано, но все таки интересно стало, можно ли такое вообще воплотить :-)



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.031 c
3-40783
Geugenk
2003-10-26 15:22
2003.11.13
Есть какие-то свойства у Ttable которые отключают отличие значени


14-41960
REA
2003-10-16 16:44
2003.11.13
Классы


6-41846
TOL-12
2003-09-12 14:08
2003.11.13
Мой чат


8-41767
DiK
2003-07-07 00:41
2003.11.13
Уменьшить картинку на Image


1-41614
vic_vm
2003-10-25 20:29
2003.11.13
Не могу перевести C++ код на Delphi