更改另一个PID的窗口图标

时间:2015-03-22 12:02:43

标签: c winapi

我制作了一个firefox插件,一个配置文件管理器,他们可以从中管理所有配置文件。此插件允许多个配置文件。 Profile是一组具有不同PID的firefox窗口。

在我运行此代码的配置文件中,图标成功更改。是否可以更改另一个配置文件的图标(如果它正在运行,如果它没有运行它不是问题)?

我有PID,我枚举了窗口,并得到了一个窗口句柄。它上面有SetClassLongPtr,但它似乎没有改变或错误。

这是我用来更新图标的代码:

        var hIconBig_HANDLE = ostypes.API('LoadImage')(null, iconPath, ostypes.CONST.IMAGE_ICON, 256, 256, ostypes.CONST.LR_LOADFROMFILE); //todo: detect if winxp and if so then use 32 instead of 256 per https://gist.github.com/Noitidart/0f55b7ca0f89fe2610fa#file-_ff-addon-snippet-browseforbadgethencreatesaveanapply-js-L328
        var hIconSmall_HANDLE = ostypes.API('LoadImage')(null, iconPath, ostypes.CONST.IMAGE_ICON, 16, 16, ostypes.CONST.LR_LOADFROMFILE);
        // LoadImage was returning null because i had declared LoadImageA but then i defeined LPCTSTR as ctypes.jschar. i had to use LoadImageW to use with ctypes.jschar. I didnt test but i guess to use with LoadImageA you have to use ctypes.char  


        var hIconBig_LONG_PTR = ctypes.cast(hIconBig_HANDLE, ostypes.IS64BIT ? ostypes.TYPE.LONG_PTR : ostypes.TYPE.LONG);
        var hIconSmall_LONG_PTR = ctypes.cast(hIconSmall_HANDLE, ostypes.IS64BIT ? ostypes.TYPE.LONG_PTR : ostypes.TYPE.LONG);

        var oldBigIcon = ostypes.API('SetClassLong')(cHwnd, ostypes.CONST.GCLP_HICON, hIconBig_LONG_PTR);
        var oldSmallIcon = ostypes.API('SetClassLong')(cHwnd, ostypes.CONST.GCLP_HICONSM, hIconSmall_LONG_PTR);

由于

修改

是否可以使用SendMessage以与SetClassLongPtr相同的方式更改图标?那将是完美的!我强烈希望避免使用SendMessageWM_SETICON,因为这会产生一些影响(请参阅下面的评论)

0 个答案:

没有答案