[App] [Apr-26-09] WM6.5 Plug-in Installer - Windows Mobile Development and Hacking General

AppStar Titanium
Plug-in Installer
This program allows chome/titanium plug-in developers to create a cab file that will insert the plug-in's markup into the cpr files depending on the device's resolution and update the registry without overriding any of the user's existing chome/titanium configuration files or settings.
Device Requirements:
1. WM 6.5
2. .Net CF 2.0 or higher
Usage:
First things first, this is a developer only tool that has strict requirements to work properly. It requires a few files to be deployed and files like the plg files are case sensitive. ATPluginInstaller.exe and CESetupDLL.dll can be used for any free, not for profit, chome/Titanium plug-in.
Ok, now onto the fun stuff...
ATPluginInstaller.exe is the program where most of the magic happens. It does a few important things. First, it adds a plug-in name to the registry in "HKEY_LOCAL_MACHINE\Software\Microsoft\CHomelugins" and also inserts the plug-in into the specified location in "HKEY_LOCAL_MACHINE\Software\Microsoft\CHome:ExtensibilityXML" and "DefaultXML". Then it clears all VALUES in "HKEY_LOCAL_MACHINE\Security\CHome\DefaultSettings" to prevent chome from reverting to an old layout. Finally it injects the appropriate markup for the device resolution into each of the Titanium CPR files.
For ATPluginInstaller.exe to know what plug-in and markup to use, it needs a PLG file. A PLG file is basically a pre-defined XML file that includes the name, position, and markup for the plug-in you want to install.
Begining of a sample PLG file:
Code:
<?xml version="1.0" encoding="utf-8" ?>
<plugin>
<name>ATFavePeople</name>
<position>2</position>
<layouts>
<layout screenWidth="240" screenHeight="320">
<!-- ATFavePeople -->
<Layer ID="ATFavePeopleExpanded" Visible="False" Width="240" Height="82" Clip="False">
<Layer ID="Page" Clip="False">
<!-- Icon on upper right -->
<Image ID="Icon" Left="188" Top="-13" Width="43" Height="57" ScaleStyle="Stretch"/>
<!-- Large picture in Center -->
<Image ID="ContactPhoto" Left="10" Top="17" Width="43" Height="43" ScaleStyle="Fit" Clip="False">
<Layer ID="Border2" Color="#FFFFFFFF" Left="-2" Top="-2" Width="90" Height="90" Visible="True"/>
</Image>
(abbreviated to conserve space...)
The root node is "plugin". The three sub-nodes are "name", "position", and "layouts". All nodes must follow case to work with ATPluginInstaller.exe.
The "name" node contains the name of the plug-in you wish to install. It must match the name used in the plug-in markup.
The "position" node specifies where you want the plug-in to be displayed on chome. It is 0 based. Meaning the first spot is 0, the second spot is 1, and so on. If a number greater than the number of currently installed plug-ins is used, then the plug-in will be displayed at the bottom of chome.
The "layouts" node contains all the plug-in markup for the different device resolutions. Each resolution is defined by a "layout" sub-node with two attributes. The attributes are "screenWidth" and "screenHeight" which define what "layout" sub-node to use for each resolution. The "layout" sub-node contains the markup that will be injected into the CPR files. This markup is also case sensative and must follow the case that is used by Microsoft in the default CPR files or the sample attached PLG file.
To install a plug-in, simply call ATPluginInstaller.exe followed by the "-i" parameter and a space and then the PLG file name.
example: ATPluginInstaller.exe -i default.plg
ATPluginInstaller.exe is also uninstall friendly. Just replace "-i" with "-u".
example" ATPluginInstaller.exe -u default.plg
Well that's fine and dandy, but how the hell do I call ATPluginInstaller.exe from my CAB file? That's where a setup DLL comes into play. A setup DLL allows you to execute additional functions after a program is installed and before it is uninstalled. Working with setup DLLs are a pain in the butt because they don't support managed code, only C++. So I've attached CESetupDLL which is a setup dll that does two things:
1. It calls ATPluginInstaller.exe and installs, "-i", default.plg from the folder where the application is deployed to.
2. It calls CHomeRefresh.exe from the folder where the application is deployed to, to update Chome without performing a restart. (I didn't write CHomeRefresh and don't know who did but it works fairly well.)
CESetupDLL also works for CAB uninstall.
To include your CESetupDLL.dll in the INF file (file used to build installation CAB file) you have to add the following string to the [DefaultInstall] section:
CESetupDLL = "CESetupDLL.dll"
You can read more about setup.dlls here:
http://www.pocketpcdn.com/articles/setupdll.html
http://msdn.microsoft.com/en-us/library/aa924308.aspx
That's pretty much it! Remember to pay attention to case, and if you use my CESetupDLL.dll include ATPluginInstaller.exe, default.plg, and CHomeRefresh.exe to your program folder in your CAB.
Feel free to use ATPluginInstaller.exe and CESetupDLL.dll for any free, not for profit, chome/Titanium plug-in. Giving me some credit would be nice too. ;-)

Cool, thanks for this.
Let me make sure of the default.plg file, if I want to include cpr installs for different resolutions, I just add all of them to that one file, correct? Just change the layout screenwidth,screenheight for each new cpr I need to write, for both portrait and landscape. So for vga only, I would have two layout sections, one with screenwidth=480, screenheight=640 and then another layout with screenwidth=640, screenheight=480? If a cpr doesn't exist on device, then it just skips that one and goes to next?
Just wanted to make sure I understood it correctly as I plan on updating titaniumweather this week and wanted to use this.

showaco said:
Cool, thanks for this.
Let me make sure of the default.plg file, if I want to include cpr installs for different resolutions, I just add all of them to that one file, correct? Just change the layout screenwidth,screenheight for each new cpr I need to write, for both portrait and landscape. So for vga only, I would have two layout sections, one with screenwidth=480, screenheight=640 and then another layout with screenwidth=640, screenheight=480? If a cpr doesn't exist on device, then it just skips that one and goes to next?
Just wanted to make sure I understood it correctly as I plan on updating titaniumweather this week and wanted to use this.
Click to expand...
Click to collapse
Yeah, that's pretty much it. All the different resolutions in one file. In your case you would just need two layout nodes for VGA, one for portrait and one for landscape.

I'm working on getting next version of titaniumweather finished up and had a question/request. I noticed that your atplugin installer must be reading the defaultxml for plugin info before inserting and rewriting the default and extensibilityxml values. Is it possible to have it read the extensibilityxml for the info instead? A lot of people only update the extensibiliyxml when adding new panels since thats all that is necessary to show panels and with your current version all those panels are removed from extensibilityxml when atplugin installer runs. I can change it in chome editor to write to both locations, but still doesn't help out with someone that has made there own panels independently.
I've added option in weather to switch layouts using your atplugin app to change layouts for different style of weather icons, works very well to switch them out.

I just double checked and atplugininstaller reads from ExtensibilityXML first. It then injects the plugin name and updates ExtensibililtyXML and DefaultXML to the new value. I don't bother to read DefaultXML, I just override it since they both should be the same anyhow. I can change it to not override DefaultXML if users are having issues with it.
BTW, I'm glad to hear you got it working with additional layouts. I have the same feature in my latest Fave Contacts release. I was worried developers might have trouble because of case sensitivity. I use an XPath query and I'm not quite sure why the powers that be(W3C) decided XPath needs to be forced to case sensitive.

