קבלת ProcessId של office interop שנוצר בקוד שלנו

12 בפברואר 2014

תגיות: , ,
אין תגובות

התבקשתי למצוא את ה – ProcessId של אקסל שנוצר מקוד בעזרת Interop, כמובן שזה לא משנה אקסל, וורד וכד’.

הפיתרון הגיע מכאן

הקוד יהיה פשוט, לאובייקטים של ה – Interope יש מאפיין Hwnd (יושב תחת Application), דרכו ניתן לקבל את ה – ProcessId, אבל לא בצורה ישירה, נצטרך לשלוח את הפרמטר לפונקציית GetWindowThreadProcessId של מערכת ההפעלה, ממנו נקבל את ה – ProcessId דרכו נוכל לפנות ל – Process.GetProcessById, הקוד המלא יראה כך:

Code Snippet
class Program
{
    static void Main(string[] args)
    {
        Application app = new Application();
        app.Visible = true;

        int excelProcessId = 0;
        GetWindowThreadProcessId(new IntPtr(app.Hwnd), out excelProcessId);

        Process p = Process.GetProcessById(excelProcessId);

        Console.ReadLine();

    }

    [DllImport("user32.dll")]
    static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
}

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *