2010-03-29 11 views
11

Tôi đang phát triển một ứng dụng có tên là WeatherBar. Chức năng chính của nó dựa trên sự tương tác của nó với thanh tác vụ Windows 7 - nó thay đổi biểu tượng tùy thuộc vào điều kiện thời tiết ở một vị trí cụ thể.Lập trình thay đổi biểu tượng của tệp thực thi

Các biểu tượng tôi đang sử dụng trong ứng dụng đều được lưu trong tệp tài nguyên gốc được biên dịch (.res) - Tôi đang sử dụng nó thay vì tệp kê khai tài nguyên được nhúng cho chỉ biểu tượng. Theo mặc định, tôi sửa đổi thuộc tính Biểu tượng của biểu mẫu chính để thay đổi các biểu tượng phù hợp và nó hoạt động tốt, miễn là biểu tượng không được ghim vào thanh tác vụ. Khi nó được ghim, biểu tượng trong thanh tác vụ sẽ tự động chuyển sang mặc định cho biểu tượng thực thi (với chỉ mục 0 trong tệp tài nguyên).

Sau khi thực hiện một ít nghiên cứu, tôi đã tìm ra cách thay đổi biểu tượng sẽ thay đổi biểu tượng phím tắt (vì tất cả các ứng dụng đã ghim thực sự là các phím tắt được lưu trữ trong thư mục người dùng). Nhưng nó không hoạt động.

Tôi giả sử rằng tôi cần thay đổi biểu tượng cho tệp thực thi, và do đó sử dụng UpdateResource, nhưng tôi không hoàn toàn chắc chắn về điều này. Thực thi của tôi không được ký điện tử, vì vậy nó không phải là một vấn đề sửa đổi nó.

Điều gì sẽ là cách để giải quyết vấn đề này?

+1

http://stackoverflow.com/questions/969033/change-pinned-taskbar-icon-windows-7 – Vivek

+1

@Vivek Điều đó không giúp được vấn đề và không phải là giải pháp. –

+3

Bạn không thể sử dụng UpdateResource, tệp .exe bị khóa. Liên kết của Vivek là tốt như nó sẽ nhận được. Có một wrapper tốt đẹp trong Window API Code Pack: http://code.msdn.microsoft.com/WindowsAPICodePack –

Trả lời

3

Nếu bạn muốn thực hiện điều này theo chương trình, tôi sẽ bắt đầu bằng cách xem Portable Executable file format (Wikipedia entry). Phần tài nguyên (.rsrc, xem phần 6.9) nên chứa biểu tượng. Sử dụng thông tin này, bạn có thể viết một công cụ để sửa đổi biểu tượng.

Nếu bạn chỉ muốn thay đổi nhanh biểu tượng trong tệp hiện có, bạn có thể hack nó trong trình chỉnh sửa tài nguyên Visual Studio. Tôi đã thử nghiệm tệp này bằng tệp bằng cách xóa biểu tượng cũ và thêm biểu tượng mới. Biểu tượng .exe đã thay đổi trong Explorer thành biểu tượng mới và biểu tượng mới xuất hiện trên menu Bắt đầu khi tôi kéo nó vào đó.

- Edit -

Vâng, tôi đồng ý rằng việc sử dụng UpdateResource là một phương pháp tốt. Here is an example Tôi đã tìm thấy việc sử dụng các hàm C++ để làm như vậy và chữ ký P/Invoke cho UpdateResourceFindResource.

+0

Cách tiếp cận thú vị. Mặc dù có một vấn đề - Resource Editor là một công cụ tốt và tôi đã sử dụng nó một lúc, nhưng tôi cần thay đổi biểu tượng trực tiếp trong mã. Người dùng cuối sẽ không thể sử dụng trình chỉnh sửa tài nguyên để thay đổi biểu tượng mỗi phút. –

0
private void button1_Click(object sender, EventArgs e) 
    { 
     String path = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 
     String name = "test"; 
     Shell32.Shell shl = new Shell32.ShellClass(); 
     // Optional code to create the shortcut 
     System.IO.StreamWriter sw = new System.IO.StreamWriter(path + @"\" + name + ".lnk", false); 
     sw.Close(); 
     // End optional code 
     Shell32.Folder dir = shl.NameSpace(path); 
     Shell32.FolderItem itm = dir.Items().Item(name + ".lnk"); 
     Shell32.ShellLinkObject lnk = (Shell32.ShellLinkObject)itm.GetLink; 
     // Optional code to create the shortcut 
     lnk.Path = Environment.GetFolderPath(Environment.SpecialFolder.System) 
+ @"\notepad.exe"; 
     lnk.Description = "nobugz was here"; 
     lnk.Arguments = @"c:\sample.txt"; 
     lnk.WorkingDirectory = @"c:\"; 
     // End optional code 
     lnk.SetIconLocation(Environment.GetFolderPath(Environment.SpecialFolder.System) 
+ "cmd.exe", 1); 
     lnk.Save(null); 
    } 

này được lấy từ http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/9e23a82c-8bed-4b96-8b9a-4c2b6136a622/

Nó có thể giúp đỡ.

+1

Có vẻ quen thuộc. Nó không phải là giải pháp ở đây. –

+1

Như nobugz đã đề cập, đây không phải là giải pháp. Tôi cần phải thay đổi biểu tượng trong thực thi thực tế hơn là trong phím tắt. –

0

Tôi quyết định triển khai giải pháp thay thế - biểu tượng sẽ thay đổi trong hình thu nhỏ cho cửa sổ (có thể trong Windows 7). Nếu biểu tượng được bỏ ghim, người dùng có thể thấy biểu tượng thay đổi. Trong trường hợp được ghim, hình thu nhỏ sẽ thay đổi theo điều kiện thời tiết hiện tại.

Dường như với tôi như cấu trúc của biểu tượng được ghim (là một phím tắt, trên thực tế) không cho phép thay đổi biểu tượng động. Nếu tôi sai, tôi mở cho ý kiến ​​và ý tưởng về điều này.