Get an Object’s Meta Data

Posted on Tuesday, June 16th, 2009 at 2:30 PM CDT (GMT -0500) by Live

Reading meta data in a gadget simply does not work as documented.

While this works:

System.Shell.item.metadata("Dimensions");

This does not:

System.Shell.item.metadata("Width");

The only visible difference is the attribute.

There is a workaround, however. Simply use the attributes defined in the MSDN List of Core Shell Properties. The link is broken; however, I found an alternative, also on MSDN, but I can’t rediscover it.

I have compiled the list last December. Here it is:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
        spFeedback.innerHTML += sItem;
        spFeedback.innerHTML += oItem.name + "<br/>"; 
        spFeedback.innerHTML += "Owner: " + oItem.metadata("Owner") + "<br/>";
        var Feedback = "<br />AcquisitionID: " + oItem.metadata("System.AcquisitionID");
        Feedback += "<br />ApplicationName: " + oItem.metadata("System.ApplicationName");
        Feedback += "<br />Author: " + oItem.metadata("System.Author");
        Feedback += "<br />Capacity: " + oItem.metadata("System.Capacity");
        Feedback += "<br />Category: " + oItem.metadata("System.Category");
        Feedback += "<br />Comment: " + oItem.metadata("System.Comment");
        Feedback += "<br />Company: " + oItem.metadata("System.Company");
        Feedback += "<br />ComputerName: " + oItem.metadata("System.ComputerName");
        Feedback += "<br />ContainedItems: " + oItem.metadata("System.ContainedItems");
        Feedback += "<br />ContentStatus: " + oItem.metadata("System.ContentStatus");
        Feedback += "<br />ContentType: " + oItem.metadata("System.ContentType");
        Feedback += "<br />Copyright: " + oItem.metadata("System.Copyright");
        Feedback += "<br />DateAccessed: " + oItem.metadata("System.DateAccessed");
        Feedback += "<br />DateAcquired: " + oItem.metadata("System.DateAcquired");
        Feedback += "<br />DateArchived: " + oItem.metadata("System.DateArchived");
        Feedback += "<br />DateCompleted: " + oItem.metadata("System.DateCompleted");
        Feedback += "<br />DateCreated: " + oItem.metadata("System.DateCreated");
        Feedback += "<br />DateImported: " + oItem.metadata("System.DateImported");
        Feedback += "<br />DateModified: " + oItem.metadata("System.DateModified");
        Feedback += "<br />DueDate: " + oItem.metadata("System.DueDate");
        Feedback += "<br />EndDate: " + oItem.metadata("System.EndDate");
        Feedback += "<br />FileAllocationSize: " + oItem.metadata("System.FileAllocationSize");
        Feedback += "<br />FileAttributes: " + oItem.metadata("System.FileAttributes");
        Feedback += "<br />FileCount: " + oItem.metadata("System.FileCount");
        Feedback += "<br />FileDescription: " + oItem.metadata("System.FileDescription");
        Feedback += "<br />FileExtension: " + oItem.metadata("System.FileExtension");
        Feedback += "<br />FileFRN: " + oItem.metadata("System.FileFRN");
        Feedback += "<br />FileName: " + oItem.metadata("System.FileName");
        Feedback += "<br />FileOwner: " + oItem.metadata("System.FileOwner");
        Feedback += "<br />FileVersion: " + oItem.metadata("System.FileVersion");
        Feedback += "<br />FindData: " + oItem.metadata("System.FindData");
        Feedback += "<br />FlagColor: " + oItem.metadata("System.FlagColor");
        Feedback += "<br />FlagColorText: " + oItem.metadata("System.FlagColorText");
        Feedback += "<br />FlagStatus: " + oItem.metadata("System.FlagStatus");
        Feedback += "<br />FlagStatusText: " + oItem.metadata("System.FlagStatusText");
        Feedback += "<br />FreeSpace: " + oItem.metadata("System.FreeSpace");
        Feedback += "<br />Identity: " + oItem.metadata("System.Identity");
        Feedback += "<br />Identity: " + oItem.metadata("System.Importance");
        Feedback += "<br />ImportanceText: " + oItem.metadata("System.ImportanceText");
        Feedback += "<br />IsAttachment: " + oItem.metadata("System.IsAttachment");
        Feedback += "<br />IsDeleted: " + oItem.metadata("System.IsDeleted");
        Feedback += "<br />IsEncrypted: " + oItem.metadata("System.IsEncrypted");
        Feedback += "<br />IsFlagged: " + oItem.metadata("System.IsFlagged");
        Feedback += "<br />IsFlaggedComplete: " + oItem.metadata("System.IsFlaggedComplete");
        Feedback += "<br />IsIncomplete: " + oItem.metadata("System.IsIncomplete");
        Feedback += "<br />IsRead: " + oItem.metadata("System.IsRead");
        Feedback += "<br />IsSendToTarget: " + oItem.metadata("System.IsSendToTarget");
        Feedback += "<br />IsShared: " + oItem.metadata("System.IsShared");
        Feedback += "<br />ItemAuthors: " + oItem.metadata("System.ItemAuthors");
        Feedback += "<br />ItemDate: " + oItem.metadata("System.ItemDate");
        Feedback += "<br />ItemFolderNameDisplay: " + oItem.metadata("System.ItemFolderNameDisplay");
        Feedback += "<br />ItemFolderPathDisplay: " + oItem.metadata("System.ItemFolderPathDisplay");
        Feedback += "<br />ItemFolderPathDisplayNarrow: " + oItem.metadata("System.ItemFolderPathDisplayNarrow");
        Feedback += "<br />ItemName: " + oItem.metadata("System.ItemName");
        Feedback += "<br />ItemNameDisplay: " + oItem.metadata("System.ItemNameDisplay");
        Feedback += "<br />ItemNamePrefix: " + oItem.metadata("System.ItemNamePrefix");
        Feedback += "<br />ItemParticipants: " + oItem.metadata("System.ItemParticipants");
        Feedback += "<br />ItemPathDisplay: " + oItem.metadata("System.ItemPathDisplay");
        Feedback += "<br />ItemPathDisplayNarrow: " + oItem.metadata("System.ItemPathDisplayNarrow");
        Feedback += "<br />ItemType: " + oItem.metadata("System.ItemType");
        Feedback += "<br />ItemTypeText: " + oItem.metadata("System.ItemTypeText");
        Feedback += "<br />ItemUrl: " + oItem.metadata("System.ItemUrl");
        Feedback += "<br />Keywords: " + oItem.metadata("System.Keywords");
        Feedback += "<br />Kind: " + oItem.metadata("System.Kind");
        Feedback += "<br />KindText: " + oItem.metadata("System.KindText");
        Feedback += "<br />Language: " + oItem.metadata("System.Language");
        Feedback += "<br />MileageInformation: " + oItem.metadata("System.MileageInformation");
        Feedback += "<br />MIMEType: " + oItem.metadata("System.MIMEType");
        Feedback += "<br />Null: " + oItem.metadata("System.Null");
        Feedback += "<br />OfflineAvailability: " + oItem.metadata("System.OfflineAvailability");
        Feedback += "<br />OfflineStatus: " + oItem.metadata("System.OfflineStatus");
        Feedback += "<br />OriginalFileName: " + oItem.metadata("System.OriginalFileName");
        Feedback += "<br />ParentalRating: " + oItem.metadata("System.ParentalRating");
        Feedback += "<br />ParentalRatingReason: " + oItem.metadata("System.ParentalRatingReason");
        Feedback += "<br />ParentalRatingsOrganization: " + oItem.metadata("System.ParentalRatingsOrganization");
        Feedback += "<br />ParsingBindContext: " + oItem.metadata("System.ParsingBindContext");
        Feedback += "<br />ParsingName: " + oItem.metadata("System.ParsingName");
        Feedback += "<br />ParsingPath: " + oItem.metadata("System.ParsingPath");
        Feedback += "<br />PerceivedType: " + oItem.metadata("System.PerceivedType");
        Feedback += "<br />PercentFull: " + oItem.metadata("System.PercentFull");
        Feedback += "<br />Priority: " + oItem.metadata("System.Priority");
        Feedback += "<br />PriorityText: " + oItem.metadata("System.PriorityText");
        Feedback += "<br />Project: " + oItem.metadata("System.Project");
        Feedback += "<br />ProviderItemID: " + oItem.metadata("System.ProviderItemID");
        Feedback += "<br />Rating: " + oItem.metadata("System.Rating");
        Feedback += "<br />RatingText: " + oItem.metadata("System.RatingText");
        Feedback += "<br />Sensitivity: " + oItem.metadata("System.Sensitivity");
        Feedback += "<br />SensitivityText: " + oItem.metadata("System.SensitivityText");
        Feedback += "<br />SFGAOFlags: " + oItem.metadata("System.SFGAOFlags");
        Feedback += "<br />SharedWith: " + oItem.metadata("System.SharedWith");
        Feedback += "<br />ShareUserRating: " + oItem.metadata("System.ShareUserRating");
        Feedback += "<br />OmitFromView: " + oItem.metadata("System.Shell.OmitFromView");
        Feedback += "<br />SimpleRating: " + oItem.metadata("System.SimpleRating");
        Feedback += "<br />Size: " + oItem.metadata("System.Size");
        Feedback += "<br />SoftwareUsed: " + oItem.metadata("System.SoftwareUsed");
        Feedback += "<br />SourceItem: " + oItem.metadata("System.SourceItem");
        Feedback += "<br />StartDate: " + oItem.metadata("System.StartDate");
        Feedback += "<br />Status: " + oItem.metadata("System.Status");
        Feedback += "<br />Subject: " + oItem.metadata("System.Subject");
        Feedback += "<br />Thumbnail: " + oItem.metadata("System.Thumbnail");
        Feedback += "<br />ThumbnailCacheId: " + oItem.metadata("System.ThumbnailCacheId");
        Feedback += "<br />ThumbnacilStream: " + oItem.metadata("System.ThumbnacilStream");
        Feedback += "<br />Title: " + oItem.metadata("System.Title");
        Feedback += "<br />TotalFileSize: " + oItem.metadata("System.TotalFileSize");
        Feedback += "<br />Trademarks: " + oItem.metadata("System.Trademarks");

