Как установить значок окна CEF (в python) - PullRequest
0 голосов
/ 07 февраля 2019

Не wx, gtk3, pyqt и т.д ... Мне нужно что-то вроде:

cef.Initialize (settings = settings) window_info = cef.WindowInfo () browser = cef.CreateBrowserSync (url = "localhost:8080 / ", window_title =" Hello World! " icon =" myicon.png ")

1 Ответ

0 голосов
/ 12 февраля 2019

В Linux выполните программу xseticon программно, используя функцию os.system() или аналогичную, см. http://www.leonerd.org.uk/code/xseticon/.

В Windows используйте встроенный в Python модуль ctypes для выполнения собственных функций win32.Пример кода ниже.Переменная _hWnd содержит дескриптор окна, который можно получить, вызвав browser.GetWindowHandle().

from ctypes import *
from ctypes.wintypes import *
from os import path
import platform

LRESULT = c_int64 if platform.architecture()[0] == "64bit" else c_long

SendMessage = windll.user32.SendMessageW
SendMessage.restype = LRESULT
SendMessage.argtypes = [HWND, UINT, WPARAM, LPARAM]

GetModuleHandle = windll.kernel32.GetModuleHandleW
GetModuleHandle.restype = HMODULE
GetModuleHandle.argtypes = [LPCWSTR]

IMAGE_ICON = 1
LR_LOADFROMFILE = 0x00000010
LR_CREATEDIBSECTION = 0x00002000

LoadImage = windll.user32.LoadImageW
LoadImage.restype = HANDLE
LoadImage.argtypes = [HINSTANCE, LPCWSTR, UINT, c_int, c_int, UINT]

RelPath = lambda file : path.join(path.dirname(path.abspath(__file__)), file)


def AlterIcon(_hWnd, lpszIcon):

    WM_SETICON = 0x0080
    ICON_BIG = 1

    hModel = GetModuleHandle(None)
    hIcon = LoadImage(hModel,
                      RelPath(lpszIcon),
                      IMAGE_ICON,
                      0, 0,
                      LR_LOADFROMFILE | LR_CREATEDIBSECTION)


    SendMessage(_hWnd, WM_SETICON, ICON_BIG, hIcon)

Ref: http://qaru.site/questions/7837596/how-to-include-image-in-message-box-using-ctypes-in-python

...