Смена иконки чужого окна, не ковыряясь в ресурсах EXE.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Смена иконки чужого окна, не ковыряясь в ресурсах EXE.

Сообщение Matew » 03.07.2006 (Пн) 3:39

Искал, но нашел только с ресурсами, а мне нельзя так изменять приложение :( . Может есть альтернативный способ?
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 03.07.2006 (Пн) 4:13

SendMessage WM_SETICON
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 03.07.2006 (Пн) 4:17

BV, спасибо! Попробую.
А переименовать менюшки так же сендмеседжем или SetWindowText?
Последний раз редактировалось Matew 03.07.2006 (Пн) 4:36, всего редактировалось 1 раз.
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 03.07.2006 (Пн) 4:35

Попробовал так:
Код: Выделить всё
Call SendMessage(hwnd, WM_SETICON, 0, LoadIcon(GetModuleHandle("SHELL32.DLL"), ByVal 33))

Я нашел этот пример. Что надо поставить вместо ByVal 33, а то иконка меняется на пустую?
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 03.07.2006 (Пн) 5:05

Matew писал(а):А переименовать менюшки так же сендмеседжем


Возможно.
Днём посмотрю.

Matew писал(а):Что надо поставить вместо ByVal 33, а то иконка меняется на пустую?


MSDN писал(а):Parameters

wParam
Specifies the type of icon to be set. This parameter can be one of the following values.

ICON_BIG
Set the large icon for the window.
ICON_SMALL
Set the small icon for the window.

lParam
Handle to the new large or small icon. If this parameter is NULL, the icon indicated by wParamis removed.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 03.07.2006 (Пн) 6:17

менюшки переименовывают этим Public Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 03.07.2006 (Пн) 7:10

Naked, попробую, спасибо.
2All
Код: Выделить всё
Call SendMessage(hwnd, WM_SETICON, 0,vbNull)
и
Call SendMessage(hwnd, WM_SETICON, 0,0)

Не меняют и не стирают чужую иконку. :( Что это может значить?
Код: Выделить всё
Call SendMessage(hwnd, WM_SETICON, 0, LoadIcon(GetModuleHandle("SHELL32.DLL"), ByVal 33))

Стирает иконку только у моей формы :( .
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.07.2006 (Пн) 12:59

Matew, почитай про vbNull где-нибудь в поиске.
Там написано, например, что это значение 1 типа Integer.
Изображение

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 03.07.2006 (Пн) 19:14

Matew
Ты как SendMessage объявил?
Если всё делать своими ручками, они скоро отвалятся !

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 04.07.2006 (Вт) 1:22

Kovu,
Код: Выделить всё
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

tyomitch, я так понимаю, это должно было натолкнуть меня на некую мысль, но чуда не произошло :(
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.07.2006 (Вт) 7:05

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

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 04.07.2006 (Вт) 20:16

Matew
Переобъяви
Код: Выделить всё
Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long

и вызывай
Код: Выделить всё
SendMessageLong trgthwnd, WM_SETICON, ICON_SMALL , ByVal LoadResPicture(1, 1) '
Если всё делать своими ручками, они скоро отвалятся !

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 05.07.2006 (Ср) 2:29

Kovu, у моей формы меняет, а у чужой нет :(
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 05.07.2006 (Ср) 9:55

Хэндла иконки, полученного через LoadResPicture нет в таблице хэндлов другого процесса...
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.07.2006 (Ср) 10:32

Иконка -- это объект GDI.
К объектам ядра, для которых таблицы в каждом процессе, он не имеет никакого отношения.

Ты ещё скажи, что таблица hWnd в каждом процессе своя ;-)
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 05.07.2006 (Ср) 12:46

Иконка -- это объект GDI
Знаю. Но разве этот хэндл глобален? В чем тогда причина того, что на чужой форме иконка не меняется?
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.07.2006 (Ср) 13:37

Ахез. Вон DC, я проверял, не глобальные. Может, и иконки тоже.
Я имел в виду только то, что таблица хендлов к иконкам никаким боком.
Изображение

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 06.07.2006 (Чт) 1:16

Если нельзя поменять, может можно просто стереть? У меня тоже не вышло. :( Может быть такое, что иконка защищена?
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 06.07.2006 (Чт) 9:48

tyomitch писал(а):Ахез. Вон DC, я проверял, не глобальные. Может, и иконки тоже.
Я имел в виду только то, что таблица хендлов к иконкам никаким боком.
Таблица хэндлов, о которой мы все подумали, естественно тут ни при чем. Но неглобальность DC и GUI хэндлов наталкивает на мысль о еще какой-то таблице. По иному, ИМХО, и быть не может...
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 54

    TopList