As you have guessed, Feedback is a string that contains the metadata; oItem is a System.Shell.item object; spFeedback is the ID of a div.

Why do I not say to get the metadata of a file, but an object? The method can read shell items ranging from a drive in Computer to an archived document in WinRAR.

VN:F [1.4.7_740]
Rating: 0.0/10 (0 votes cast)

Tell gadgets to always download right

Posted on Saturday, June 13th, 2009 at 8:29 PM CDT (GMT -0500) by Live

Internet Explorer downloads gadget files incorrectly – changing the extension from .gadget to .zip. Developers retaliate by putting their package inside a ZIP file.

The are two ways to fix this. The first way utilizes a line in your server’s .htaccess file. The code is below:

# GADGET
AddType application/x-windows-gadget .gadget

The first line is a comment. The second line tells a user’s browser what MIME type to use.

The second way is:

1
2
3
4
header('Content-type:application/x-windows-gadget');
header("Content-Disposition:attachment;filename=MyGadgetFile.gadget");
readfile($url);
exit();

Line 1 changes the MIME type. Line 2 specifies a download. Line 3 reads the file. Line 4 exits the script.

This longer code is a PHP script.

HF!

VN:F [1.4.7_740]
Rating: 0.0/10 (0 votes cast)

Clear all items in a select element