AppStar said:
I just double checked and atplugininstaller reads from ExtensibilityXML first. It then injects the plugin name and updates ExtensibililtyXML and DefaultXML to the new value. I don't bother to read DefaultXML, I just override it since they both should be the same anyhow. I can change it to not override DefaultXML if users are having issues with it.
BTW, I'm glad to hear you got it working with additional layouts. I have the same feature in my latest Fave Contacts release. I was worried developers might have trouble because of case sensitivity. I use an XPath query and I'm not quite sure why the powers that be(W3C) decided XPath needs to be forced to case sensitive.
Click to expand...
Click to collapse
huh, maybe just some weird issue I had going on then. After that first change up, everything after that didn't change my layout anymore. But I also updated chome editor to write to defaultxml too and reset my custom panels in after first change up, so maybe that fixed issue for me.
Yeah, got 4 or 5 different icon sets now, with different .plg files for each since most have different size icons and that was easiest way to have for future icon packs to be added without having to release new weather versions. Working on cab now, had trouble with install at first 'cause I was saving your ATPluginInstaller.exe to a subfolder under installation path, which is location I needed to work with my future addons. Got it sorted now(I think).

Is there a way to specify the CPR's to modify in the .plg file? I have made completely new CPR's for NeoTitanium. Instead of being Titanium_(Resolution).cpr, they are Neo_(Resolution).cpr, M2DNeo_(Resolution).cpr, & BWNeo_(Resolution).cpr. for the different themes. I did this so the user can swtich back and forth from NeoTitanium to Titanium (or the different themes) without uninstalling it.

Thank you soooo much. I am going to try this out.

drkfngthdragnlrd said:
Is there a way to specify the CPR's to modify in the .plg file? I have made completely new CPR's for NeoTitanium. Instead of being Titanium_(Resolution).cpr, they are Neo_(Resolution).cpr, M2DNeo_(Resolution).cpr, & BWNeo_(Resolution).cpr. for the different themes. I did this so the user can swtich back and forth from NeoTitanium to Titanium (or the different themes) without uninstalling it.
Click to expand...
Click to collapse
Hmmm... I was going to pull the CPR file name out of the registry, but decided against it because I didn't have any way of knowing that the PLG file was indeed targeted to that CPR anyhow. Adding a node to the PLG is a good idea. But we need to be very careful with distribution. If users got a hold of your PLGs and tried to use them with a Titanium layout they would not work.

Nice!
Very cool indeed.
Just the thing I'm looking for .
Was currently busy with pre-define cpr file to append at the titanium_(resolution_here).cpr, this surely helps a lot in making that happened.
Thanks!!!!!

I have a BIG question. In your ATFavePeople Cab you have a Setup.dll in the Main root of the cab but you don't talk about that. What is that Setup.dll for? I added the AtpluginInstaller, CESetupdll.dll, default.plg, and CHomeRefresh in the cab. Someone told the cab is unsuccessful when its installed and I can't quite figure out why.

JukEboXAuDiO said:
I have a BIG question. In your ATFavePeople Cab you have a Setup.dll in the Main root of the cab but you don't talk about that. What is that Setup.dll for? I added the AtpluginInstaller, CESetupdll.dll, default.plg, and CHomeRefresh in the cab. Someone told the cab is unsuccessful when its installed and I can't quite figure out why.
Click to expand...
Click to collapse
I replied to your private message but i'll repost here incase others need the info.
Hmmm.. There are a couple things you need to check. Make sure the have the CESetupdll.dll configured properly in your INF file.
To include your CESetupDLL.dll in the INF file (file used to build installation CAB file) you have to add the following string to the [DefaultInstall] section:
CESetupDLL = "CESetupDLL.dll"
Also make sure your cab file is extracting all the files to the same folder.

Just a heads up... I'll be leaving for a business trip tomorrow and won't be back till Monday. I'll get to any questions and/or fixes when I get back. Thanks guys!

SO what do I do about creating a setup.dll file when I don't have a program that can create .dll files.

Can someone tell me where the [Default Install] section is in CE Cab Manager.

AppStar said:
Hmmm... I was going to pull the CPR file name out of the registry, but decided against it because I didn't have any way of knowing that the PLG file was indeed targeted to that CPR anyhow. Adding a node to the PLG is a good idea. But we need to be very careful with distribution. If users got a hold of your PLGs and tried to use them with a Titanium layout they would not work.
Click to expand...
Click to collapse
This is why I was wondering if there was a way to call out a specific cpr file name. That way if the cpr doesn't exist on the "machine", the plg does nothing. Also, in the future on release you'll see a lot more custom named cprs. HTC I know uses their own naming. My smart phone has like 5 different sets of cprs on it.

Do you think there's a way to also include multiple plugins in the default.plg file?
I'm looking for a way to use the PluginInstaller to update existing .cpr default (Clock, Music, Photos, etc.) without messing up any additional/custom plugins people have put in.

Very nice. Thanks

Finally was able to install a plugin made by this installer...
Almost all my *.cpr files were read-only, so the plugin wasnt able to save them and kept giving me the "AtpluginInstaller.exe" error.
Changed them to non read-only with Resco Explorer and all worked fine.

Hi There.
don't know if I'm in the right topic if not I apologize.
I would like to know iif there is way to change the GUID of a "personnale" plugin. It seems that non standard plugin got the same guid, and on some case it makes trouble (I would like to put one of my personnal plugins by default when I press "hang" button).
Thanks

Related

[New release] Registry display plugin

