To use monikers in .NET you might want to check out Marshal.BindToMoniker
which internally calls the Win32 BindToMoniker function:
void BindToMoniker()
{
string pptxFile;
PowerPoint.Presentation pptx;
pptx = (PowerPoint.Presentation)Marshal.BindToMoniker(pptxFile);
pptx.Application.Visible = Office.MsoTriState.msoTrue;
}
Another option is to get an IDispatch pointer from a window handle using AccessibleObjectFromWindow
(A full sample is described in this question):
// AccessibleObjectFromWindow gets the IDispatch pointer of an object
// that supports IAccessible, which allows us to get to the native OM.
[DllImport("Oleacc.dll")]
private static extern int AccessibleObjectFromWindow(
int hwnd, uint dwObjectID,
byte[] riid,
ref PowerPoint.DocumentWindow ptr);
The following blog post (related to MS Office automation) by Andrew Whitechapel might also be a helpful resource on how to create and retrieve COM objects in .NET:
Launching Office Apps Programmatically