Форум: "Система";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.034 c