Ok, most of you may find this totally useless as a plugin, but it was a combination of a request by user Treo_newb and a desire to create a sample plugin project that could be used as a base / example for plugin writers (I plan on doing an article on codeproject.com and this will be the source for it).
What does it do?
This plugin displays a string stored in registry.
The path is:
HKEY_CURRENT_USER\Software\RegDispPlugin
Value name: DisplayString
It checks if this string has changed several times per second when today screen is shown (as the system sends refresh message to all plugins) and displays the updated message if a change occurred.
What is it good for?
First, if you write apps using mortscript or similar like the user who requested this it will let your script display stuff on today screen.
Alternatively it could be used to mark your device today with a string that isn't as easily changed as user info.
The source is basically a skeleton plugin you can use to build your own plugin on (no license / copyright to limit you) and it already has several tricks needed for the plugin to display correctly:
VGA compatibility
Text size matching system settings
Proper header in settings dialog (like on system plugins)
Proper text color when selected (according to theme)
No blinking all today screen on change
Proper resize when switching between landscape and portrait
When I was writing my first plugin I could not find all these little fixes concentrated in a single article so I had to fish for each one as the bug reports came in.
Hope you will find this little project useful.
The plugin:View attachment RegDisplay.CAB
The source (eVC 4 project): View attachment RegDisplay.zip
Thanks for this!
Thank You Lev.
Thanks, Thanks, Thanks,
You are a legend.
I was almost through with my today plugin and was trying to figure out reading registry values and all of a sudden I get a PM from u about the plugin !!!
Very Cool !!!
OK a few questions,
1. I know that WM_TODAYCUSTOM_QUERYREFRESHCACHE is called for refreshing the today plugin, any ideas about when is it called.
I read somewhere that it was 2 seconds. Is it true?
2. I saw ur code and u have exposed CustomItemOptionsDlgProc in RegDisplay.def, but when I installed the cab file the 'options' is not enabled.
I manually changed the resistry and changed options to dword = 1 and saw ur name and email address.
u might want to enable that by default so that people can notice ur work.
I am planing a commercial release of a new project on basis of this.
Thanks again,
Shailesh
First, you're welcome.
shaileshashar:
1) I ran a debug print on this message once on an iPaq 1710 and it seems to be sent several times per second. This could differ from OS to OS or even from device to device, I am not sure.
If you need specifically timed refresh, or you have an event triggered on new data, I suggest using a timer or maybe a thread that will wait on an event. You can refresh your plugin from anywhere in code by calling InvalidateRect with your window handle.
2) I messed up the cab at first, forgetting to add the Options reg value. Then when I went to upload the fix, I couldn't access the site for about an hour (no idea why, I even rebooted the PC to Ubuntu). Should be fixed now, but I will check it later again (I have to go back to XP for that).
Good luck with your program.
Suggestion
levenum said:
First, you're welcome.
shaileshashar:
1) I ran a debug print on this message once on an iPaq 1710 and it seems to be sent several times per second. This could differ from OS to OS or even from device to device, I am not sure.
If you need specifically timed refresh, or you have an event triggered on new data, I suggest using a timer or maybe a thread that will wait on an event. You can refresh your plugin from anywhere in code by calling InvalidateRect with your window handle.
2) I messed up the cab at first, forgetting to add the Options reg value. Then when I went to upload the fix, I couldn't access the site for about an hour (no idea why, I even rebooted the PC to Ubuntu). Should be fixed now, but I will check it later again (I have to go back to XP for that).
Good luck with your program.
Click to expand...
Click to collapse
Thanks for the help, will check the fixed cab.
Also a suggestion:
A custom icon could also be incorporated. You can give a option to load a custom icon next to the text in the today plugin.
I know anybody can modify ur code and do it but still.
Actually, I probably should have mentioned this in the original post but I have no intention of adding options to this thing.
This would only complicate the code and turn it in to an actual app instead of a sample project.
But by all means feel free to make suggestions. If this thing does become popular, when I am done with my other projects (like LVMTopBat) which won't be any time soon (unfortunately) I will release a separate version of this plugin with all kinds of options that can be controlled both by user (form the options dialog) and by other apps through registry.
Maybe things like text alignment, size, bold / Italic / underlined.
P.S.
The reason I put the string this plugin loads under HKEY_CURRENT_USER instead of the HKLM where the rest of the plugin registry resides is because by default the HKEY_LOCAL_MACHINE on WM 5 and higher has a security restriction. For example you can not write to it using RAPI, only by authorized (or signed) app on the device. The HKEY_CURRENT_USER on the other hand is open for all.
levenum said:
P.S.
The reason I put the string this plugin loads under HKEY_CURRENT_USER instead of the HKLM where the rest of the plugin registry resides is because by default the HKEY_LOCAL_MACHINE on WM 5 and higher has a security restriction. For example you can not write to it using RAPI, only by authorized (or signed) app on the device. The HKEY_CURRENT_USER on the other hand is open for all.
Click to expand...
Click to collapse
Thanks for the info, I never knew that.
Thank you so much! This was exactly what I was looking for!
levenum said:
...But by all means feel free to make suggestions.
Click to expand...
Click to collapse
As a frequent mortscript user I think, this great app might be even more usefull, if the string was shown in an "allways on top" message box instead of the today screen. The Today screen might be obscured by other active windows during the scripts runtime and the plugin eats precious today screen estate also while being unused, doesn't it?
In that case (of a standalone application) I would furthermore introduce some kind of termination string (or reg. value) to end the display application.
Code:
- start mortscript
- writes first string to registry
- starts display application (run)
- updates string in registry whenever appropriate
- ...
- writes termination string to registry
-> display applications self-terminates
- ...
- end of mortscript
Honestly, I already do use something comparable with mortscript (employing a conditioned sleepmessage loop and reading from the registry too), but this could be much nicer and more elegant.
Just my 2 cents... What do you think?
I think something like that would be better implemented by the mortsrit program it self.
It could be a function like MessageBox API in windows which you could then command on and off. Having it built in would save precious resources on the device that would be wasted by having an extra app run constantly in background.
This is just my thought though.
I'd suggest contacting the developer of mortscript and discussing it with him.
levenum said:
I think something like that would be better implemented by the mortsrit program it self.
...
I'd suggest contacting the developer of mortscript and discussing it with him.
Click to expand...
Click to collapse
Mort knew about that request and by chance just announced to so.
Thanks anyway.
Hello levenum,
I just joined the community. Reason being, I found your RegDisplay plug-in
You call it a sample project, but the impact is that of an awesome solution.
Great for MortScript, but equally useful in BASIC applications that write
messages to the registry which is show upon screen minimization.
I regret not being a C programmer (mainly BASIC), else I'd love to further
develop this jewel.
Your plug-in runs flawlessly in an iPAQ 210 under WM6 Classic.
Cheers and Respectful Greetings
Robert
CLSID for registry display plugin
What is the CLSID for the Registry Display Plugin? I am going to have to edit the XML file that defines my home screen in order to get the plugin to show up. I am using Facade to control my home screen, and the only plugins that it will show in its list are those currently in use in one of the XML files in the Application Data\Home folder. All other new plugins require editing the XML. Thanks for your help.
levenum said:
Ok, most of you may find this totally useless as a plugin, but it was a combination of a request by user Treo_newb and a desire to create a sample plugin project that could be used as a base / example for plugin writers (I plan on doing an article on codeproject.com and this will be the source for it).
What does it do?
This plugin displays a string stored in registry.
The path is:
HKEY_CURRENT_USER\Software\RegDispPlugin
Value name: DisplayString
It checks if this string has changed several times per second when today screen is shown (as the system sends refresh message to all plugins) and displays the updated message if a change occurred.
What is it good for?
First, if you write apps using mortscript or similar like the user who requested this it will let your script display stuff on today screen.
Alternatively it could be used to mark your device today with a string that isn't as easily changed as user info.
The source is basically a skeleton plugin you can use to build your own plugin on (no license / copyright to limit you) and it already has several tricks needed for the plugin to display correctly:
VGA compatibility
Text size matching system settings
Proper header in settings dialog (like on system plugins)
Proper text color when selected (according to theme)
No blinking all today screen on change
Proper resize when switching between landscape and portrait
When I was writing my first plugin I could not find all these little fixes concentrated in a single article so I had to fish for each one as the bug reports came in.
Hope you will find this little project useful.
The plugin:View attachment 41592
The source (eVC 4 project): View attachment 41583
Click to expand...
Click to collapse
This is great! I was asked if I could write a today screen plug-in for my weather application (http://forum.xda-developers.com/showthread.php?t=445576) - I couldn't since I don't have the skills and I'm writing .NET code - but this is exactly what I needed.
I'm adding support for this plug-in and will of course give credits to you.

Open Source Today Screen Widgets app

There are a lot of clock area today screen apps out there, from the simple such as PDClock, through mid-level stuff like HTC home, up to the fully customizable rlToday.
Few of these seem to be a good all-round solution though, except maybe rlToday, but I am having issues with the rlToday / Sys-to-Reg / Mortscript combo, both in terms of features (ie no support for "on" or "off" images), stability, and ease-of install (S2R seems a bugger to set up right, especially for the less technically inclined user), and the whole rlToday / S2R / Mortscript combo is hardly a turnkey one-install solution.
So to that end, I decided to try my hand at crafting a solution more appropriate to my needs.
Now, until this point I have never coded for C++ or windows mobile. I am not even a professional coder, far from it, but I do have a knack for designing good solutions, so I thought I would start teaching myself native C++ and see what I could come up with. Ultimately, my goal is to release as open source, I am hoping to maybe start a sourceforge project at some point...
I am making this post because I am now starting to get past the proof-of-concept stage and am coming up with some working code. I am tackling the various hurdles one by one and learning as I go, but it is starting to look promising.
This thread is to serve two purposes:
1) Gather my thoughts on how things are going to work so potential users can chime in on possible tweaks or changes to the features and how they should work.
2) Serve as a rallying call for any (preferably more experienced) coders who wish to get involved. I will post up any problems that I am having surmounting various issues, please feel free to help out on those. If an experienced coder liked the project that much and wanted to take the lead, I have no issues with that, as long as it remained open source.
So, with that out the way, here is what I am thinking so far:
Overall idea is pretty similar to rlToday - a script (ie a .INI or .XML file) which lists Widgets is processed and the result is drawn on the screen.
For example, here is an example INI file for a background (say transparent) PNG with a clock overlaid in the middle of the PNG, that has different layouts / images for portrait and landscape mode on a qVGA device.
Code:
;ini profile for qVGA (240 width and 320 width)
;PORTRAIT
[PortBG]
width=240
widget=image
clickable=0;
image="bgport.png"
x=0
y=0
[PortClock]
width=240
widget=text
subwidget=clock
clickable=1
clicktype=exe
clickstring="<exe to launch calendar>"
dateformat = "dddd MMMM d"
x=120
y=25
origin="cc"
;LANDSCAPE
[LandBG]
width=320
widget=image
clickable=0
image="bgland.png"
x=0
y=0
[LandClock]
width=320
widget=text
subwidget=clock
clickable=1
clicktype=exe
clickstring="<exe to launch calendar>"
dateformat = "dddd MMMM d"
x=160
y=25
origin="cc"
The [Name] of each section actually does nothing, but it will be useful in debugging / error messages ("Image for [PortBG] not found!").
Widget = choses which kind of widget it is (eg Image, Text)
subwidget = choses the subtype of widget (eg clock is a subtype of text)
The Width= entry is an idea I came up with to handle multiple screen orientations and resolutions within one profile. Basically, as this is not intended to be a full-screen app, the only relevant dimension is the screen width. Each widget therefore has an associated width. When the screen is rendered, it will check what the current width is and only render widgets that match that width. Furthermore, if a script has entries for resolutions not supported by your device, these will be ignored. Profiles are likely to be a directory with one .INI file and assorted images. Images can be in subdirectories, say grouped by width (ie a "240" dir and a "320" dir for qVGA) - that way you could release a skin as one zipped dir that supported all devices and resolutions, and you would not need to upload the "480" and "640" dirs to a qVGA device, thus saving storage space.
Each widget also has x/y coords, which usually refer to the top left, but the origin entry can change that (eg cc would be centre horizontally and vertically)
Each widget will also be able to be specified as clickable, with options as to what to do when it is clicked.
With this system it should be possible to create most things, however, here is what I am currently NOT planning on doing:
I am not aiming at offering tabbed pages of widgets, or an easy way to change widgets without writing a new script. This is aimed at a companion to something like UltimateLaunch for handling the top of the screen - a Clock, SMS / Missed Calls / VM messages, BT / WiFi status and toggles etc.
I am currently using VS2005 and the WM5 SDK, but the app is still so simple that this could probably be changed. I would like to support as much as possible, but am not overly worried about providing backwards compatibility beyond WM5. I am using Native Win32 - I want to avoid as much bloat as I can.
Planned features:
Per-pixel Alpha PNGs - IMPLIMENTED
Widgets parsed from INI - IMPLIMENTED
Parse only items from INI that match screen caps - IMPLIMENTED
Display only items that match current screen width - IMPLIMENTED (Effectively switch profile on screen orientation change)
Options screen to set current profile
Widgets
======
Text Type: - IMPLIMENTED
Source: String in INI - IMPLIMENTED
Source: String in Registry
Source: Date from format string - IMPLIMENTED
Image type: - IMPLIMENTED
Plain image - IMPLIMENTED
Status Image - Registry value
Toggles - BlueTooth / WiFi / Phone etc
Other features
===========
Multiple screen resolutions supported per INI - IMPLIMENTED
Detect Power but no Activesync - Allow enabling of BlueTooth for automatic pairing with in-car BT handsfree.
Current questions and stumbling blocks:
Having issues finding a lightweight way of displaying per-pixel alpha PNGs. Current thinking is that AlphaBlend is perfectly capable of doing the blending, it is just SHLoadImageFile that is stripping the alpha info.
See threads here and here
Not sure how I am going to handle toggling of BT / WiFi. Could use VJ's tool, but I would rather do it in my code. Any pointers on how to do it and maintain maximum WM5 / WM6 compatibility would be appreciated - VJ's tool will not toggle WiFi on my Kaiser anyway...
Could do with decent chop and chomp routines (split by char and remove leading / trailing whitespace) - does anyone know an easy way to do this in native code?
Need to work out how to find the size of a text string in pixels *before* it gets drawn to the screen with ExtTextOut
Need to impliment a date format string to text string converter that can handle date and time objects in the same string
Currently I use a bit of code to look at the string and pass it to either GetDateFormat or GetTimeFormat, but not split the string and pass relevant bits to relevant routine, then reassemble.
Need to make whole thing a today item, but delaying doing this as it seems that debugging will be harder? I also guess this would be quite easy, so I am planning on leaving this until near the end. Any advice on this subject would be appreciated.
I am interested in this. I don't know C++, but I have experience coding with other computer languages. I'll definitely be following this thread and watching for updates.
iContact source contains some pretty lightweight INI library. It isn't written by me, and it's called SimpleIni. Everything is contained in one .h file and it's very easy to use.
good luck,
larna
larna said:
iContact source contains some pretty lightweight INI library. It isn't written by me, and it's called SimpleIni. Everything is contained in one .h file and it's very easy to use.
good luck,
larna
Click to expand...
Click to collapse
Nice one, thanks
I got simpleini in and working - you were right larna, it was really easy and pain-free. Thanks!
Update:
I have a working prototype.
All basic functionality coded - text and image widget types, orientation switching, ini parsing...
Currently still not a today item, and there is loads to do in terms of error checking and freeing up memory etc, but it parses INI files OK
Once I have done some tidying up, I will release some source and maybe a demo EXE.
Hey!!
I'm already developing an application which load and extends rlToday Themes!
sources will be released soon!
The app is XIAMultitheme:
Done:
- fully working rltoday themes on a HWND
- done today plugin
- loading external dll
- all widgets are external dll
To do:
- avoid image loading via ImageFactory due to memory leak on wm6x
- port to CxImage to load PNG
- use AAROT to free rotate images (analog clock)
- today plugin does not load the engine yet
http://www.xiaprojects.com/?section=All&project=XIAMultiTheme
what do you think? mail me on priv (stefano) on xiaprojects.com
stefanux said:
Hey!!
I'm already developing an application which load and extends rlToday Themes!
sources will be released soon!
The app is XIAMultitheme:
Done:
- fully working rltoday themes on a HWND
- done today plugin
- loading external dll
- all widgets are external dll
To do:
- avoid image loading via ImageFactory due to memory leak on wm6x
- port to CxImage to load PNG
- use AAROT to free rotate images (analog clock)
- today plugin does not load the engine yet
http://www.xiaprojects.com/?section=All&project=XIAMultiTheme
what do you think? mail me on priv (stefano) on xiaprojects.com
Click to expand...
Click to collapse
hi stefano
i see nothing on your web site , nor screenshots nothing in download binaries
Why ???
evilc said:
Update:
I have a working prototype.
All basic functionality coded - text and image widget types, orientation switching, ini parsing...
Currently still not a today item, and there is loads to do in terms of error checking and freeing up memory etc, but it parses INI files OK
Once I have done some tidying up, I will release some source and maybe a demo EXE.
Click to expand...
Click to collapse
can you upload here the demo program ?
Sounds pretty neat!
I don't understand some of the terminology you use, but I think you may be talking about a feature I had an idea for:
profiles (XML files) can be associated with a today plugin such that you can make a profile appear in the today plugins list for each skin (XML file) you have installed - thus making each XML profile behave like it was a today plugin in it's own right.
Is that what you are talking about?
brunoisa10 said:
can you upload here the demo program ?
Click to expand...
Click to collapse
Demo uploaded to first post. Unzip it to \Storage Card\shared on your device and run.
BE AWARE, there is very little error checking when parsing the INI.
If you omit a horizres line for any widget, for example, the program will crash.
Well I checked out XIAMultiTheme and it looks promising.
I was not aware that there was a memory leak bug in IImagefactory, I wasn't planning on using it in the final version anyway, so no biggie.
If XIAMultiTheme is capable of doing what I had envisaged for openClock, I will probably stop development, as you obviously know what you are doing much more than I do
However, a couple of points:
1) Size.
XIAMultiTheme seems to be a lot bigger and requires .NET - This seems to mainly be to do with the CxImage library - just PNG support seems to add more size than my entire app is! I am flabberghasted that supporting per-pixel Alpha PNGs takes this much, an alphablend routine can be done in a K or two, hundreds seems overkill. Apart from the requirement for rotation (for analogue clocks) I do not see why a full image lib is needed. Just a load and alpha blit.
2) Orientation awareness.
As in I don't see any in XIAMultiTheme. I am really happy with the way I have handled this in openClock - each item in the INI (XML in your case) has a "horizres" value associated with it. At render time, current screen width is compared to each item's horizres and if it matches, the item is drawn, if it doesn't then it isn't shown.
This provides a nice way to combine portrait, landscape and multi-res capabilities into one theme. And as long as you allow relative paths in the theme(eg 320\320bg.png, 240\240bg.png, common\common.png) then you can have a theme which supports all resolutions and orientations, and allow the user to store what they want on their PPC (eg if their device is qVGA, they know they do not need to put the 640 and 480 dirs on their PPC for a given theme, as they won't be used)
3) Stateful buttons.
Items like a voicemail button / wifi button etc should probably have two images associated with them - one for "no messages", one for "have messages". I was planning on putting something in openClock along the lines of specifying a reg key, an operator and an image.
eg:
regkey=HKEY_LOCAL_MACHINE\...
on=thisimage.png, gt, 0
off=thatimage.png
To set to thisimage if the key is of value greater than (gt) 0 or thatimage.png if not.
Good luck!
evilc said:
just PNG support seems to add more size than my entire app is!
Click to expand...
Click to collapse
Yep. Same goes for MortButtons... (and MortPlayer, but there, the player itself is bigger in relation...)
I am flabberghasted that supporting per-pixel Alpha PNGs takes this much, an alphablend routine can be done in a K or two, hundreds seems overkill.
Click to expand...
Click to collapse
The alphablend routine is in the Draw method, and even in source code not much more than 1kB.
The trouble is to load the PNG without losing the alpha information. With Windows' API, you can't do it - there's only the crippled SHLoadImage. So you need the entire code to decode PNGs, i.e. libpng, which in return requires zlib - over 200kB only to load PNG! The remaining kBs are spend to load/decode JPEG (quite some kBs, too), GIF (if enabled), BMP, ... and some basic image processing (resample, rotate, ...).
btw, you might want to check MortImg.dll and MortImage.lib, which is a (quite) simple wrapper. If only one image library is used, at least some memory on the device is saved (and if MortButtons or MortPlayer since b72 is used, also main memory).
Check out http://mort.svnrepository.com/svn/mort/MortTools/trunk with any SVN client (e.g. Tortoise), use "guest" for login and password.
evilc said:
Well I checked out XIAMultiTheme and it looks promising.
I was not aware that there was a memory leak bug in IImagefactory, I wasn't planning on using it in the final version anyway, so no biggie.
If XIAMultiTheme is capable of doing what I had envisaged for openClock, I will probably stop development, as you obviously know what you are doing much more than I do
However, a couple of points:
1) Size.
XIAMultiTheme seems to be a lot bigger and requires .NET - This seems to mainly be to do with the CxImage library - just PNG support seems to add more size than my entire app is! I am flabberghasted that supporting per-pixel Alpha PNGs takes this much, an alphablend routine can be done in a K or two, hundreds seems overkill. Apart from the requirement for rotation (for analogue clocks) I do not see why a full image lib is needed. Just a load and alpha blit.
2) Orientation awareness.
As in I don't see any in XIAMultiTheme. I am really happy with the way I have handled this in openClock - each item in the INI (XML in your case) has a "horizres" value associated with it. At render time, current screen width is compared to each item's horizres and if it matches, the item is drawn, if it doesn't then it isn't shown.
This provides a nice way to combine portrait, landscape and multi-res capabilities into one theme. And as long as you allow relative paths in the theme(eg 320\320bg.png, 240\240bg.png, common\common.png) then you can have a theme which supports all resolutions and orientations, and allow the user to store what they want on their PPC (eg if their device is qVGA, they know they do not need to put the 640 and 480 dirs on their PPC for a given theme, as they won't be used)
3) Stateful buttons.
Items like a voicemail button / wifi button etc should probably have two images associated with them - one for "no messages", one for "have messages". I was planning on putting something in openClock along the lines of specifying a reg key, an operator and an image.
eg:
regkey=HKEY_LOCAL_MACHINE\...
on=thisimage.png, gt, 0
off=thatimage.png
To set to thisimage if the key is of value greater than (gt) 0 or thatimage.png if not.
Good luck!
Click to expand...
Click to collapse
thanks you for your good words
1) beta version will be lighter ... (need to known what image loader use)
2) will be done on Page component (tab themes are already working)
3) will be done on sensor dll with "regex" (maybe)
XIAMultiTheme is in alpha development...
I would like to "merge" code with you or may be DLL collaboration.
XIAMultiTheme does NOT need .NET it's low level GDI "C" source
When XIAMultiTheme go on Beta status the dll will be around 10kb
Configurator is .net
Thanks you
Thanks for that mort!
However, if my entire app is (currently) 61K and it supports per-pixel alpha PNGs (Via the apparently bugged IImagefactory), then surely it is more than possible in less than 100K.
It seems like libpng must be grotesquely bloated for our needs. In an ideal world, someone would re-code SHLoadImage to not lose the alpha channel for PNGs. Maybe a workaround would be to convert the PNG into a 32bit per-pixel BMP with alpha before it is passed to SHLoadImage, as SHLoadImage deals with alpha BMPs just fine and AlphaBlend works just fine with AC_SRC_ALPHA data.
stefanux said:
thanks you for your good words
1) beta version will be lighter ... (need to known what image loader use)
2) will be done on Page component (tab themes are already working)
3) will be done on sensor dll with "regex" (maybe)
XIAMultiTheme is in alpha development...
I would like to "merge" code with you or may be DLL collaboration.
XIAMultiTheme does NOT need .NET it's low level GDI "C" source
When XIAMultiTheme go on Beta status the dll will be around 10kb
Configurator is .net
Thanks you
Click to expand...
Click to collapse
Hi stef,
I am more than happy to help out on your project with design ideas, testing and proofreading of english translations.
I have plenty of ideas on what the ultimate today screen widget app should feature, I just had to set my sights lower due to my (lack of) coding abilities.
Do you have a forum or something on your site? I don't see one.
I am slightly concerned about point (3) and your regex example. I would maybe try and keep it simpler, XML is already a little complicated for non-technical users to understand, throwing regexs into the mix may be the straw that broke the camel's back. That's why I went with INI files - simpler to use for lusers
evilc said:
Thanks for that mort!
... it supports per-pixel alpha PNGs (Via the apparently bugged IImagefactory), ....
Click to expand...
Click to collapse
Please try to do this test:
load 20 png's with imgfact. and start drawing all of them like a simple animation for 10 fps... image[]->Draw() after 5 minutes my application will blow up my pda (wm61) I thinks it's a "COM" bug because it happend only calling "Draw"
stefanux said:
Please try to do this test:
load 20 png's with imgfact. and start drawing all of them like a simple animation for 10 fps...
Click to expand...
Click to collapse
Are you kidding??? 10FPS? I have a kaiser!
Seriously though, if we can get a code snippet that proves this, surely we can get MS to issue a patch?

