2
背景:我正在嘗試在我的基於wxPython的Python應用程序中爲一些菜單選項添加一些UAC屏蔽圖標。按鈕我沒有問題,因爲我只能將BCM_SETSHIELD消息發送到按鈕,而Windows則處理剩餘的按鈕。來自Python的調用SHGetStockIconInfo
在鏈接MSDN article here中,它描述了調用SHGetStockIconInfo來獲取盾牌圖標的句柄或位置。我想使用此代碼通過Python來調用它:
from ctypes import *
class SHSTOCKICONINFO(Structure):
_fields_ = [('cbSize',c_ulong),
('hIcon',c_void_p),
('iSysImageIndex',c_int),
('iIcon',c_int),
('szPath',c_wchar_p)]
_SHGetStockIconInfo = windll.shell32.SHGetStockIconInfo
_SHGetStockIconInfo.argtypes = [c_uint,c_uint,POINTER(SHSTOCKICONINFO)]
_SHGetStockIconInfo.restype = c_int
# Values copied from shellapi.h
SIID_SHIELD = 77
SHGSI_ICONLOCATION = 0
SHGSI_ICON = 0x100
SHGSI_SMALLICON = 0x1
SHGSI_LARGEICON = 0
def GetIconLocation(id,flags=SHGSI_LARGEICON):
# Clear _ICON bit and set _ICONLOCATION bit
flags = ~(~flags|SHGSI_ICON)|SHGSI_ICONLOCATION
info = SHSTOCKICONINFO()
info.cbSize = sizeof(SHSTOCKICONINFO)
result = _SHGetStockIconInfo(id,flags,byref(info)):
if result != 0:
raise Exception(result)
return (info.szPath,info.iIcon)
現在,每當我稱呼它,我從80070057 SHGetStockIconInfo(E_INVALIDARG - 一個或多個參數是無效的),得到一個返回結果。
任何人都可以幫助弄清楚這裏有什麼問題嗎?或者,也許讓我更容易獲得這個圖標資源?
編輯:問題出在我的SHSTOCKICONINFO定義中,見下文。我上面的示例現在可以正確使用下面的更正。
完美,謝謝!我會用正確的答案更新我的問題。 – Lojack
@Lojack無需這樣做。最好把問題保持原樣。你接受這個答案足以表明答案可以解決問題。 –