Автор: Richard K. Goran
Дата: June, 1996
When I began to plan this column, I thought it would be one of the easiest that I have done for OS/2 Magazine since I had covered the subject of creating your own LaunchPad exactly 12 issues ago ([9506.htm OS/2 Magazine, June 1995]). My reason for devoting another column to LaunchPad creation and manipulation is quite simple, I still receive E-mail asking questions based on that original column. Also, more has become known about the WPLaunchPad object and I wanted to include this new information along with a technique to eliminate the old LaunchPad objects which accumulate in your system every time you create a new LaunchPad, either via REXX or drag and drop. In actuality, I spent more time than anticipated in preparing the material for the column because I bumped into some Workplace Shell bugs. It turns out that these have been reported in APARS( IBM-speak for authorized program analysis report) but I didn't know this when I started. These APARS (PJ16250, PJ17466, PJ17788, PJ18286, PJ19937) all deal with Workplace Shell hangs when manipulating objects that contain the NOTVISIBLE=YES property.
To read a full explanation of the characteristics of the LaunchPad, simply RMB (right mouse button click) on the border of your LaunchPad which surrounds the faceplate objects or the drawer buttons and select Help. The faceplate objects are the pushbuttons you see covering the LaunchPad and the drawers are the pushbuttons you see when you open the faceplate subordinate objects by clicking on the button containing an arrow which is adjacent to each faceplate object. There will not be any arrow associated with a faceplate object if there are no drawer objects associated with the faceplate.
It is important to note that each object in the LaunchPad is a shadow of some other object. To add an object to the LaunchPad, simply RMB drag any object and drop it on either the LaunchPad itself or on one of its drawers. When you want to drop an object between two other objects on the LaunchPad face plate (the LaunchPad icons that are not in the drawers), a black bar will appear between the two positions when it is alright to release the RMB. Similarly, adding an object to a drawer is accomplished by dragging an object to the position on the drawer where you want the new object to appear and dropping it when the black bar is in the proper position. Since LaunchPad objects are, by definition, shadows its is unnecessary to hold
You can create any number of LaunchPads via REXX using setup strings to define each LaunchPad's characteristics, faceplate objects, and any drawers attached to each faceplate object. LaunchPad objects belong to the WPLaunchPad class. The default LaunchPad object has an object ID of
say SysOpenObject( '?:\Nowhere1', 1, 1 )
(where ? represents your boot drive). The SysOpenObject() function was introduced with OS/2 Warp. If you are running a prior version of OS/2, you can use the SysSetObjectData() function to open the directory. For example:
say SysSetObjectData( '?:\Nowhere1', 'OPEN=DEFAULT;' )
will open the icon view of the directory.
If the default LaunchPad is deleted, either intentionally or accidentally, it can be recreated simply by double clicking anywhere on the Desktop. [#Figure 1 Figure 1] shows the layout of the default LaunchPad and [#Fragment 2 Fragment 2] shows the settings that are used to create this default LaunchPad. If you want to create more than one LaunchPad, each must have a unique object ID, one of which should be the default of
There are a few items that my previous LaunchPad column did not address that are significant. Also, I have created a new program which is available via anonymous FTP, 9606ls01.cmd, that addresses these issues. [#Figure 3 Figure 3] shows the LaunchPad that was created using 9606ls01.cmd on one of my systems. You can easily modify this program to contain your own faceplate and drawer objects to build a customized LaunchPad. Each faceplate and drawer group is defined so that only the object names (either object ID or full file system name) need be changed. [#Fragment 4 Fragment 4] shows the lines used to create a faceplate with an OS/2 windowed session and drawers containing an OS/2 full screen session, DOS windowed and full screen sessions, and WIN-OS2 windowed and full screen sessions.
"Garbage collection" is a concern when recreating any LaunchPad. When a new LaunchPad is created, all of the old shadows remain in the \Nowhere1' directory until they are explicitly deleted. If you have had occasion to recreate your LaunchPad, either the default configuration or a customized version, you have a lot of dead shadows in your \Nowhere1 directory. You can see these unused shadows by opening \Nowhere1 as I showed above. There is no way to determine which of these shadows are active and which can be removed. If you inadvertently delete an active shadow, the corresponding object will disappear from your LaunchPad. The [../pub/welcome.htm#wptool WPTools]' API provides the WPToolsFolderContent() function that will allow you to enumerate the contents of a folder object or directory. Each of these objects can be checked to see if it is a shadow and, if so, you can delete it. I am not aware of any other OS/2 application that creates shadows in this directory so no harm should come from deleting all of the shadows you find. If you find objects that are not shadows they should be left alone. One program that I know of that creates objects in \Nowhere1 is DeskMan/2 from Development Technologies.
You will also find numerous objects with a title of Find in the icon view of \Nowhere1. These are WPFilter objects created by the OS/2 Find facility. Unfortunately, WPTools does not include these in the list of objects it returns so these dead objects have to be manually dragged to your Shredder to eliminate them.
If the \Nowhere1 directory is deleted, you will lose your .inf file association to the view.exe program. This results from the loss of one of OS/2's mystery objects,
Another problem occurs when trying to add additional faceplate objects to an existing LaunchPad (PJ17466). If you want to add an additional faceplate with a REXX program, it is necessary to recreate the LaunchPad, creating the faceplates first and then adding the drawer objects.
[../pub/9606ls01.zip 9606ls01.zip] (free for download - includes WPTools DLL)
Figure 1 - Default LaunchPad
Fragment 2 - Default LaunchPad Properties
/* 9606FG02.TXT - Default LaunchPad properties */ class = "WPLaunchPad" title = "LaunchPad" location = "" setup =, "DRAWEROBJECTS=1,;" ||, "DRAWEROBJECTS=2,
;" ||, "FPOBJECTS=, , , ;" ||, "LPACTIONSTYLE=TEXT;" ||, "LPCLOSEDRAWER=NO;" ||, "LPDRAWERTEXT=NO;" ||, "LPFLOAT=NO;" ||, "LPHIDECTLS=YES;" ||, "LPSMALLICONS=NO;" ||, "LPTEXT=NO;" ||, "LPVERTICAL=NO;" ||, "TITLE=LaunchPad;" ||, "OBJECTID= ;" ||, "" call SysCreateObject class, title, location, setup, "R"
Figure 3 - LaunchPad built by 9606ls01.cmd
Fragment 4 - Faceplate / Drawer Group
f=f+1; faceplate.f = '
' d=0 d=d+1; drawer.f.d =' ' d=d+1; drawer.f.d =' ' d=d+1; drawer.f.d =' ' d=d+1; drawer.f.d =' ' d=d+1; drawer.f.d =' ' drawer.f.0 = d