defaultprinter.p 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /*
  2. def var xx as char.
  3. load 'Test' base ''HKEY_CURRENT_USER' dir '
  4. GET-KEY-VALUE
  5. SECTION 'Software\Microsoft\Windows NT\CurrentVersion\Windows"'
  6. KEY 'Device'
  7. VALUE xx.
  8. message xx view-as alert-box.
  9. */
  10. {windows.i}
  11. DEFINE VARIABLE list-of-printers AS CHARACTER.
  12. DEFINE VARIABLE newdefault AS CHARACTER.
  13. DEFINE VARIABLE driver-and-port AS CHARACTER.
  14. RUN getkey
  15. (INPUT "devices", /* The section name */
  16. INPUT "", /* The key name */
  17. INPUT "win.ini", /* Name of ini file */
  18. OUTPUT list-of-printers). /* Returned stuff */
  19. message list-of-printers view-as alert-box.
  20. /* you now have a comma separated list of printer names. Check it: */
  21. /* message list-of-printers view-as alert-box. */
  22. /* allow the user to pick one, suppose he picks the third entry: */
  23. newdefault = ENTRY(2, list-of-printers).
  24. /* read driver and port for the new default printer */
  25. RUN getkey
  26. (INPUT "devices", /* The section name */
  27. INPUT newdefault, /* The key name */
  28. INPUT "win.ini", /* Name of ini file */
  29. OUTPUT driver-and-port). /* Returned stuff */
  30. /* and write it back */
  31. RUN putkey
  32. (INPUT "windows",
  33. INPUT "device",
  34. INPUT "win.ini",
  35. INPUT newdefault + "," + driver-and-port).
  36. /* check it:
  37. message session:printer-name view-as alert-box.
  38. */
  39. RETURN.
  40. /* ------------- internal procedures ------------ */
  41. PROCEDURE getkey :
  42. DEFINE INPUT PARAMETER i-section AS CHARACTER.
  43. DEFINE INPUT PARAMETER i-key AS CHARACTER.
  44. DEFINE INPUT PARAMETER i-filename AS CHARACTER.
  45. DEFINE OUTPUT PARAMETER o-value AS CHARACTER.
  46. DEFINE VARIABLE EntryPointer AS INTEGER NO-UNDO.
  47. DEFINE VARIABLE mem1 AS MEMPTR NO-UNDO.
  48. DEFINE VARIABLE mem2 AS MEMPTR NO-UNDO.
  49. DEFINE VARIABLE mem1size AS INTEGER NO-UNDO.
  50. DEFINE VARIABLE mem2size AS INTEGER NO-UNDO.
  51. DEFINE VARIABLE i AS INTEGER NO-UNDO.
  52. DEFINE VARIABLE cbReturnSize AS INTEGER NO-UNDO.
  53. ASSIGN
  54. SET-SIZE(mem1) = 4000
  55. mem1size = 4000.
  56. IF i-key = "" THEN EntryPointer = 0.
  57. ELSE DO:
  58. /* Must fill memory with desired key name and EntryPointer must point to it */
  59. ASSIGN
  60. SET-SIZE(mem2) = 128
  61. mem2size = 128
  62. EntryPointer = GET-POINTER-VALUE(mem2)
  63. PUT-STRING(mem2,1) = i-key.
  64. END.
  65. RUN getprivateprofilestring{&A} IN hpApi
  66. (i-section,
  67. EntryPointer,
  68. "",
  69. GET-POINTER-VALUE(mem1),
  70. INPUT mem1size,
  71. i-filename,
  72. OUTPUT cbReturnSize).
  73. /* if i-key was "", Windows will return a list of all keys in i-section.
  74. This list is not comma-separated but separated by CHR(0). Progress
  75. can not handle that easily so we'll now replace every 0 by a comma: */
  76. DO i = 1 TO cbReturnSize:
  77. /* If this is a list convert null character into a comma to generate a csv
  78. type variable */
  79. o-value = IF (GET-BYTE(mem1, i) = 0 AND i NE cbReturnSize)
  80. THEN o-value + ","
  81. ELSE o-value + CHR(GET-BYTE(mem1, i)).
  82. END.
  83. SET-SIZE(mem1) = 0.
  84. SET-SIZE(mem2) = 0.
  85. END PROCEDURE.
  86. PROCEDURE putkey :
  87. DEFINE INPUT PARAMETER i-section AS CHARACTER.
  88. DEFINE INPUT PARAMETER i-key AS CHARACTER.
  89. DEFINE INPUT PARAMETER i-filename AS CHARACTER.
  90. DEFINE INPUT PARAMETER i-value AS CHARACTER.
  91. DEFINE VARIABLE cbReturnSize AS INTEGER.
  92. RUN writeprivateprofilestring{&A} IN hpApi
  93. (i-section,
  94. i-key,
  95. i-value,
  96. i-filename,
  97. OUTPUT cbReturnSize ).
  98. END PROCEDURE.