Posted on Friday, June 12th, 2009 at 5:25 PM CDT (GMT -0500) by Live

There are several ways to clear all the options in a select element.

I use this method:

1
while (endSelect.options.length > 0) endSelect.options[0] = null;

But beware of the catch!

1
2
3
for (i = 0; i < endSelect.options.length; i++) {
    endSelect.options[i] = null;
}

This is a classic example of changing a data structure while processing it. In other words, each time the loop was executed, an item was removed from the list. However, the “for” loop had no idea of what was happening.

Still confused? Here is a basic knowledge of how the lists behave when an item is removed.

Suppose you have a list. Each item is assigned a unique key which is a positive zero-based integer. The order is “0″, “1″, “2″, and so on, up to the end.

The “for” loop above loops from zero to the last item key. But the catch is on the next line. The integer i is a zero at the first iteration. So it removes item #0 from the list. Watch out for the next item, which assumes the index of zero. The loop finished with zero, and it is at 1. So it removes the index of 1. But there is still an item at zero! The above loop ignores that!

I hope I made the fact clearer than before.
Yes, I know you can:

1
endSelect.options.length = 0;

but that’s for you to decide.

That’s all for this post.

VN:F [1.4.7_740]
Rating: 0.0/10 (0 votes cast)

Code Tips

Posted on Friday, June 12th, 2009 at 1:19 PM CDT (GMT -0500) by Live

From time to time, I will post some code programming tips for everyone from beginners to experts. Stay tuned!

Hint: Filter posts to show code tips only by clicking Code Tips Series.

VN:F [1.4.7_740]
Rating: 9.0/10 (1 vote cast)

Ultimate Weather v 2.5

Posted on Saturday, June 6th, 2009 at 10:04 PM CDT (GMT -0500) by Live

A projected update of this gadget to include two major exciting additions

In 2.4, the main gadget area supports only today’s forecast. 2.5, on the other hand, will be enhanced to display information not only for today, but also for Day 2 (tomorrow) and Day 3.
If there are multiple instances of the gadget, they will fight for the same Registry values. I have the settings saved to the Registry instead of the traditional INI file to gain speed. Version 2.5 will provide for an additional weather location, and future updates may allow up to three or four.

The projected release date is undetermined; for records, though, it won’t be this year.

VN:F [1.4.7_740]
Rating: 0.0/10 (0 votes cast)

Welcome

Posted on Saturday, June 6th, 2009 at 10:01 PM CDT (GMT -0500) by Live

Blog posts by Live, handing down conventional wisdom

Hey guys, welcome to my blog! Thanks for the time to read future posts, most of which should be informative and possibly entertaining. Thorough testing must be accomplished before I may release my works to the public.

VN:F [1.4.7_740]
Rating: 0.0/10 (0 votes cast)