9
votes

Obtenir le processus d'exécution de la poignée de processus

Quelqu'un peut-il me dire comment je peux capturer un processus de course en C # en utilisant la classe de processus si je connais déjà la poignée?

ID ne dispose pas d'énumérer la méthode des processus de getRunning non plus. Pinvoke est correct si possible.


0 commentaires

4 Réponses :


10
votes

Dans la plaine C #, on dirait que vous devez la boucler tous:

[DllImport("kernel32.dll")]
static extern int GetProcessId(IntPtr handle);


4 commentaires

J'ai accès à un message refusé (Exception Win32)?


Correction, mais vous devriez peut-être utiliser le Winapi à la place. C'est ce que vous avez préféré en premier lieu :)


processus.Handle donne accès refusé mais. processus.MainWindowhandle fonctionne sans erreur


Bad -1 ... Mainwindowhandle est pour quelque chose de complètement différent.



3
votes
using System.Diagnostics;

class ProcessHandler {
    public static Process FindProcess( IntPtr yourHandle ) {
        foreach (Process p in Process.GetProcesses()) {
            if (p.Handle == yourHandle) {
                return p;
            }
        }

        return null;
    }
}

0 commentaires

1
votes

Il semble y avoir un moyen simple de le faire par l'API .NET. La question est de savoir où vous avez eu cette poignée? Si de la même manière, vous pouvez avoir accès à l'ID de processus, vous pouvez utiliser:

processus.getProcessByID (int ID)


4 commentaires

L'obtenir par ID serait certainement meilleur / plus facile, mais il est possible par la poignée. Voir les autres réponses.


une API expose le HWND mais pas l'ID


La question demeure, où vient le manche. Si une API Win32 est utilisée, un autre appel d'API doit peut-être être émis pour obtenir l'ID de processus de la poignée. Un autre problème est que les poignées ne sont valables que dans le même processus, IDS sont larges du système


Ouais, je suis d'accord que d'avoir une poignée, mais pas une pièce d'identité n'est très étrange.



0
votes

Vous pouvez utiliser l'appel Winapi GetWindowThreadProcessID Winapi

http://www.pinvoke.net/default.aspx/user32 /KetwindowthreadProcessid.html

Pour obtenir l'ID de processus - puis obtenir un objet de processus en utilisant celui-ci .....

Mais pourquoi ne voulez-vous pas énumérer les ID des processus de course?


1 commentaires

Celui-ci prend une poignée de fenêtre. Il a un processus de processus. Le Winapi getProcessid est ce dont il a besoin.