Robert van Herk robert@robertvanherk.nl wrote:
As some of you might know I am working on a Wine Start menu, for Linux.
I have heard different things on this list about the way Windows treats the start menu.
Some told me that it would be better to make a Windows (wine) client that reads the actual start menu by querying a Wine dll, while others told me that this is not neccesairy as all the links are contained in the Start Menu directory.
From looking at my Windows installation, I must agree that it seems that all items in Programs are indeed in the Start Menu directory.
Don't forget that the Start menu is a combination of the Start Menu of the "Current User" and the "All Users" (common) tree. SHGetFolderPath can give you the according pidls to those directories.
Unfortunately shell32 does not export any functionality to enumerate those directories directly but the FileMenu_.... functions in shell32 take care about building that menu. One way might be to let those functions build the start menu and then enumerate that menu into an external format.
So, my question is: would it be enough to create just a Linux program that synchronizes with this directory? Can anyone give me an example of a lnk file that IS actually missing in a Start Menu directory, but is there in his Program folder in the Windows start menu?
Does anyone know how far people came at parsing the lnk files for Linux? I read something about the .lnk format, but I don't really feel like writing my own link file parser ;-). Does anybody know of parts of other software that could be recycled here?
You shouldn't need to. IShellLink should be all you need for retrieving information from a .lnk file although it seems currently broken somehow, according to some report a few days ago on wine-devel. But if you could reenumerate the Start Menu created by the shell32 FileMenu_ functions you might not really have to bother to much with this either.
Rolf Kalbermatter