Neue Antwort erstellen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

Neu erstellte Beiträge unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.

Die letzte Antwort auf dieses Thema liegt mehr als 365 Tage zurück. Das Thema ist womöglich bereits veraltet. Bitte erstellen Sie ggf. ein neues Thema.

Informationen
Frage Bitte beantworten Sie die untenstehende Frage bzw. lösen Sie die untenstehende Aufgabe.
Nachricht
Internet-Adressen werden automatisch erkannt und umgewandelt.
Smiley-Code wird in Ihrer Nachricht automatisch als Smiley-Grafik dargestellt.
Sie können BBCodes zur Formatierung Ihrer Nachricht nutzen.

Vorherige Beiträge 3

  • Ich habe den Quelltext mal angepasst. Deine Version gefällt mir wesentlich besser:

    Quellcode: EnvReader.prf

    1. '#####################################################################################
    2. '######### Code von AHT #########
    3. '######### Gepostet für http://www.paules-pc-forum.de #########
    4. '#####################################################################################
    5. $U ProcEnv.PCU = ProcEnv.
    6. Def GetModuleFileNameEx(4) !"Psapi", "GetModuleFileNameExA"
    7. Def CreateToolhelp32Snapshot(2) !"Kernel32", "CreateToolhelp32Snapshot"
    8. Def Process32First(2) !"Kernel32", "Process32First"
    9. Def Process32Next(2) !"Kernel32", "Process32Next"
    10. Def CloseHandle(1) !"Kernel32", "CloseHandle"
    11. Def GetCurrentProcessID(0) !"Kernel32", "GetCurrentProcessId"
    12. Def OpenProcess(3) !"Kernel32", "OpenProcess"
    13. DEF LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA"
    14. DEF AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges"
    15. DEF OpenProcessToken(3) !"advapi32","OpenProcessToken"
    16. DEF GetCurrentProcess(0) !"KERNEL32","GetCurrentProcess"
    17. DEF CopyMemory(3) !"kernel32","RtlMoveMemory"
    18. DEF GetModuleHandle(1) !"KERNEL32","GetModuleHandleA"
    19. DEF GetProcAddress(2) !"KERNEL32","GetProcAddress"
    20. Def QueryFullProcessImageName(4) !"Kernel32", "QueryFullProcessImageNameA"
    21. DEF CheckTokenMembership(3) !"advapi32","CheckTokenMembership"
    22. Def SetWindowPos(7) !"User32","SetWindowPos"
    23. DEF CreateStatus(4) !"comctl32","CreateStatusWindow"
    24. DEF GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
    25. DEF ButtonClicked(1) GetDlgCtrlID(&(1)) = -%MENUITEM
    26. DEF FormatMessage(7) !"KERNEL32","FormatMessageA"
    27. Declare Entry#, Filename#, Ergebnis$, AHGETERROR_Buffer#
    28. Declare TOKEN_PRIVILEGES#, LUID#, Fehler&, 64Bit&, MODULE$, Funktion$
    29. Declare Mhandle%, Size&, Member&, SID#, Statustext$, Statusbar%
    30. Declare ProcessesListview%, ReadProcesses%, EnvEdit%
    31. Declare Hauptfensterbreite&, Hauptfensterhöhe&, CurSel&, Prozess_ID&
    32. Clear 64Bit&
    33. MODULE$ = "Kernel32.DLL"
    34. Funktion$ = "IsWow64Process"
    35. Mhandle% = GetModuleHandle(ADDR(Module$))
    36. IF GetProcAddress(Mhandle%, ADDR(FUNKTION$)) <> 0
    37. External("Kernel32.dll", "IsWow64Process", GetCurrentProcess(), Addr(64Bit&))
    38. endif
    39. Struct PROCESSENTRY32=dwSize&, \
    40. cntUsage&, \
    41. th32ProcessID&, \
    42. th32DefaultHeapID&, \
    43. th32ModuleID&, \
    44. Threads&, \
    45. th32ParentProcessID&, \
    46. pcPriClassBase&, \
    47. dwFlags&, \
    48. szExeFile$(260)
    49. Dim Entry#,PROCESSENTRY32
    50. Entry#.dwSize& = SizeOf(Entry#)
    51. Windowstyle 31 + 512
    52. WindowTitle "Process Environment Reader"
    53. Window 0, 0 - 640, 440
    54. STATUSBAR% = CreateStatus($50000900 | $4000000, ADDR(Statustext$), %HWND, 2701)
    55. ProcessesListview% = Create("GridBox", %HWND, "PID;0;60;Prozessname;0;215", 0, 10, 50, 300, 340)
    56. EnvEdit% = Create("MultiEdit", %HWND, "", 320, 10, 290, 380)
    57. SendMessage(EnvEdit%, 207, 1, 0)
    58. ReadProcesses% = Create("Button", %HWND, "Prozesse neu auslesen", 10, 10, 300, 30)
    59. FillProcessList(ProcessesListview%)
    60. UserMessages $10
    61. While %UMESSAGE <> $10
    62. Sleep 10
    63. Positioner
    64. If ButtonClicked(ReadProcesses%)
    65. UseCursor 2
    66. sendmessage(ProcessesListview%, $1009, 0, 0)
    67. SetText EnvEdit%, ""
    68. FillProcessList(ProcessesListview%)
    69. SetMenuitem 0
    70. UseCursor 0
    71. Statustext$ = ""
    72. sendmessage(Statusbar%, $401, 0, addr(Statustext$))
    73. sendmessage(Statusbar%, $410, 0, addr(Statustext$))
    74. endif
    75. If GetCurSel(ProcessesListview%)<> -1
    76. If CurSel& <> GetCurSel(ProcessesListview%)
    77. UseCursor 2
    78. CurSel& = GetCurSel(ProcessesListview%)
    79. Prozess_ID& = Val(SubStr$(GetString$(ProcessesListview%, GetCurSel(ProcessesListview%)), 1, "|"))
    80. SetText EnvEdit%, ProcEnv.ReadProcessEnvironment(Prozess_ID&, "*")
    81. Statustext$ = Fehlercode_bestimmen(ProcEnv.LastError%)
    82. sendmessage(Statusbar%, $401, 0, addr(Statustext$))
    83. sendmessage(Statusbar%, $410, 0, addr(Statustext$))
    84. UseCursor 0
    85. endif
    86. endif
    87. EndWhile
    88. END
    89. Proc Set_Privilege_Status
    90. Parameters Privilege_name$, Aktive&
    91. Declare NewState&, AH_Token_handle%, Fehler&, Privret&
    92. DIM TOKEN_PRIVILEGES#,16
    93. DIM LUID#,8
    94. Clear LUID#
    95. External("advapi32.dll","LookupPrivilegeValueA",0,ADDR(Privilege_name$),LUID#)
    96. CLEAR AH_Token_handle%
    97. LET FEHLER&=External("advapi32.dll","OpenProcessToken",External("KERNEL32.dll","GetCurrentProcess"),$20,ADDR(AH_Token_handle%))
    98. LONG TOKEN_PRIVILEGES#,0=1
    99. NewState&=TOKEN_PRIVILEGES#
    100. External("KERNEL32.dll","RtlMoveMemory",NewState&+4,LUID#,8)
    101. LET NewState&=Aktive&
    102. Clear Aktive&
    103. IF NewState& | $2 = NewState&
    104. LET Aktive&=AKTIVE& | $2
    105. Endif
    106. IF NewState& | $80000000 = NewState&
    107. LET Aktive&= AKTIVE& | $80000000
    108. Endif
    109. LONG TOKEN_PRIVILEGES#,12=Aktive&
    110. Privret& = External("advapi32.dll","AdjustTokenPrivileges",AH_Token_handle%,0,TOKEN_PRIVILEGES#,0,0,0)
    111. If AH_TOKEN_handle%<>0
    112. External("KERNEL32.dll","CloseHandle",AH_Token_handle%)
    113. endif
    114. Dispose TOKEN_PRIVILEGES#
    115. Dispose LUID#
    116. Return Privret&
    117. endproc
    118. Proc FillProcessList
    119. Parameters GidHandle%
    120. Declare err%, handle%, cpid&, text$, text2$, Phandle%
    121. DIM Filename#, 514
    122. cpid& = GetCurrentProcessID()
    123. handle% = CreateToolhelp32Snapshot(2, 0)
    124. If handle%
    125. err% = Process32First(handle%, Entry#)
    126. If err%
    127. text$ = Str$(Entry#.th32ProcessID&)
    128. text2$ = Entry#.szExeFile$
    129. Clear Filename#, Phandle%
    130. IF Val($WINVER) < 6.0
    131. Phandle% = OpenProcess($400 | $10, 0, Entry#.th32ProcessID&)
    132. else
    133. Phandle% = OpenProcess($1000, 0, Entry#.th32ProcessID&)
    134. endif
    135. IF Phandle% > 0
    136. IF Val($WINVER) < 6.0
    137. GetModuleFilenameEx(Phandle%, 0, Filename#, 513)
    138. else
    139. Size&=580
    140. QueryFullProcessImageName(Phandle%, 0, Filename#, addr(Size&))
    141. endif
    142. Closehandle(Phandle%)
    143. endif
    144. If String$(Filename#,0) = ""
    145. ADDSTRING(GidHandle%, text$ + "|" + text2$)
    146. else
    147. ADDSTRING(GidHandle%, text$ + "|" + String$(Filename#,0))
    148. endif
    149. Repeat
    150. err% = Process32Next(handle%, Entry#)
    151. If err%
    152. text$ = Str$(Entry#.th32ProcessID&)
    153. text2$ = Entry#.szExeFile$
    154. Clear Filename#, Phandle%
    155. IF Val($WINVER) < 6.0
    156. Phandle% = OpenProcess($400 | $10, 0, Entry#.th32ProcessID&)
    157. else
    158. Phandle% = OpenProcess($1000, 0, Entry#.th32ProcessID&)
    159. endif
    160. IF Phandle% > 0
    161. IF Val($WINVER) < 6.0
    162. GetModuleFilenameEx(Phandle%, 0, Filename#, 513)
    163. else
    164. Size&=580
    165. QueryFullProcessImageName(Phandle%, 0, Filename#, addr(Size&))
    166. endif
    167. Closehandle(Phandle%)
    168. endif
    169. If String$(Filename#,0) = ""
    170. ADDSTRING(GidHandle%, text$ + "|" + text2$)
    171. else
    172. ADDSTRING(GidHandle%, text$ + "|" + String$(Filename#,0))
    173. endif
    174. EndIf
    175. Until err% = 0
    176. CloseHandle(handle%)
    177. EndIf
    178. EndIf
    179. Dispose Filename#
    180. EndProc
    181. Proc Positioner
    182. IF (Hauptfensterbreite& <> WIDTH(%HWND)) or (Hauptfensterhöhe& <> HEIGHT(%HWND))
    183. SetWindowPos STATUSBAR% = 0, 0 - 0, 0; 0
    184. Hauptfensterbreite& = WIDTH(%HWND)
    185. Hauptfensterhöhe& = HEIGHT(%HWND)
    186. SetWindowPos(ReadProcesses%, 0, 10, 10, ABS( WIDTH(%HWND)/2 - 10), 30, $4)
    187. SetWindowPos(ProcessesListview%,0, 10, 50, ABS( WIDTH(%HWND) /2 - 10), ABS(HEIGHT(%HWND) - 80), $4)
    188. SetWindowPos(EnvEdit%,0, ABS( WIDTH(%HWND) /2 + 10), 10, ABS( WIDTH(%HWND) /2 - 20), ABS(HEIGHT(%HWND) - 40), $4)
    189. Sendmessage(ProcessesListview%, $101E ,1, WIDTH(ProcessesListview%) - (65))
    190. endif
    191. endproc
    192. Proc Fehlercode_bestimmen
    193. Parameters Error%
    194. Declare AHGETERROR_Buffer$
    195. DIM AHGETERROR_Buffer#, 32000
    196. FormatMessage($1000, 0, Error%, 0, AHGETERROR_Buffer#, 32000, 0)
    197. AHGETERROR_Buffer$ = trim$(STRING$(AHGETERROR_Buffer#, 0))
    198. Dispose AHGETERROR_Buffer#
    199. Return AHGETERROR_Buffer$
    200. Endproc
    Alles anzeigen
    Besonders lehrreich wird das Ding, wenn man es auf 32Bit Systemen zum Beispiel mit Tasks and Token im lokalen Systemaccount startet, um auf Systemprozesse Zugriff zu haben:
    [Blockierte Grafik: http://abload.de/img/env1nkn3.gif]
  • WOW, was für ein tolles Ding! Remark: Für Profan11.2a in Zeile 206 das IF OR( ... , ...) auf IF ( ) OR ( ) geändert, dann lief dieses GENIALE Teil auch bei mir tadellos. Alternativ könnte man natürlich die Kompatibiliäts-Include einbinden...
  • Programm mit PCU zum Auslesen von Umgebungsvariablen in fremden 32Bit Prozessen

    AHT

    Das Proggie liest die Umgebungsvariablen fremder 32Bit Prozesse.
    Quellcode und PCU sind im Download enthalten.
    [Blockierte Grafik: http://abload.de/img/testrnki1.jpg]

    Quellcode: EnvReader.prf

    1. '#####################################################################################
    2. '######### Code von AHT #########
    3. '######### Gepostet für http://www.paules-pc-forum.de #########
    4. '#####################################################################################
    5. $U ProcEnv.PCU = ProcEnv.
    6. Def GetModuleFileNameEx(4) !"Psapi", "GetModuleFileNameExA"
    7. Def CreateToolhelp32Snapshot(2) !"Kernel32", "CreateToolhelp32Snapshot"
    8. Def Process32First(2) !"Kernel32", "Process32First"
    9. Def Process32Next(2) !"Kernel32", "Process32Next"
    10. Def CloseHandle(1) !"Kernel32", "CloseHandle"
    11. Def GetCurrentProcessID(0) !"Kernel32", "GetCurrentProcessId"
    12. Def OpenProcess(3) !"Kernel32", "OpenProcess"
    13. DEF LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA"
    14. DEF AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges"
    15. DEF OpenProcessToken(3) !"advapi32","OpenProcessToken"
    16. DEF GetCurrentProcess(0) !"KERNEL32","GetCurrentProcess"
    17. DEF CopyMemory(3) !"kernel32","RtlMoveMemory"
    18. DEF GetModuleHandle(1) !"KERNEL32","GetModuleHandleA"
    19. DEF GetProcAddress(2) !"KERNEL32","GetProcAddress"
    20. Def QueryFullProcessImageName(4) !"Kernel32", "QueryFullProcessImageNameA"
    21. DEF CheckTokenMembership(3) !"advapi32","CheckTokenMembership"
    22. Def SetWindowPos(7) !"User32","SetWindowPos"
    23. DEF CreateStatus(4) !"comctl32","CreateStatusWindow"
    24. DEF GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
    25. DEF ButtonClicked(1) GetDlgCtrlID(&(1)) = -%MENUITEM
    26. DEF FormatMessage(7) !"KERNEL32","FormatMessageA"
    27. Declare Entry#, Filename#, Ergebnis$, AHGETERROR_Buffer#
    28. Declare TOKEN_PRIVILEGES#, LUID#, Fehler&, 64Bit&, MODULE$, Funktion$
    29. Declare Mhandle%, Size&, Member&, SID#, Statustext$, Statusbar%
    30. Declare ProcessesListview%, ReadProcesses%, EnvEdit%
    31. Declare Hauptfensterbreite&, Hauptfensterhöhe&, CurSel&, Prozess_ID&
    32. Clear 64Bit&
    33. MODULE$ = "Kernel32.DLL"
    34. Funktion$ = "IsWow64Process"
    35. Mhandle% = GetModuleHandle(ADDR(Module$))
    36. IF GetProcAddress(Mhandle%, ADDR(FUNKTION$)) <> 0
    37. External("Kernel32.dll", "IsWow64Process", GetCurrentProcess(), Addr(64Bit&))
    38. endif
    39. Struct PROCESSENTRY32=dwSize&, \
    40. cntUsage&, \
    41. th32ProcessID&, \
    42. th32DefaultHeapID&, \
    43. th32ModuleID&, \
    44. Threads&, \
    45. th32ParentProcessID&, \
    46. pcPriClassBase&, \
    47. dwFlags&, \
    48. szExeFile$(260)
    49. Dim Entry#,PROCESSENTRY32
    50. Entry#.dwSize& = SizeOf(Entry#)
    51. Windowstyle 31 + 512
    52. WindowTitle "Process Environment Reader"
    53. Window 0, 0 - 640, 440
    54. STATUSBAR% = CreateStatus($50000900 | $4000000, ADDR(Statustext$), %HWND, 2701)
    55. ProcessesListview% = Create("GridBox", %HWND, "PID;0;60;Prozessname;0;215", 0, 10, 50, 300, 340)
    56. EnvEdit% = Create("MultiEdit", %HWND, "", 320, 10, 290, 380)
    57. SendMessage(EnvEdit%, 207, 1, 0)
    58. ReadProcesses% = Create("Button", %HWND, "Prozesse neu auslesen", 10, 10, 300, 30)
    59. FillProcessList(ProcessesListview%)
    60. UserMessages $10
    61. While %UMESSAGE <> $10
    62. Sleep 10
    63. Positioner
    64. If ButtonClicked(ReadProcesses%)
    65. UseCursor 2
    66. sendmessage(ProcessesListview%, $1009, 0, 0)
    67. SetText EnvEdit%, ""
    68. FillProcessList(ProcessesListview%)
    69. SetMenuitem 0
    70. UseCursor 0
    71. Statustext$ = ""
    72. sendmessage(Statusbar%, $401, 0, addr(Statustext$))
    73. sendmessage(Statusbar%, $410, 0, addr(Statustext$))
    74. endif
    75. If GetCurSel(ProcessesListview%)<> -1
    76. If CurSel& <> GetCurSel(ProcessesListview%)
    77. UseCursor 2
    78. CurSel& = GetCurSel(ProcessesListview%)
    79. Prozess_ID& = Val(SubStr$(GetString$(ProcessesListview%, GetCurSel(ProcessesListview%)), 1, "|"))
    80. SetText EnvEdit%, ProcEnv.ReadProcessEnvironment(Prozess_ID&, "*")
    81. Statustext$ = Fehlercode_bestimmen(ProcEnv.LastError%)
    82. sendmessage(Statusbar%, $401, 0, addr(Statustext$))
    83. sendmessage(Statusbar%, $410, 0, addr(Statustext$))
    84. UseCursor 0
    85. endif
    86. endif
    87. EndWhile
    88. END
    89. Proc Set_Privilege_Status
    90. Parameters Privilege_name$, Aktive&
    91. Declare NewState&, AH_Token_handle%, Fehler&, Privret&
    92. DIM TOKEN_PRIVILEGES#,16
    93. DIM LUID#,8
    94. Clear LUID#
    95. External("advapi32.dll","LookupPrivilegeValueA",0,ADDR(Privilege_name$),LUID#)
    96. CLEAR AH_Token_handle%
    97. LET FEHLER&=External("advapi32.dll","OpenProcessToken",External("KERNEL32.dll","GetCurrentProcess"),$20,ADDR(AH_Token_handle%))
    98. LONG TOKEN_PRIVILEGES#,0=1
    99. NewState&=TOKEN_PRIVILEGES#
    100. External("KERNEL32.dll","RtlMoveMemory",NewState&+4,LUID#,8)
    101. LET NewState&=Aktive&
    102. Clear Aktive&
    103. IF NewState& | $2 = NewState&
    104. LET Aktive&=AKTIVE& | $2
    105. Endif
    106. IF NewState& | $80000000 = NewState&
    107. LET Aktive&= AKTIVE& | $80000000
    108. Endif
    109. LONG TOKEN_PRIVILEGES#,12=Aktive&
    110. Privret& = External("advapi32.dll","AdjustTokenPrivileges",AH_Token_handle%,0,TOKEN_PRIVILEGES#,0,0,0)
    111. If AH_TOKEN_handle%<>0
    112. External("KERNEL32.dll","CloseHandle",AH_Token_handle%)
    113. endif
    114. Dispose TOKEN_PRIVILEGES#
    115. Dispose LUID#
    116. Return Privret&
    117. endproc
    118. Proc FillProcessList
    119. Parameters GidHandle%
    120. Declare err%, handle%, cpid&, text$, text2$, Phandle%
    121. DIM Filename#, 514
    122. cpid& = GetCurrentProcessID()
    123. handle% = CreateToolhelp32Snapshot(2, 0)
    124. If handle%
    125. err% = Process32First(handle%, Entry#)
    126. If err%
    127. text$ = Str$(Entry#.th32ProcessID&)
    128. text2$ = Entry#.szExeFile$
    129. Clear Filename#, Phandle%
    130. IF Val($WINVER) < 6.0
    131. Phandle% = OpenProcess($400 | $10, 0, Entry#.th32ProcessID&)
    132. else
    133. Phandle% = OpenProcess($1000, 0, Entry#.th32ProcessID&)
    134. endif
    135. IF Phandle% > 0
    136. IF Val($WINVER) < 6.0
    137. GetModuleFilenameEx(Phandle%, 0, Filename#, 513)
    138. else
    139. Size&=580
    140. QueryFullProcessImageName(Phandle%, 0, Filename#, addr(Size&))
    141. endif
    142. Closehandle(Phandle%)
    143. endif
    144. If String$(Filename#,0) = ""
    145. ADDSTRING(GidHandle%, text$ + "|" + text2$)
    146. else
    147. ADDSTRING(GidHandle%, text$ + "|" + String$(Filename#,0))
    148. endif
    149. Repeat
    150. err% = Process32Next(handle%, Entry#)
    151. If err%
    152. text$ = Str$(Entry#.th32ProcessID&)
    153. text2$ = Entry#.szExeFile$
    154. Clear Filename#, Phandle%
    155. IF Val($WINVER) < 6.0
    156. Phandle% = OpenProcess($400 | $10, 0, Entry#.th32ProcessID&)
    157. else
    158. Phandle% = OpenProcess($1000, 0, Entry#.th32ProcessID&)
    159. endif
    160. IF Phandle% > 0
    161. IF Val($WINVER) < 6.0
    162. GetModuleFilenameEx(Phandle%, 0, Filename#, 513)
    163. else
    164. Size&=580
    165. QueryFullProcessImageName(Phandle%, 0, Filename#, addr(Size&))
    166. endif
    167. Closehandle(Phandle%)
    168. endif
    169. If String$(Filename#,0) = ""
    170. ADDSTRING(GidHandle%, text$ + "|" + text2$)
    171. else
    172. ADDSTRING(GidHandle%, text$ + "|" + String$(Filename#,0))
    173. endif
    174. EndIf
    175. Until err% = 0
    176. CloseHandle(handle%)
    177. EndIf
    178. EndIf
    179. Dispose Filename#
    180. EndProc
    181. Proc Positioner
    182. IF or(Hauptfensterbreite& <> WIDTH(%HWND), Hauptfensterhöhe& <> HEIGHT(%HWND))
    183. SetWindowPos STATUSBAR% = 0, 0 - 0, 0; 0
    184. Hauptfensterbreite& = WIDTH(%HWND)
    185. Hauptfensterhöhe& = HEIGHT(%HWND)
    186. SetWindowPos(ReadProcesses%, 0, 10, 10, ABS( WIDTH(%HWND)/2 - 10), 30, $4)
    187. SetWindowPos(ProcessesListview%,0, 10, 50, ABS( WIDTH(%HWND) /2 - 10), ABS(HEIGHT(%HWND) - 80), $4)
    188. SetWindowPos(EnvEdit%,0, ABS( WIDTH(%HWND) /2 + 10), 10, ABS( WIDTH(%HWND) /2 - 20), ABS(HEIGHT(%HWND) - 40), $4)
    189. Sendmessage(ProcessesListview%, $101E ,1, WIDTH(ProcessesListview%) - (65))
    190. endif
    191. endproc
    192. Proc Fehlercode_bestimmen
    193. Parameters Error%
    194. Declare AHGETERROR_Buffer$
    195. DIM AHGETERROR_Buffer#, 32000
    196. FormatMessage($1000, 0, Error%, 0, AHGETERROR_Buffer#, 32000, 0)
    197. AHGETERROR_Buffer$ = trim$(STRING$(AHGETERROR_Buffer#, 0))
    198. Dispose AHGETERROR_Buffer#
    199. Return AHGETERROR_Buffer$
    200. Endproc
    Alles anzeigen
    Download: Environment.zip

    Anwendung der PCU:

    ProcEnv.ReadProcessEnvironment(N, S)
    • N = Prozess ID eines laufenden Prozesses
    • S = Name einer Umgebungsvariablen ohne umschließende % Zeichen und * Zeichen, um den ganzen Block zu lesen.
    Hinweis: Mit 64Bit Prozessen funktioniert die Sache natürlich nicht, da die PCU 32Bit ist. Das ganze ist also eher eine kleine Spielerei, um mal Sachen zu testen.

    Gebrauchen könnte man das zum Beispiel um spezielle Informationen mit einer Batch oder einem Powershell Script auszutauschen.

    In der Variablen ProcEnv.LastError% wird der zuletzt in der PCU aufgetretene Fehler gespeichert.