问题描述
C#中一个窗体实例之前怎么获取当前windows运行的主程序的句柄。。我想做一个仿win7的放大镜..放大镜放大的同时还能点击放大镜后面的窗体。。求指教
解决方案
解决方案二:
privateboolhaveMainWindow=false;privateIntPtrmainWindowHandle=IntPtr.Zero;privateintprocessId=0;privatevoidWindow_Loaded(objectsender,RoutedEventArgse){///初始化录音句柄等processId=Process.GetCurrentProcess().Id;BaseData.hwnd=GetMainWindowHandle(processId);}privateIntPtrGetMainWindowHandle(intprocessId){if(!haveMainWindow){this.mainWindowHandle=IntPtr.Zero;this.processId=processId;User32API.EnumThreadWindowsCallbackcallback=newUser32API.EnumThreadWindowsCallback(this.EnumWindowsCallback);User32API.EnumWindows(callback,IntPtr.Zero);GC.KeepAlive(callback);haveMainWindow=true;}returnthis.mainWindowHandle;}privateboolEnumWindowsCallback(IntPtrhandle,IntPtrextraParameter){intnum;User32API.GetWindowThreadProcessId(newHandleRef(this,handle),outnum);if((num==this.processId)&&this.IsMainWindow(handle)){this.mainWindowHandle=handle;returnfalse;}returntrue;}privateboolIsMainWindow(IntPtrhandle){return(!(User32API.GetWindow(newHandleRef(this,handle),4)!=IntPtr.Zero)&&User32API.IsWindowVisible(newHandleRef(this,handle)));}
解决方案三:
调用GetMainWindowHandle(processId);就能获取该程序句柄
解决方案四:
调用这个函数还是会取到当前的应该程序。。。我的意思是在我运行程序之前调用windows正在运行的主程序
解决方案五:
getforegroundwindow