![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
System Tray........... [D7, Win2k]
-=@ndrew=- © (2003-08-29 09:42:00)
уважаемые мастера, подскажите возможно ли скрыть из трея иконку чужого приложения, чтобы ее там не было видно.....
Plok (2003-09-04 16:01:00) [1]
Да я понимаю, что рано, но все таки интересно стало, можно ли такое вообще воплотить :-)
DVM (2003-09-04 10:53:00) [2]
Для чужого приложения:
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;
DVM (2003-09-04 10:51:00) [3]
Ну............Нет слов!!!!!!!!!!!!!!!!
Ты сам себе противоречишь и ответы читаешь невнимательно!!!!
1)
> у меня в приложенииесть компонент с иконкой, и нужно, чтобы
> при нажатии кнопки иконка проподала из trey"я
2)
> уважаемые мастера, подскажите возможно ли скрыть из трея
> иконку чужогоприложения
3) Откуда берется WND????
Я же писал:
> Заодно уж Handle окна можно получить с помощью FindWindow()
> по его классу или заголовку.
Если это твое приложение, то WND - это HANDLE. Но так как написано выше убирать иконку - УЖЕ ИЗВРАЩЕНИЕ!!!
Для этого есть просто NIM_Delete!!!
Ты извини, конечно, но рановато тебе такими вещами заниматься!
Plok (2003-09-04 07:32:00) [4]
???????????????????????????
Plok (2003-09-03 15:48:00) [5]
to DVM
> GetWindowThreadProcessID(WND, @ID);
откуда тогда здесь WND?? к чему оно вообще относится??
у меня в приложении есть компонент с иконкой, и нужно, чтобы при нажатии кнопки иконка проподала из trey"я, мне не нужны стандартные средства компонента, потому что приложение экспериментальное..... а вообще я хотел убрать из трея иконку любого постороннего приложения, к примеру ReGet"a...
если Вам не трудно помогите это воплотить...
DVM (2003-09-03 13:59:00) [6]
Я имею ввиду вот так:
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 13:21:00) [7]
Вы имеете в виду вот так:
var
Form1: TForm1;
PID:dword;
implementation
{$R *.dfm}
function EnumWindowsCallbackNotify(window:hwnd;pid:dword):bool;stdcall;
var {
DVM (2003-09-03 13:04:00) [8]
var PID:DWORD;
begin
GetWindowThreadProcessID(WND, @PID);
end;
вот этот PID и надо подставить в KillNotify.
И не надо трогать EnumWindowsCallbackNotify!
Plok (2003-09-03 12:53:00) [9]
а вот тут покажите мне ошибку, пожалуйста...
var
Form1: TForm1;
wind:Hwnd;
hand:dword;
implementation
{$R *.dfm}
function EnumWindowsCallbackNotify(window:hwnd;pid:dword):bool;stdcall;
var {
DVM (2003-09-03 12:36:00) [10]
Ты вообще смотрел код написанный выше? Строка GetWindowThreadProcessID() не на какие мысли не наводит? :)
Заодно уж Handle окна можно получить с помощью FindWindow() по его классу или заголовку.
Plok (2003-09-03 12:21:00) [11]
подскажите тогда как получмть PID??????????
DVM (2003-09-03 12:16:00) [12]
Ну что не понятно то? Вызываешь procedure KillNotify(pid:dword);
где PID - PID нужного процесса. Как получить PID, зная название окна или имя запускаемого файла это другой вопрос.
Plok (2003-09-03 11:54:00) [13]
людииииииии ну объясните человеку как это работает....
Plok (2003-09-03 11:29:00) [14]
что-то я тутсовсем не могу понять, чью иконку этот текст закрывает??? и что никто не может привести более подробр\ный пример???
Plok (2003-09-03 10:45:00) [15]
а кто-нибудь может подробней объяснить.....
на примере какой-нибудь проги.......
Song (2003-09-03 08:55:00) [16]
Оригинально..
-=@ndrew=- (2003-09-03 08:51:00) [17]
огромное спасибо!!!!!
DVM (2003-08-29 10:35:00) [18]
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