GSlide 0.3 - Now with MortSupport :)

Hi Everyone
Try my new GSlide version which has built in MortScript plugin support
http://81.93.138.210/GSlide
I bet you can make some cool things with this
Also please try to make some skins. Still have some bugs in the skinning support but it works pretty well
Give me comments!
Ciao,
Lars
hallo, just found this. a smooth and fast fingerfriendly file explorer. very good.
but here are my problems:
- can´t open a txt-file file or xml file, but need a text editor, is it possible to link these files to totalcommander ?
- the app crashes (unexpected error)when i try to open the "windows" folder and "own videos"-folder ?
- what are these functions/apps at the right bottom ?
thanks for help. if you want i can do a skin for it.
bluemetalaxe said:
hallo, just found this. a smooth and fast fingerfriendly file explorer. very good.
but here are my problems:
- can´t open a txt-file file or xml file, but need a text editor, is it possible to link these files to totalcommander ?
- the app crashes (unexpected error)when i try to open the "windows" folder and "own videos"-folder ?
- what are these functions/apps at the right bottom ?
thanks for help. if you want i can do a skin for it.
Click to expand...
Click to collapse
It actually used Word Mobile by default when i tried openning a text file.
it runs very very smoothly. nice interface. very simple and straightforward.
obviously just a beginning as there's no copy, paste, cut... advanced config and other options. maybe a small kinetic toolbar throttlelauncher like with the most important actions on it?... just throwing stuff in the air.
very very cool.
nice start...
implement what already been stated + maybe some smoother transitions.
I love your program. It'll probably be a free alternative for Resco Explorer in the future. Keep developing and listen to user feedback.
One feaute request: I'd like to have the option of row height. This program will mainly be used with thumbs and not everyone has the same thumb size.
@nir: i know i can open txt-file with word but i rewrite xmls and txt-files for programming.
anyone elso has a crash when opening windows folder ?
Hi
Thanks for your feedback!
First of all, replace the old installation with the new 0.3 version.
Regarding opening files:
By default GSlide uses shell execute, which is to say the default windows association for the file type.
By adding the MortSupport feature i have made it possible for you to add custom actions by writing or modifying scripts in the actions folder. Read more on the site
GSlide has problems with large folders such as the windows folder. The memory runs out. This can be handled by paging the directory (splitting it up into several pages).
Regarding errors for the context shortcuts, its mostly due to different file paths in the operating system. In the swedish version for example My Documents is called Mina Dokument... Go to the /GSlide/actions/ folder and edit the "GSlidePath.mscr.inc" file which is the place where all system paths are stored. There you can change the paths according to your config.
Regarding skins:
Lot of updates have been made such as,
- row height
- background color
- font
- font weight
- etc...
I will keep updating GSlide with many cool things Help me to write cool script actions! Post to web maybe?
Dont forget to use the latest version!
Ciao,
Lars
New API script for all GSliders
I made a new, more logical API include to make developing of actions easier.
I have also added a "copy file" and "delete file" action as proof-of-concept.
the GSlideAPI script is pretty nifty if I might say so it implements a Object-Oriented looking code style to MortScript. check it out
Ciao
Just tried it and it seems to run pretty smooth. I am sure this is just the beginning for this app. With time this could be something very useful and great. Good job so far
Some suggestions for new versions:
- possibility to show the taskbar
- scrolling looks good, BUT it is a little bit difficult to stop the list and click on the right file - perhaps you could build in a gesture to stop (e.g. short tap on screen => stop)
- of course such basic things like "rename", "send" etc. (file size...)
BUT GREAT WORK! GSlide is a tool which fills another gap for a fingerfriendly Windows Mobile
Thx
Melkor
edit: Nevermind
Updated version coming shortly
hi
New GSlide on the way soon. I have been focusing on getting friendly with MortScript for the last couple of days
I will make a new actions menu with improved usability and make it possible for an action to span several steps (such as copying or moving files to other directories). the pure UI bling and skinning related stuff will have to wait a bit
Please give me feedback concerning the MortScript API.
Ciao

[App] GSlide 0.7

Build your own sliding app today!
Check out the latest version, AND read the new API Docs. Its a piece of cake making your own slide app. All you need to know is basic MortScript!
---------------------------------
Go to http://www.gslide.mobi
* New cool screenshots and examples on the site!
I am moving the discussions to my GSlide Google group. For queries turn to
I feel i need to to start fresh somewhere I will keep this updated anyway of course.
http://groups.google.se/group/gslide
Last updated with:
0.7
- Many usability improvements. About time you might say, after all the backend stuff
- "Easy access" buttons on the top bar. Implemented using the Faces API of course
- Much improved RSS handeling
- Super easy adding of RSS channels
- Super easy adding/editing of GSlide Settings
- A lot of tweaks here and there
0.6.9
- Super cool update, as always
- Real RSS reader
- Configurable alpha effects for many objects
- Lots of other good under-the-hoddie stuff
0.6.7
- New really cool message overlay feature which is totally configurable. Right sweep the top bar for an example. Why not use it for a preview of images?
- A really cool new Face feature which makes it possible to capture clicks where ever they occur on the screen!
- Much improved code!
- Improved the text viewer so that it expands with text size.
- Ships with a fully functional XML parser in MortScript!
I really need to update the API! I have made many main script functions much easier to access. With all the new features you can really make any kind of app. Not just sliding lists! Because of the Faces feature you can load any image and just create a simple script which tells at which click-coordinates scripts shall run. Check out the onMessageClick.mscr file.
0.6.5
- GSlideAPI.Remote ready! To get things started i made a Wazzup feature where you can download news from the GSlide site.
- Made a nice text viewer sample for the Wazzup context.
- Made a LOT of bug fixes.
- Added a lot of new features for the API. Almost all Context properties are now possible to change at runtime through the super simple script API.
- With all new features your can really create just about any app using GSlide!
The Wazzup feature might need a change of settings. Try to open the context, if it says it cannot connect:
- go to the Settings context
- then to Remote
- then double click on Internet Connection and fill in the name of your internet connection. The default value is "Internet" which usually works.
0.6.3
- Click X/Y positions. You now get the users current X/Y position from the GSlideAPI. This means that you can calculate where the user clicked. If you dont get the point now dont worry, i will soon write about this in the API Ref. But its MAJOR feature!
- You can now have a real fullscreen with no bottom menu if you set <hideBottomPanel> to true in the Context.xml file
0.6
- Optional static top bar with dynamic message text and dynamic background (settopbartext, settopbarimage)
Events supported for the top bar are onClick, onDoubleClick, onSweepRight, onSweepLeft.
- More event handlers are now available through the api such as onApplicationStart and onApplicationExit.
- More very cool things coming soon.
0.5.6
- All new Oxygen skin with much more complete icon set (drawback is total size in kb)
- Communication with GSlide is now xmlrpc standard.
- More possibilities to make adhoc changes to events handlers (onApplicationStart, onApplicationExit, onTapAndHold, onBackTapAndHold, onClick, onDoubleClick, etc).
- Tap and hold support
- Renaming the menues is now possible.
- Right sweep now takes you to the actions (cut and paste etc) as default (really easy to change in the context.xml file. Look for the onSweepRight tag.).
0.5.2
- New "GSlide Settings" Context which makes it easy to set system paths according to your whishes. Switch to the new Settings context and click on the "Contexts" folder. When you click on the different settings here you can input new paths. Dont mess around with paths that look like this: GSlideAPI[paths]... unless you know what your doing.
- Working zip features again.
- A bit reworked skins.
- Uses the latest MortScript beta.
0.5
- GSlide can now read JSON! This means that you can load data from basically any data source, straight from the net.
This could be anything from RSS to stock information or mail accounts.
Contact me through my xda-developers GSlide page for more info until I finish the docs.
- You can now set shortcuts in GSlide to access files or folders in a snap. Super cool feature! Make new shortcuts by selecting any file or folder. Go to the Actions View by choosing "Show Actions". Here simply click on "Create Shortcut". You are now asked if you want to save it in the default location which is the GSlide specific folder used with the Right Sweep. Otherwise you can make a regular shortcut anywhere you wish by selecting a folder.
<-- Sweep = Back
Sweep = Shortcuts -->
0.4.9
Custom file/app icon support
You have to make your own icons though. I put a bunch of ok samples in the Default contexts new Icons folder. to make your own, simply name them with the associated extension (txt.gif or whatever). exe files and lnk files can also have associated icons such as PocketArtist.gif or Opera.gif (it does not need to be gif, any common bitmap format should work...)
0.4.8
New "lock list" function which secures execution of actions.
0.4.7
- New Actions with the same sliding interface as the rest of the app.
- New filter action. Now you can actually open the windows folder, IF you apply the filter first.
- Many fixes and patches.
- A lot better structure of folders and files.
- No need to specify the location of scripts in the context.xml files. (though its still possible).
* When an action is executed, GSlide will automatically redirect to the previous view. It just takes a moment *
0.4.5
- Easier install/config. Checks many more paths automatically.
- Awaited bug fixes
- Much improved Context handling (no restart needed).
- Better sweep functionality.
- Right sweep now opens folders as default.
- Much improved Scripting API.
- New Contexts for changing Volume and Backlight.
- 250 less KB
0.4
- Horizontal sweep support
- More detailed list behaiviour config, per context.
- Support for external, custom, event handlers for:
-- onSweepRight (default, "Open with ZNote")
-- onSweepLeft (default, "Back")
-- onDoubleClick (default, "Open with shell")
IMPORTANT INSTALL NOTE:
All the actions for list behaiviour is set in the context.xml file (GSlide/context/Default/context.xml is standard). The default paths to the MortScript.exe and the different scripts are /Program/GSlide/actions/....
This will probably have to be changed to your local WM5 file system path naming (/Program Files/GSlide/actions/ for UK/US).
To skip the custom actions for double clicks and sweeps and make GSlide operate as usual, just remove the lines:
<scriptEngine>/Program/GSlide/actions/MortScript.exe</scriptEngine>
<onSweepRight>/Program/GSlide/actions/onSweepRight.mscr</onSweepRight>
<onSweepLeft>/Program/GSlide/actions/onSweepLeft.mscr</onSweepLeft>
<onDoubleClick>/Program/GSlide/actions/onDoubleClick.mscr</onDoubleClick>
0.3.9
- I improved the list control with two new settings in the context.xml
<listMaxSpeed>15</listMaxSpeed>
<listMinReleaseSpeed>10</listMinReleaseSpeed>
The first tag sets the max speed when sweeping.
The second tells the list when it should start to scroll away. The higher the value the faster you have to sweep to get it scrolling.
0.3.8
- New and improved actions
0.3.7
- Since a guy had an strange incident with files getting deleted without any clear reason (i have no idea if GSlide was to blame but still...), i have added a bunch of security features:
-- Execution of GSlideAPI scripts will exit at once if GSlide.exe is not running.
-- Folders can not be deleted from the root of Windows. This means for example: \Windows\, \Programs\, \Storage Card\ etc
PLEASE DOWNLOAD THIS RELEASE, just to keep on the safe side.
0.3.6
-Included ZNotepad and a cool new light skin.
-Also added a Refresh directory action.
-Removed some bugs
Have fun sliding
Ciao,
Lars
PS.
GSlide have, at the moment, only QVGA skins... VGA is onthe way. you can of course easily make a new skin yourself if you can't wait
You might have to update the GSlideAPI.mscr file in the /actions/ folder with new system paths...
Hallo Lars. The application still crashes on /windows, photos and so on ! so ..what should i say.... nice but not usefull.
Hi,
please help me out by telling me the number of files in your Photos folder.
And when you say crash, is itan unhandled exception or a GSlide popup?
My best suggestion for large folders at the moment is to keep the row size/icon size small (approx 30x30). this consumes far less RAM.
Thanks for trying it out
I'll let you know if I come up with some other solution.
Ciao,
Lars
i get an unexpected error (think it was from wm6) and the application closes. in photos i have just five 3 mpix pictures. same when i try to open the windows folder.
i uninstalled it and can't tell you more.
thanks man... this is wonderful.
Gslide seems to be moving forward really well.
it'll certainly switch my resco explorer soon
Hmm... Let me see what i can do...
The windows folder is a "No-can-do" folder until i make a new less memory intense scrolling list.
Can you help me by downloading and trying more of the functionality and give me feedback.
On my device it works like a charm
Also tried it on a Qtek 2020i WM2003SE with CF2 and it worked fine.
Ciao
Dont forget to try out the scripting API!
Update 0.3.5.1
Fixed a new Action menu with more thumb-friendly function
Uploaded 16:00 GMT+1, only the GSlide.exe file has changed.
Ciao
the zip file seems empty ...
corrupted upload?
the programs looks promising
t0k0m0k0 said:
the zip file seems empty ...
corrupted upload?
the programs looks promising
Click to expand...
Click to collapse
empty here too...
No files in the zip folder. Would really like to try out this program.
Sorry! Uploaded from my HTC
Let me try again
Now!
The zip should work
Let me know if you have any problems.
Ciao
Please remember to update the paths in the /GSlide/actions/GSlideAPI.mscr file if you get unexpected behaiviour. The file is richly commented (to be written by me anyway ) and is easy to edit.
Ciao,
Lars
PS.
Dont forget to read the small, but growing, "GSlide Developers Guide" in the /actions/ folder
This is simply fantastic!! Thank you for developing another file browser
Requests:
1. Can you make the files seen pick up the associated icon? (obvious)
2. Please make the up directory button only require one tap, I like having to double tap to execute files but not to go up a directory.
3. I notice sometimes the list stops scrolling right to the end, may want to look into this.
4.Application needs a name, it only displays “\” as program name in running apps.
5. Have had an error once (I have NETCFv3.5 in the ROM):
Code:
GSlide.exe
ArgumentOutOfRangeException
ArgumentOutOfRangeException
An error message is available for this exception but cannot be displayed because these messages are optional and are not currently installed on this device. Please install ‘NETCFv35.Messages.EN.wm.cab’ for Windows Mobile 5.0 and above or ‘NETCFv35.Messages.EN.cab’ for other platforms. Restart the application to see the message.
at System.Collections.ArrayList.get_Item(Int32 index)
at Scroller.KList.MouseDown(MouseEventArgs e)
at Scroller.ScrollingPane.ScrollingPane_MouseDown(Object sender, MouseEventArgs e)
at System.Windows.Forms.Control.OnMouseDown(MouseEventArgs e)
at System.Windows.Forms.Control.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.ContainerControl.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Form.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
at System.Windows.Forms.Application.Run(Form fm)
at Scroller.Program.Main(String[] args)
Please keep up development
Hi
Thanks for trying out my little app!
Let me help you out a bit,
1. Can you make the files seen pick up the associated icon? (obvious)
- I have tried this, but i think i will place assoc. icons in the skin folders for now. I didnt get the windows icons to work properly.
2. Please make the up directory button only require one tap, I like having to double tap to execute files but not to go up a directory.
- Okidoki, I will make it optional
3. I notice sometimes the list stops scrolling right to the end, may want to look into this.
- This is actually my "Select-Zone" feature It is helps you to select items by keeping the list still. The width of this region is set in the context.xml file of each context.
4.Application needs a name, it only displays “\” as program name in running apps.
- Ahh... Fix it i will
5. Have had an error once (I have NETCFv3.5 in the ROM):
- I think i have fixed that problem now. Download the new exe
Ciao
Lars
mysparkle said:
3. I notice sometimes the list stops scrolling right to the end, may want to look into this.
- This is actually my "Select-Zone" feature It is helps you to select items by keeping the list still. The width of this region is set in the context.xml file of each context.
4.Application needs a name, it only displays “\” as program name in running apps.
- Ahh... Fix it i will
Click to expand...
Click to collapse
Looking better
3. What I meant is if the app is run from a shortcut it shows the WM top bar and covers up the up folder icon. It opens in full screen and doesn't appear to do this if you run it from a file explorer (kinda defeats the purpose), any ideas?
4. Still showing "\"
6. Are you able to make the action list scrollable with gestures so I don't have to push the tiny up or down arrows to move through the list?
Still heaps of potential!!
BEWARE!!!!!
Okay, i have NO Idea what just happened but I know i'm pretty pissed off.
I extracted the zip to try gslide out and i decided i'll stick to my previous program. when i tried to delete the folder, it deleted everything but two files. then i was trying to get dynamo 3.2.01 (previous version ran fine) and i went to check a registry key so dynamo would run and before i could go back to my total commander, mortscript came up with a message saying "Deleted!" thinking it deleted remaining files from the gslide folder, i dismissed it. but apparently something somehow deleted just about every file on my storage card! 5 gigs of music, morphgear roms, pictures, BACKUP files, EVERYTHING!!!!
I have no idea what caused this but I wanted to warn everyone that this happened to me and tto be careful. maybe be safe and if you need to delete the gsfolder, take your memory card out and do it from your PC
UPDATE: I believe it has to do something with mortscript. I am using the rom in my sig and it has mortscript cooked in and has a folder of mortscript commands and now it is empty! I'll make sure that chef knows
Nice applications
Trying it now
Hope will work
Thanks
richabi said:
Okay, i have NO Idea what just happened but I know i'm pretty pissed off.
I extracted the zip to try gslide out and i decided i'll stick to my previous program. when i tried to delete the folder, it deleted everything but two files. then i was trying to get dynamo 3.2.01 (previous version ran fine) and i went to check a registry key so dynamo would run and before i could go back to my total commander, mortscript came up with a message saying "Deleted!" thinking it deleted remaining files from the gslide folder, i dismissed it. but apparently something somehow deleted just about every file on my storage card! 5 gigs of music, morphgear roms, pictures, BACKUP files, EVERYTHING!!!!
I have no idea what caused this but I wanted to warn everyone that this happened to me and tto be careful. maybe be safe and if you need to delete the gsfolder, take your memory card out and do it from your PC
UPDATE: I believe it has to do something with mortscript. I am using the rom in my sig and it has mortscript cooked in and has a folder of mortscript commands and now it is empty! I'll make sure that chef knows
Click to expand...
Click to collapse
Scary! I am sorry to hear of your major mishap
I am just wondering what happened?!
GSlide is contained in its root folder without any connections to the outside world except through MortScript. And the MortScript.exe is located in the GSlide folder as well...
I just can not see how deleting the GSlide folder could trigger anything... And GSlide has no MortScript saying just "Deleted!" so the dialog was not from GSlide.
* How, with which app, did you delete the GSlide folder?
* Which two files where left in the GSlide folder after your first delete attempt?
NEW UPDATE:
Did you delete the GSlide folder from within the GSlide app? This could maybe screw up things, and could explain the two locked files as you are basically deleting GSlide in it's own running process... kind of asking it to implode.
This is just a theory of course and does not account for the loss of the other data.
Didn't get the rom/sig thing
Please get back to me asap with help.
Thanks,
Lars

Can you extract a single-file app from another WM OS?

Here is what I'd like to do: I'd like to use Samsung Omnia 2's default Contact Manager with my other WM phone. So I copied the Omnia 2's contact manager program in the \Windows folder (SECContact.exe) to my other WM phone and tried to run it. But it only gives me a black screen.
I know you probably should install an app rather than copy the .exe file, but since it's only a single-file program, I was hoping this would work.
Is there any way to make this work? I really like Samsung Omnia 2's contact manager and calendar apps.
i dont know what wm phone youre trying but there are extracted samsung app in cab files floating around on modaco forum. that calendar is called touch calendar.. google search it
screwdriv said:
i dont know what wm phone youre trying but there are extracted samsung app in cab files floating around on modaco forum. that calendar is called touch calendar.. google search it
Click to expand...
Click to collapse
I'm trying to extract the calendar and contact apps.
Yes, I've seen them at Modaco.
But the problem is, they are not in CAB format. They are in just zipped files to be used when creating a custom ROM.
Is there an easy way to create an installable CAB file from these extracted files?
You got a black screen cos You didn't copy the corresponding DLL file(s) also. The ZIP files are not always for ROM creation, sometimes they are just for copying. And if You didn't find i8000 contact manager and calendar CABs, You didn't search enough, sorry.
For CAB file creation search for WinCECabManager.
If you have a PC with a Microsoft development environment on it, you can use the command DUMPBIN /ALL SECContact.exe to dump out the program's import table, which contains a list of the DLLs the program requires.
If you use a Borland/Embarcadero development setup, Rad Studio, Delphi, C++ Cuilder etc., TDUMP does a similar job.
If it has been written in .NET use Red Gate's .NET Reflector to open it up and see the address spaces it requires.
aiiro said:
You got a black screen cos You didn't copy the corresponding DLL file(s) also. The ZIP files are not always for ROM creation, sometimes they are just for copying. And if You didn't find i8000 contact manager and calendar CABs, You didn't search enough, sorry.
For CAB file creation search for WinCECabManager.
Click to expand...
Click to collapse
Well, I did get the i8000 contact manager and calendar apps from Modaco, but they result in the same black screen also.
http://windows.modaco.com/topic/298414-cabs-repository/
Is it possible that these apps are supposed to work only on Samsung phones from the beginning? It's conceivable that these apps check the device first and decide to operate or not based on the device.
stephj said:
If you have a PC with a Microsoft development environment on it, you can use the command DUMPBIN /ALL SECContact.exe to dump out the program's import table, which contains a list of the DLLs the program requires.
If you use a Borland/Embarcadero development setup, Rad Studio, Delphi, C++ Cuilder etc., TDUMP does a similar job.
Click to expand...
Click to collapse
You do NOT need these development environments to examine native apps, you simply need CFF Explorer, and the best is, it costs nothing because it is freeware!
Why do low-level actions on .exe analysis if probably the packaging on the donor device has done already all you need? A rough workflow could be:
Get the .nbh from the donor device
dump it with e.g. OS Builder
identify the package with the application you need
You could also pick it from a kitchen for the donor device.
It will require effort to analyze the dependencies (.rgu, .provxml) and linked .dll.
In general there are apps that are easy to get and others are difficult, no simple rule here.
@jwoegerbauer Good point!
CFF Explorer is a nifty bit of work for a freeware program.
Click on the Dependency Walker tree entry to see what the program requires.
My view of the things
tobbbie said:
Why do low-level actions on .exe analysis if probably the packaging on the donor device has done already all you need?
Click to expand...
Click to collapse
An .EXE (always by default) relies on COREDLL.DLL, regardless the .EXE is written either in managed or in native code, but COREDLL.DLL is not COREDLL.DLL. It is alone OEM's decision what functionality to pack into device's COREDLL.DLL . Means which API-functions COREDLL.DLL exports.
This also is known as OS's license level. For a core version, i.e small function range, OEM (actually) has to pay Microsoft a license fee of $3 USD, a pro version, i.e full function range, (actually) costs $16 USD.
This in mind, you first of all always have to compare the unit's COREDLL.DLL's export table and the .EXE's import table, if an .EXE will not run, hereby mostly reporting an error like "components missing".
Resume: Only if you find the APIs imported by .EXE in COREDLL.DLL's export table, the .EXE runs.

Categories

Resources