Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.033 c
6-41859
mao
2003-09-11 11:09
2003.11.13
Сложно создать приложение для работы с локальной сетью?


14-42090
Denis
2003-10-23 13:25
2003.11.13
Как жить начинающему?


3-41102
Smolin
2003-10-23 09:53
2003.11.13
ADOconnection


3-40797
Tornado
2003-10-22 15:08
2003.11.13
Проверка наличия таблицы


6-41803
nefrit
2003-09-15 22:26
2003.11.13
Netbios





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский