Extended System Control plugin for DesktopX

Posted by Julien on June 22nd, 2009

image

The plan for this plugin is to include all system-related functionality that isn’t already available in the DesktopX System namespace.

 

Download

You can download a test version here (set to expire on 10/5/2009).

If you have ideas for stuff to add to this plugin, feel free to post them on the DesktopX 4.x request thread.

 

Plugin Information

Mouse wheel

  • SystemEx_OnMouseWheel(rotation)
  • SystemEx_OnMButtonDown(x, y)
  • SystemEx_OnMButtonUp(x, y, dragged)

Monitor information

  • Monitors
  • NumberOfMonitors
  • GetMonitor(index)

MonitorInfo object:

  • IsPrimary
  • Left
  • Top
  • Bottom
  • Right

Volume

  • Volume
  • Mute
  • PeakValue (read-only)
  • SystemEx_OnVolumeEvent(volume)
  • SystemEx_OnMuteEvent(isMuted)

Instance

  • CommandLine
  • CommandLineArgs
  • IsFirstInstance
  • SystemEx_OnNewInstance(commandLineArgs)

Misc

  • VerifySignature(path, signature, type)

 

Documentation

Mouse wheel

SystemEx_OnMouseWheel(rotation)

When the mouse is over the object and the mousewheel is used, the SystemExOnMouseWheel
function will be called with the wheel rotation passed as a parameter.

The wheel rotation will be in number of lines.

Default value: 3
Default value for page scrolling: 10

A positive value indicates that the wheel was rotated forward, away from the user;
a negative value indicates that the wheel was rotated backward, toward the user.

SystemEx_OnMButtonDown(x, y) & SystemEx_OnMButtonUp(x, y, dragged)

When you middle click on your object, the SystemEx_OnMButtonDown function will be
called. When you release the button, theSystemEx_OnMButtonUp function will be called.

Both functions will have the mouse coordinates relative to your object passed as
parameters.

 

Monitor Information

This one was asked by Zubaz to better handle multi-monitor systems. As it turns out, the virtual screen coordinates are not nearly enough to be able to position objects on multi-monitor systems. WMI is exposing monitor information, but it does not seems to work reliably (it only gives information for the first monitor on my system for example).

SystemEx.Monitors

Gets an array of MonitorInfo objects

SystemEx.GetMonitor(index)

Returns the MonitorInfo for the given screen

SystemEx.NumberOfMonitors

Gets the number of monitors on the machine

 

Volume Information

SystemEx_OnVolumeEvent(volume)

When the user change the master volume through the volume mixer or another application
your object callback is called. The volume parameter will contain the current master
volume.

XP Compatibility: never called.

SystemEx_OnMuteEvent(isMuted)

If the volume is muted, your object callback is called.
isMuted will be True if the volume has been muted, false otherwise.

XP Compatibility: never called.

SystemEx.Volume

Sets or gets the master volume.

Usage: 
SystemEx.Volume = <volume>
<volume> = SystemEx.Volume

<volume> should/will be between 0 and 100. Any value outside these bounds will be capped.

SystemEx.Mute

Mute or un-mute the audio stream

Usage:
SystemEx.Mute = True
isMuted = SystemEx.Mute

Mute can take two values: True and False.
If Mute is True the audio stream is muted, otherwise it is not muted.

SystemEx.PeakValue

This is a read-only property. It allows you to get the peak level value for the
currently playing sample.

Usage: 
level = SystemEx.PeakValue
level will be between 0 and 100.

XP Compatibility: might not work with some cards, in which case it will always  returns 100.
It reads from the waveout device, so it won’t work when reading from a CD for example.

 

Instance Information

SystemEx.CommandLine

Get the full command line (including the path to the executable and DesktopX-specific arguments)

SystemEx.CommandLineArgs

Get an array of command line arguments.
Command line arguments have been cleaned up to remove DesktopX-specific arguments (in the case of single-exe gadgets)

SystemEx.IsFirstInstance

Will be True if this is the first instance to run, False otherwise.
It is preferable to check for it at startup and close the gadget accordingly,
as only the first instance will receive a callback message when a new instance is started.

SystemEx_OnNewInstance(commandLineArgs)

Gets called when another instance is started. The command line arguments are passed in an array.

 

Misc Information

SystemEx.VerifySignature(path, signature, type)
Check the signature of the file pointed to by path.

The only type of signature supported at this time is SIGNATURE_SHA1

 

Changelog

1.0 Build 228:

  • Renamed to DXSystemEx (plugin namespace is now SystemEx)
  • Added SHA1 signature check
  • Added MouseWheel and Middle button click callbacks (merged from DXMouseWheel)
  • Added Master volume control / Mute / Peak (merged from DXVolumeControl)
  • Added instance information (merged from DxInstance)

1.0 Build 205:

  • First test version

DXInstance: command line & single instance plugin for DesktopX

Posted by Julien on June 17th, 2009

This is a very small plugin for DesktopX that exposes command line information in your scripts, allowing you to act on certain parameters. It also adds a new callback that is called when another instance is started and gives you its command line arguments.

Use

  • associate a gadget to a custom file type and be able to do custom processing when called with the file path as an argument.
  • make the "Tasks" category of the jump list in Windows 7 usable (they are shortcuts and supposed to be available even if the application is not running, so they need to be shortcuts to the single exe, not the extracted one).
  • handle any other custom command line arguments like a normal application.

Documentation

Remember to select “Allow multiple instances of the application to run” when exporting your gadget!

Here are the new functions/callbacks available to your scripts:

Instance.CommandLine

Get the full command line (including the path to the executable and DesktopX-specific arguments)

Instance.CommandLineArgs

Get an array of command line arguments. Command line arguments have been cleaned up to remove DesktopX-specific arguments (in the case of single-exe gadgets)

Instance.IsFirstInstance

Will be True if this is the first instance to run, False otherwise. It is preferable to check for it at startup and close the gadget accordingly, as only the first instance will receive a callback message when a new instance is started.

Instance_OnNewInstance(commandLineArgs)

Gets called when another instance is started. The command line arguments are passed in an array.

Download

This plugin functionality is now part of the DXSystemEx plugin. You can get more information in this blog post.

 

Note: This plugin will not work with single-exe gadgets (or widgets)! Due to the way simple deployment gadget’s command line is handled, adding arguments will result in the gadget not even starting (it’s treating almost any command line argument as a path…). I sent a bug report/request to Stardock, but in the meantime, you will have to use custom deployment. I have a binary patch available for DXAppCustom.bin that fixes the command line parsing and allows gadgets to get the original command line (but disables ObjectBar-related code as it’s kind of a hack), so it’s definitely fixable. Let’s hope the next version of DX will have a fix.

DXTaskbar7: a DesktopX plugin to access Windows 7 taskbar extensions

Posted by Julien on June 12th, 2009

DXTaskbar7 - Preview

With Windows 7 a few months away, it was time to bring some of the new features to DesktopX. One of the things gadgets could really benefit from is the new extended taskbar. It has a few new options such as jump lists, tasks, thumbnails toolbars, icon overlays, progress bars and thumbnails.

DXTaskbar7 is a new plugin for DesktopX that allows you to access all those new features from your DesktopX scripts.

How to help

Download the DXTaskbar7 package and start creating gadgets &widgets!

What to look for

  • Tab handling problems: tabs not appearing, tab name and icon not properly updated
  • Toolbar: icon corruption
  • crashes or memory leaks

DeliveryTracker-Win7What is broken/not working properly

  • ActiveX controls are not drawn on the tab preview (this is a problem with DesktopX)
  • This is a DEBUG build, so it’s going to be slower than normal

Links

Documentation

Tabs management

TabHwnd

Get the handle for that tab (to be used in ConfigureTab).

SetTabsIcon(image)

Set a global icon for all the tabs.

  • image: path to a 16×16 image file

ConfigureTab(name, insertAfter)

Setup the tab name and position.

  • name: title of the tab
  • insertAfter: handle of the tab after which the configured tab should be inserted. Use 0 to insert after the last tab

SetTabActive()

Set the tab as active and show it in the tab list.

RemoveTab()

Remove the tab from the list.

Taskbar_OnCloseTab()

This function will be called when the user closes a tab in the list.

 

ThumbBar

SetupButton(id, image, tooltip, flags)

Setup a new tab button.

  • id: internal id (to be passed in the Taskbar_OnButtonClicked callback when the button is clicked)
  • image: path to a 16×16 image file
  • tooltip: the tooltip to shown on mouse-over
  • flags: a list of flags (see DXTaskbarDefines.vbs)

UpdateButton(id, image, tooltip, flags)

Update an existing tab button (only after buttons have been added).

  • id: internal id (to be passed in the Taskbar_OnButtonClicked callback when the button is clicked)
  • image: path to a 16×16 image file
  • tooltip: the tooltip to shown on mouse-over
  • flags: a list of flags (see DXTaskbarDefines.vbs)

AddButtons()

Add the list of buttons to the tab. 
A maximum of 7 buttons can be added at one time. After the buttons have been added, you cannot setup new ones. Use the UpdateButton function to modify existing buttons.

Taskbar_OnButtonClicked(id)

Called when the user clicks on a thumbbar button.

  • id: the button id used in SetupButton and UpdateButton

 

Overlay

SetOverlayIcon(image, description)

Applies an overlay to a taskbar button to indicate application status or a notification to the user.

  • image: path to a 16×16 image file
  • description: an alternative text version, for accessibility purposes

 

Progress

SetProgressState(flag)

Sets the type and state of the progress indicator displayed on a taskbar button.

  • flag: a progress flag (see DXTaskbarDefines.vbs)

SetProgressValue(completed, total)

Displays or updates a progress bar hosted in a taskbar button to show the specific percentage completed of the full operation.

  • completed: number of steps completed
  • total: total number of steps

 

Tasks and destinations

AddUserTask(name, path, arguments, icon, iconIndex, workingFolder)

Add a new user tasks (typically static links)

  • name: name of the task
  • path: path to the program to execute
  • arguments: arguments to the program
  • icon: path to .ico file to use as an icon
  • iconIndex: index of the icon to use in the .ico file (typically 0 if you only have 1 icon type)
  • workingFolder: working folder when executing the program

AddSeparator(category)

Add a separator

  • category: the category to add a separator to. To add a separator to the tasks, use “Tasks” as the category.

CommitList()

Declares that the Jump List is complete and ready for display

AbortList()

Discontinues a Jump List building session without committing any changes

 

Changelog

1.0 Build 231

  • Implemented Tasks

1.0 Build 205:

  • Added parameter checking in most functions
  • Fix for Vista and XP: all functions calls are ignored on those systems but are still available to scripts, so you should not get any script error

1.0 Build 198:

  • First test version

Download

You can download it on Wincustomize or from here.