سؤال

أنا باستخدام الطريقة التالية

    [DllImport("kernel32.dll", SetLastError=true)]
    static extern int GetProcessId(IntPtr hWnd);

لمحاولة الحصول على المعالج لعملية قيد التشغيل والمعلومات الوحيدة التي لديها هي HWND. مشكلتي هي أنه دائما إرجاع رمز الخطأ 6 وهو error_invalid_handle. اعتقدت أنني قد أغير المعلمة لتكون من النوع الدولي ولكن هذا أيضا لم يعمل. أنا غير قادر على تعداد العمليات الجارية لأنه قد يكون هناك أكثر من مثيل واحد يعمل في أي وقت واحد.

هل يمكن لأي شخص أن يرى ما إذا كنت أفعل أي شيء خاطئ؟

ملاحظة: يتم وضع العملية من كائن الأتمتة المعرض للإطار ويوفر فقط خاصية HWND. ربما هناك طريقة أخرى للحصول على رؤية المعالج كما كتب الرمز الذي كتبته هو المسؤول عن تشغيله في المقام الأول؟

الرمز الخاص بي يبدو مشابها لهذا ...

AutomationApplication.Application extapp = automationpplication جديد.Application ()؛ extapp.run ()؛ ...

هل كانت مفيدة؟

المحلول

ما هو فئة "الأتمتة". هل كتبت ذلك؟ هل .run () إرجاع PID؟

نصائح أخرى

getprocessid. الحصول على معرف العملية عند إعطاء مقبض العملية، وليس مقبض النافذة. انها في الواقع:

[DllImport("kernel32", SetLastError = true)]
static extern int GetProcessId(IntPtr hProcess);

إذا كنت قد حصلت على مقبض نافذة، فأنت تريد getwindowthreadprocessid. وظيفة:

[DllImport("user32")]
static extern int GetWindowThreadProcessId(IntPtr hWnd, out int processId);

يؤدي هذا معرف الصفحات، ويضع معرف العملية في المخمل الخارجي.

انظر مثال على Pinvoke., ، لا حاجة ل WIN32 اتصل، كما يمكنك استخدام API المدار:

بديل يدير API: System.Diagnostics.Process يحتوي الفصل على العديد من الوحدات النمطية والمعالجة وأساليب الخيط.

علي سبيل المثال:

using System.Diagnostics;
...
private void DumpModuleInfo(IntPtr hProcess)
{
    uint pid = GetProcessId(hProcess);
    foreach (Process proc in Process.GetProcesses())
    {
        if (proc.Id == pid)
        {
            foreach (ProcessModule pm in proc.Modules)
            {
                Console.WriteLine("{0:X8} {1:X8} {2:X8} {3}", (int)pm.BaseAddress,
                (int)pm.EntryPointAddress, (int)pm.BaseAddress + pm.ModuleMemorySize, pm.ModuleName);
            }
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top