cuốn sách gpt4 ai đã làm

Xóa biểu tượng khay thông báo, windows shell

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 10:34:08 40 4
mua khóa gpt4 Nike

câu hỏi:Biểu tượng thông báo được đăng ký ở đâu và nếu nó đã được đăng ký từ vị trí khác thì làm cách nào để xóa nó?

mô tả:Tôi muốn sử dụng biểu tượng khay thông báo nên tôi đã khởi chạy mẫu Windows SDK để kiểm tra xem nó hoạt động như thế nào.

Vấn đề là một khi biểu tượng được đăng ký từ một vị trí, nó sẽ không thể được sử dụng ở bất kỳ nơi nào khác. Shell_NotifyIcon(...) không thành công ở những nơi khác nhau. Nó thậm chí còn được mô tả trong tệp readme của ví dụ:

Xin lưu ý rằng các biểu tượng thông báo được chỉ định bằng GUID được bảo vệ chống giả mạo bằng cách xác thực rằng chỉ một ứng dụng duy nhất đăng ký chúng. Việc đăng ký này được thực hiện vào lần đầu tiên bạn gọi Shell_NotifyIcon(NIM_ADD, ...) và tên đường dẫn đầy đủ của ứng dụng gọi là. được lưu trữ. Nếu sau đó bạn di chuyển tệp nhị phân của mình sang một vị trí khác, hệ thống sẽ không cho phép thêm lại biểu tượng.

Tôi đã thử sử dụng Shell_NotifyIcon(NIM_DELETE, ...) khi ứng dụng của tôi thoát nhưng nó vẫn không hoạt động và ứng dụng của tôi có thể được khởi chạy từ một vị trí khác. Tất nhiên. Tôi có thể hack nó bằng cách thay đổi hướng dẫn mỗi khi Shell_NotifyIcon(...) thất bại, nhưng tôi thích cách tiếp cận ít bạo lực hơn. Ngoài ra, tôi đã tìm kiếm hướng dẫn trong sổ đăng ký hệ thống và không tìm thấy nó.

Hướng dẫn trong ví dụ được định nghĩa như sau:

// Sử dụng hướng dẫn để xác định duy nhất biểu tượng của chúng tôi
lớp __declspec(uuid("9D0B8B92-4E1C-488e-A1E1-2331AFCE2CB5")) PrinterIcon;

Code tạo icon thông báo:

BOOL AddNotificationIcon(HWND hwnd)
{
NOTIFYICONDATA nid = {sizeof(nid)};
nid.hWnd = hwnd;
// thêm biểu tượng, đặt biểu tượng, chú giải công cụ và thông báo gọi lại.
// biểu tượng sẽ được xác định bằng GUID
nid.uFlags = NIF_ICON | NIF_MESSAGE |
nid.guidItem = __uuidof(PrinterIcon);
nid.uCallbackMessage = WMAPP_NOTIFYCALLBACK;
LoadIconMetric(g_hInst, MAKEINTRESOURCE(IDI_NOTIFICATIONICON), LIM_SMALL, &nid.hIcon);
LoadString(g_hInst, IDS_TOOLTIP, nid.szTip, ARRAYSIZE(nid.szTip));
Shell_NotifyIcon( NIM_ADD, &nid );

// ưu tiên NOTIFYICON_VERSION_4
nid.uVersion = NOTIFYICON_VERSION_4;
trả về Shell_NotifyIcon(NIM_SETVERSION, &nid);
}

Mã này là một phần của mẫu SDK Windows: SDKs/Windows/v7.1/Samples/winui/shell/appshellintegration/NotificationIcon

câu trả lời hay nhất

Vì thế. Giải pháp cuối cùng là tôi phải khai báo như thế này THÔNG BÁOICONDATA:

#define NOTIFICATIONTRAY_UID 666;
[…]

NOTIFYICONDATA nid = { 0 };

nid.cbSize = sizeof( NOTIFYICONDATA );
nid.hWnd = hWnd;
nid.uID = THÔNG BÁOTRAY_UID;
nid.uFlags = NIF_ICON | NIF_MESSAGE |
nid.uCallbackMessage = WMAPP_NOTIFYCALLBACK;

LoadIconMetric( hInstance, MAKEINTRESOURCE( IDI_NOTIFICATIONICON ), LIM_SMALL, &nid.hIcon );
lstrcpy( nid.szTip, L"Văn bản chú giải công cụ" );
Shell_NotifyIcon( NIM_ADD, &nid );

// ưu tiên NOTIFYICON_VERSION_4
nid.uVersion = NOTIFYICON_VERSION_4;
trả về ( Shell_NotifyIcon( NIM_SETVERSION, &nid ) != 0 );

Tôi chưa đặt cờ NIF_GUID và GUID. Để sử dụng biểu tượng này sau (hủy, thêm thông báo bong bóng, v.v.) tôi phải cung cấp HWND và uID (cảm ơn Remy Lebeau gợi ý).

Về c++ - biểu tượng khay thông báo rõ ràng, windows shell, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/36789852/

40 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress