Значок настройки проблем Windows (WinXP и Win7)

Я делаю аддон Firefox с js-ctypes и использовал функции user32.dll для установки значков всех окон профиля.

Я планирую сделать это для Mac OS и Linux, но сначала пытаюсь выбить Windows.

Итак, я устанавливаю значки следующим образом: GitHub — Gist :: Noitidart / _ff-addon-snippet-ChangeWindowIcon.js — Rev2

Этот код упрощен. Этот код я использую для применения ко всем окнам:

Cu.import('resource://gre/modules/ctypes.jsm');

var user32 = ctypes.open('user32.dll');

var SendMessage = user32.declare('SendMessageW', ctypes.winapi_abi, ctypes.uintptr_t,
ctypes.int32_t,
ctypes.unsigned_int,
ctypes.int32_t,
ctypes.voidptr_t
);

var LoadImage = user32.declare('LoadImageA', ctypes.winapi_abi, ctypes.voidptr_t,
ctypes.int,
ctypes.char.ptr,
ctypes.unsigned_int,
ctypes.int,
ctypes.int,
ctypes.unsigned_int
);

var IMAGE_BITMAP = 0;
var IMAGE_ICON = 1;
var LR_LOADFROMFILE = 16;// RUNNING STUFF BELOW - ABVOE WAS JUST DEFINING STUFF
var DOMWindows = Services.wm.getEnumerator(null);
while (DOMWindows.hasMoreElements()) {
var aDOMWindow = DOMWindows.getNext();
var basewindow = aDOMWindow.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation)
.QueryInterface(Ci.nsIDocShellTreeItem)
.treeOwner
.QueryInterface(Ci.nsIInterfaceRequestor)
.nsIBaseWindow;
var nativeHandle = basewindow.nativeHandle;

var targetWindow_handle = parseInt(nativeHandle);

var hIconBig = LoadImage(targetWindow_handle, 'C:\\Documents and Settings\\SONY VAIO\\My Documents\\Downloads\\puzzle.ico', IMAGE_ICON, 256, 256, LR_LOADFROMFILE); //MUST BE A FILEPATH TO A ICO!!!
var hIconSmall = LoadImage(targetWindow_handle, 'C:\\Documents and Settings\\SONY VAIO\\My Documents\\Downloads\\puzzle.ico', IMAGE_ICON, 16, 16, LR_LOADFROMFILE); //MUST BE A FILEPATH TO A ICO!!!

var successSmall = SendMessage(targetWindow_handle, 0x0080 /** WM_SETICON **/ , 0 /** ICON_SMALL **/ , hIconSmall); //if it was success it will return 0? im not sure. on first time running it, and it was succesful it returns 0 for some reason
var successBig = SendMessage(targetWindow_handle, 0x0080 /** WM_SETICON **/ , 1 /** ICON_BIG **/ , hIconBig); //if it was success it will return 0? im not sure. on first time running it, and it was succesful it returns 0 for some reason

}

user32.close();

Проблемы заключаются в следующем:

Проблемы на WinXP

  • Когда нажмите Alt + Tab значок нормальный
  • Если окна объединены в одну группу (из-за переполнения панели задач) и значки ВСЕ изменены, значок с сосредоточенными группами все еще не изменен. Как видно на рисунке здесь:

    _ff-addon-snippet-ChangeWindowIcon.js - Rev1 - Проблема с сосредоточенными значками в WinXP.PNG

Проблемы на Win7

  • Если приложение Закреплен и даже если все значки окон изменены на одинаковые, значок булавки все равно не изменился
  • Если приложение Не закреплен тогда, если изменить значок для всех окон, он изменит значок на панели задач ТЕМ НЕ МЕНИЕ если вы щелкнете правой кнопкой мыши по значку на панели задач, он вернется к тому, что было обычно, и повторный запуск приведенного выше фрагмента не вернет его, чтобы вернуть его к значку, который вы установили, вы должны закрепить и открепить

0

Решение

Вы действительно не должны ставить так много вопросов в один вопрос

При нажатии Alt + Tab иконка нормальная

Вы пытаетесь загрузить и установить 256×256 иконок. XP не поддерживает такие иконки. Вы действительно должны добавить некоторые проверки ошибок;)
IIRC вы должны установить 32×32 иконки для большой. Или точнее SM_CXICON и / или SM_CXSMICON

Если окна объединены в одну группу (из-за переполнения панели задач) и значки ВСЕ изменены, значок с сосредоточенными группами все еще не изменен. Как видно на рисунке здесь:

Я думаю, тебе не повезло в этом. XP возьмет любой значок, который является основным значком ресурса в .exe IIRC.

ХР все равно мертва …

Проблемы на Win 7

С IIRC вам придется работать System.AppUserModel.RelaunchIcon

редактировать
На самом деле я могу ошибаться в отношении группировки XP. Последние возились с иконками на win32 довольно давно. GCLP_HICON/GCLP_HICONSM может быть Работа.

1

Другие решения


По вопросам рекламы [email protected]