Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];

Вниз

Вытаскивание иконки ИЗ ЛЮБОГО!!! окна   Найти похожие ветки 

 
DVM   (2003-01-24 18:25) [0]

Иконки я сначала выдергивал:
Icon := GetClassLong(Wnd, GCL_HICONSM);
Так можно получить не все иконки, например TheBat! иконку не отдавал.
Потом я добавил код, который использовал Игорь Шевченко в EnumFunctions. TheBat иконку отдала.
Но все равно некоторые программы (HomeSite4, Диспетчер задач от XP) иконки "не отдают". Как вытащить иконку ИЗ ЛЮБОГО окна?


 
DVM   (2003-01-26 00:42) [1]

Неужели никто не знает в чем дело?


 
}{enon   (2003-01-26 09:08) [2]

А что если это не иконка, а просто картинка на форме?


 
dvm   (2003-01-26 14:59) [3]

Если картинка то х.. с ней. Я написал конкретные программы - как из их окон вытащить иконки. Виндовая панель задач как то же берет.


 
}{enon   (2003-01-26 17:18) [4]

А что если взять иконку из EXE-шника?


 
dvm   (2003-01-26 18:02) [5]

Я уже думал над этим. Но... Если экзешник большой, то взятие иконки из экзешника меня не устраимвает - медленно (quake3.exe-очень медленно например).
К тому же окно не обязательно связано напрямую с экзешником.
И еще приложение же может менять иконку у окна во время работы программы, а экзешнике всегда одна и та же.
Нет тут дело в чем то другом.


 
}{enon   (2003-01-26 18:21) [6]

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


 
dvm   (2003-01-26 18:29) [7]


> Может получить изображение окна

Можно еще сфотографировать окно фотоаппаратом, потом сходить напечатать, положить в сканер, отсканировать и в фотошопе вырезать иконку :)))
Нет это все не то, да и медленно.




 
}{enon   (2003-01-26 18:32) [8]

Фотографируй на цифровой - будет быстрее :)
А почему это медленно, ведь можно взять только квадрат 16х16 и сохранить его.


 
dvm   (2003-01-26 18:37) [9]

А если заголовок окна у чела другой высоты (ну поменял он его в настройках оформления)?
Есть еще один минус: а если окно не видно на экране? Минимизировано например.
Не надо искать другой способ.


 
dvm   (2003-01-26 18:45) [10]

вобщем сейчас есть вот такой код:

IconSm := GetClassLong(Wnd, GCL_HICONSM);
if IconSm = 0 then
if SendMessageTimeOut(Wnd, WM_GETICON, ICON_SMALL, 0, SMTO_NORMAL, 300, IconSm) = 0 then IconSm := 0;
if IconSm <> 0 then
begin
Icon := TIcon.Create();
Icon.Handle := IconSm;
...
end;
end;

Вытаскивает не все иконки :((( Виндовая панель задач - все.


 
}{enon   (2003-01-26 18:51) [11]

Высота окна получаестя просто:
H := GetSystemMetrics(SM_CYSize);
А вот со вторым сложнее, хотя может получится также.


 
}{enon   (2003-01-26 18:55) [12]

А что если у окна нет иконки 16х16, а только 32х32?
GetClassLong(Wnd, GCL_HICONSM) может её и не обработать?
P/S/ Может SoftIce"ом обработать таскбар?


 
dvm   (2003-01-26 19:23) [13]

Да, у HomeSite, по-видимому, нет маленькой иконки.
Вытащить удалось большую:

SendMessageTimeOut(Wnd, WM_GETICON, ICON_BIG, 0, SMTO_NORMAL, 300, IconBig);

Теперь возникает другой вопрос: как большую иконку превратить в маленькую?
StretchDraw этого делать не может и именно с иконками.




 
}{enon   (2003-01-26 19:31) [14]

Сохраняешь иконку в Image1 (LoadFromClipBoard, Assign и т.д.), а потом
image1.Picture.Icon.SaveToFile("YourIcon.ico");

P.S. Позор на мою медную крышку - сразу код нужно было спросить!


 
DVM   (2003-01-27 09:09) [15]

Вот так работает всегда:

function GetIconFromWindow(Wnd:HWND; BigIcon:boolean):THandle;
var
BigOrSmall,BigOrSmall2:integer;
HIcon:THandle;
begin
hIcon:=0;
if BigIcon then
begin
BigOrSmall:=ICON_BIG;
BigOrSmall2:=GCL_HICON;
end
else
begin
BigOrSmall:=ICON_SMALL;
BigOrSmall2:=GCL_HICONSM;
end;
SendMessageTimeout(Wnd, WM_GETICON, BigOrSmall, 0, SMTO_ABORTIFHUNG, 1000, HIcon);
if hIcon=0 then hIcon := GetClassLong(Wnd, BigOrSmall2);
if hIcon=0 then SendMessageTimeout(Wnd, WM_GETICON, BigOrSmall, 1,
SMTO_ABORTIFHUNG, 1000, hIcon);
if hIcon=0 then hIcon := GetClassLong(Wnd, BigOrSmall2);
if hIcon=0 then SendMessageTimeout(Wnd, WM_QUERYDRAGICON, BigOrSmall,
0, SMTO_ABORTIFHUNG, 1000, hIcon);
result:=hIcon;
end;



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

Форум: "WinAPI";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
3-63956
Alander
2003-03-04 08:21
2003.03.20
Компонент abcDBTreeView


3-63965
den2002
2003-02-27 11:12
2003.03.20
Float conversion failed


4-64430
[lamer]Barmaglot
2003-01-27 09:43
2003.03.20
Смена Font a у кнопки средствами WINAPI


3-63991
Roman Go
2003-02-28 10:26
2003.03.20
Есть ли отличие работы с ADO в D5 или D7


7-64403
kant
2003-01-24 10:28
2003.03.20
COM ports





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский