1
我想寫一個函數,它遍歷頂級窗口,並將它們放入列表中,如果他們滿足一組條件。目前我可以通過將窗口添加到靜態List<IntPtr> instances
變量中來實現此目的,但我想將指針傳遞給EnumWindowsProc
的lParam
中的列表以避免此靜態變量。通過列表<IntPtr> *到EnumWindows的lParam在C#
我想我必須使用fixed
來修復列表在內存中的位置,但我不確定如何做到這一點。我想這到列表傳遞給我的回調函數:
unsafe
{
fixed (void* dp = &instances)
{
WinApi.EnumWindows(new WinApi.EnumWindowsProc(FindPPWindows), dp);
}
}
,但我得到
Cannot take the address of, get the size of, or declare a pointer to a managed type ('System.Collections.GenericList<IntPtr>')
我新望到C#,所以我真的不知道如何做到這一點 - 或者即使有可能,我讀過編組包含引用的託管類型是不可能的,但我只需要將它修復到內存中並創建一個指向它的指針,然後將指針轉回並使用它。我如何完成這項工作?
不能創建一個指向類。你唯一能做的就是創建一個數組,並傳遞第一個項目的指針,'void * dp =&instancesArray'將指向第一個項目。但是你仍然需要保持數組的大小,併發送足夠大的數組來包含所有的窗口。 – RoadBump