| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- /*
- def var xx as char.
- load 'Test' base ''HKEY_CURRENT_USER' dir '
- GET-KEY-VALUE
- SECTION 'Software\Microsoft\Windows NT\CurrentVersion\Windows"'
- KEY 'Device'
- VALUE xx.
-
- message xx view-as alert-box.
- */
- {windows.i}
-
- DEFINE VARIABLE list-of-printers AS CHARACTER.
- DEFINE VARIABLE newdefault AS CHARACTER.
- DEFINE VARIABLE driver-and-port AS CHARACTER.
-
- RUN getkey
- (INPUT "devices", /* The section name */
- INPUT "", /* The key name */
- INPUT "win.ini", /* Name of ini file */
- OUTPUT list-of-printers). /* Returned stuff */
- message list-of-printers view-as alert-box.
- /* you now have a comma separated list of printer names. Check it: */
- /* message list-of-printers view-as alert-box. */
- /* allow the user to pick one, suppose he picks the third entry: */
-
- newdefault = ENTRY(2, list-of-printers).
-
- /* read driver and port for the new default printer */
- RUN getkey
- (INPUT "devices", /* The section name */
- INPUT newdefault, /* The key name */
- INPUT "win.ini", /* Name of ini file */
- OUTPUT driver-and-port). /* Returned stuff */
-
- /* and write it back */
- RUN putkey
- (INPUT "windows",
- INPUT "device",
- INPUT "win.ini",
- INPUT newdefault + "," + driver-and-port).
-
- /* check it:
- message session:printer-name view-as alert-box.
- */
-
- RETURN.
-
- /* ------------- internal procedures ------------ */
-
- PROCEDURE getkey :
-
- DEFINE INPUT PARAMETER i-section AS CHARACTER.
- DEFINE INPUT PARAMETER i-key AS CHARACTER.
- DEFINE INPUT PARAMETER i-filename AS CHARACTER.
- DEFINE OUTPUT PARAMETER o-value AS CHARACTER.
-
- DEFINE VARIABLE EntryPointer AS INTEGER NO-UNDO.
- DEFINE VARIABLE mem1 AS MEMPTR NO-UNDO.
- DEFINE VARIABLE mem2 AS MEMPTR NO-UNDO.
- DEFINE VARIABLE mem1size AS INTEGER NO-UNDO.
- DEFINE VARIABLE mem2size AS INTEGER NO-UNDO.
- DEFINE VARIABLE i AS INTEGER NO-UNDO.
- DEFINE VARIABLE cbReturnSize AS INTEGER NO-UNDO.
-
- ASSIGN
- SET-SIZE(mem1) = 4000
- mem1size = 4000.
-
- IF i-key = "" THEN EntryPointer = 0.
-
- ELSE DO:
- /* Must fill memory with desired key name and EntryPointer must point to it */
-
- ASSIGN
- SET-SIZE(mem2) = 128
- mem2size = 128
- EntryPointer = GET-POINTER-VALUE(mem2)
- PUT-STRING(mem2,1) = i-key.
- END.
-
- RUN getprivateprofilestring{&A} IN hpApi
- (i-section,
- EntryPointer,
- "",
- GET-POINTER-VALUE(mem1),
- INPUT mem1size,
- i-filename,
- OUTPUT cbReturnSize).
-
- /* if i-key was "", Windows will return a list of all keys in i-section.
- This list is not comma-separated but separated by CHR(0). Progress
- can not handle that easily so we'll now replace every 0 by a comma: */
-
- DO i = 1 TO cbReturnSize:
- /* If this is a list convert null character into a comma to generate a csv
- type variable */
- o-value = IF (GET-BYTE(mem1, i) = 0 AND i NE cbReturnSize)
- THEN o-value + ","
- ELSE o-value + CHR(GET-BYTE(mem1, i)).
- END.
-
- SET-SIZE(mem1) = 0.
- SET-SIZE(mem2) = 0.
-
- END PROCEDURE.
-
-
- PROCEDURE putkey :
- DEFINE INPUT PARAMETER i-section AS CHARACTER.
- DEFINE INPUT PARAMETER i-key AS CHARACTER.
- DEFINE INPUT PARAMETER i-filename AS CHARACTER.
- DEFINE INPUT PARAMETER i-value AS CHARACTER.
-
- DEFINE VARIABLE cbReturnSize AS INTEGER.
-
- RUN writeprivateprofilestring{&A} IN hpApi
- (i-section,
- i-key,
- i-value,
- i-filename,
- OUTPUT cbReturnSize ).
-
- END PROCEDURE.
-
|