logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Delphi] Jak wyświetlić pełną listę procesów w Windows 7?

redie 13 Cze 2011 14:57 1553 5
REKLAMA
  • #1 9606584
    redie
    Poziom 16  
    Posty: 169
    Pomógł: 25
    Ocena: 1
    Witam,
    wyświetlam sobie listę procesów uruchomionych w systemie Windows 7. Gdy uruchamiam programik spod kompilatora to widzę dokładnie taką samą listę co w "Menadżerze zadań Windows", natomiast jak uruchamiam ten skompilowany program ręcznie to widzę jedynie niewielką część procesów - która jest odpowiednikiem listy w sytuacji gdy w menadżerze odznaczę opcję "Pokaż procesy wszystkich użytkowników".

    Pytanie brzmi: jak zrobić aby zawsze widzieć całą listę?

    Aby uprzedzić pytania:
    - Mam obniżoną kontrolę konta użytkownika na sam dół więc okienka typu "czy na pewno chcesz to uruchomić?" mi się nie pokazują.
    - Zaznaczyłem aby ten program był uruchamiany "jako administrator".
    - Windows 7 32 bit
    - listę procesów pobieram funkcją EnumProcesses
  • REKLAMA
  • REKLAMA
  • #3 9608059
    redie
    Poziom 16  
    Posty: 169
    Pomógł: 25
    Ocena: 1
    Jutro rano sprawdzę czy zgodność z którąś z innych wersji coś zmieni.
    Czy sugerujesz że środowisko Delphi 7 uruchamia aplikacje w trybie zgodności innym niż samo jest uruchomione?
  • REKLAMA
  • #4 9608069
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 224
    Delphi jest uruchamiane w dość pokrętnym trybie, który coś ma wspólnego z trybem zgodności. No i tryb przejmują procesy potomne. Myślę, że można to sprawdzić, choć wiem, że to nie rozwiązuje problemu. Ale zawsze na coś ukierunkuje.
  • REKLAMA
  • #5 9609738
    redie
    Poziom 16  
    Posty: 169
    Pomógł: 25
    Ocena: 1
    Tryb zgodności nic nie zmienia. Ale doszedłem do tego że funkcja EnumProcesses zwraca zawsze wszystkie procesy.
    Natomiast później wyświetlałem je w TListBox korzystając z OpenProcess gdzie pierwszy argument to flaga dostępu od której zależy które procesy mogą być otworzone.
    Sprawdziłem wszystkie i dla flagi o wartości $1000 dostaję uchwyt do 53 spośród 59 procesów (czyli dobrze).
  • #6 9611733
    Dżyszla
    Poziom 42  
    Posty: 7075
    Pomógł: 1095
    Ocena: 224
    Czyli problemu nie ma? Funkcja OpenProcess zwraca uchwyt, ale w przypadku, gdy zwróci 0 możesz zawsze wywołać GetLastError by sprawdzić, dlaczego się nie udało.

    Ważna uwaga z pomocy WinAPI:
    Cytat:
    To open a handle to another local process and obtain full access rights, you must enable the SeDebugPrivilege privilege. For more information, see Changing Privileges in a Token.
REKLAMA