In 16-bit windows you can find the printer name in WIN.INI, section "windows" key "device".
For example:
[windows] device=HP LaserJet 4L,HPPCL5MS,LPT1:
To read 'WIN.INI' you use the procedure GetProfileString.
To read any other ini-file you use the procedure GetPrivateProfileString.
Example:
{windows.i} DEFINE VARIABLE printername AS CHARACTER NO-UNDO. DEFINE VARIABLE cchRet AS INTEGER NO-UNDO. printername = FILL(" ",100). /* = allocate memory, don't forget! */ RUN GetProfileString{&A} IN hpApi ("windows", "device", "-unknown-,", OUTPUT printername, LENGTH(printername), OUTPUT cchRet). /* split name from driver and port. Note that the default "-unknown-," must have at leat one comma or the ENTRY function may raise an error */ printername = ENTRY(1,printername). /* use the result */ IF printername="-unknown-" THEN MESSAGE "something is wrong with your WIN.INI" VIEW-AS ALERT-BOX. ELSE MESSAGE "your default printer is: " printername VIEW-AS ALERT-BOX.
The above example was used for an in-depth explanation of parameter types on page using a MEMPTR parameter for a CHAR. It also explains why the FILL statement is important.
Of course you can also use the 4GL procedure GET-KEY-VALUE to read this information, as shown in topic "printing: using StartDoc"
Here is the easiest way:
Printername = SESSION:PRINTER-NAME.
Although INI files are obsolete in 32-bits Windows versions, you should still use GetProfileString to find the default printer. The function will not actually read the INI file but will read from Registry.
If you know the key where the printer name is stored in Registry, you could use the following code example but you should not do that. It is always a bad idea to use hardcoded paths because Microsoft does not commit to support those paths forever. For example: Windows 95 and NT 4.0 don't use the same key. Function GetProfileString however is guaranteed to return the right information on all 32-bit Windows versions.
but it's still interesting to have a registry example, so here it goes:
DEFINE VARIABLE Printername AS CHARACTER. LOAD "System" BASE-KEY "HKEY_CURRENT_CONFIG". USE "System". GET-KEY-VALUE SECTION "CurrentControlSet\Control\Print\Printers" KEY "default" VALUE Printername. UNLOAD "System". /* code example by Joseph Richardson */