public static IntPtr FindWindowByWindowName(string windowName) { return(Win32API.FindWindow(null, windowName)); }
public static IntPtr FindWindowByClassName(string className) { return(Win32API.FindWindow(className, null)); }
public static bool SetWindowPosition(IntPtr hWnd, System.Drawing.Point pt) { return(Win32API.SetWindowPos(hWnd, IntPtr.Zero, pt.X, pt.Y, 0, 0, Win32API.SetWindowPosFlags.NOSIZE | Win32API.SetWindowPosFlags.NOZORDER)); }
public static bool SetForegroundWindow(IntPtr hWnd) { return(Win32API.SetForegroundWindow(hWnd)); }
private static int CalculateAbsoluteCoordinateY(int y) { return((y * 65536) / Win32API.GetSystemMetrics(Win32API.SystemMetric.SM_CYSCREEN)); }
private static string GetFilePath(Win32API.SYSTEM_HANDLE_INFORMATION systemHandleInformation, Process process) { var ipProcessHwnd = Win32API.OpenProcess(Win32API.ProcessAccessFlags.All, false, process.Id); var objBasic = new Win32API.OBJECT_BASIC_INFORMATION(); var objObjectType = new Win32API.OBJECT_TYPE_INFORMATION(); var objObjectName = new Win32API.OBJECT_NAME_INFORMATION(); var strObjectName = ""; var nLength = 0; IntPtr ipTemp, ipHandle; if (!Win32API.DuplicateHandle(ipProcessHwnd, systemHandleInformation.Handle, Win32API.GetCurrentProcess(), out ipHandle, 0, false, Win32API.DUPLICATE_SAME_ACCESS)) { return(null); } IntPtr ipBasic = Marshal.AllocHGlobal(Marshal.SizeOf(objBasic)); Win32API.NtQueryObject(ipHandle, (int)Win32API.ObjectInformationClass.ObjectBasicInformation, ipBasic, Marshal.SizeOf(objBasic), ref nLength); objBasic = (Win32API.OBJECT_BASIC_INFORMATION)Marshal.PtrToStructure(ipBasic, objBasic.GetType()); Marshal.FreeHGlobal(ipBasic); IntPtr ipObjectType = Marshal.AllocHGlobal(objBasic.TypeInformationLength); nLength = objBasic.TypeInformationLength; // this one never locks... while ((uint)(Win32API.NtQueryObject(ipHandle, (int)Win32API.ObjectInformationClass.ObjectTypeInformation, ipObjectType, nLength, ref nLength)) == Win32API.STATUS_INFO_LENGTH_MISMATCH) { if (nLength == 0) { Console.WriteLine("nLength returned at zero! "); return(null); } Marshal.FreeHGlobal(ipObjectType); ipObjectType = Marshal.AllocHGlobal(nLength); } objObjectType = (Win32API.OBJECT_TYPE_INFORMATION)Marshal.PtrToStructure(ipObjectType, objObjectType.GetType()); if (Is64Bits()) { ipTemp = new IntPtr(Convert.ToInt64(objObjectType.Name.Buffer.ToString(), 10) >> 32); } else { ipTemp = objObjectType.Name.Buffer; } var strObjectTypeName = Marshal.PtrToStringUni(ipTemp, objObjectType.Name.Length >> 1); Marshal.FreeHGlobal(ipObjectType); if (strObjectTypeName != "File") { return(null); } nLength = objBasic.NameInformationLength; var ipObjectName = Marshal.AllocHGlobal(nLength); // ...this call sometimes hangs. Is a Windows error. while ((uint)(Win32API.NtQueryObject(ipHandle, (int)Win32API.ObjectInformationClass.ObjectNameInformation, ipObjectName, nLength, ref nLength)) == Win32API.STATUS_INFO_LENGTH_MISMATCH) { Marshal.FreeHGlobal(ipObjectName); if (nLength == 0) { Console.WriteLine("nLength returned at zero! " + strObjectTypeName); return(null); } ipObjectName = Marshal.AllocHGlobal(nLength); } objObjectName = (Win32API.OBJECT_NAME_INFORMATION)Marshal.PtrToStructure(ipObjectName, objObjectName.GetType()); if (Is64Bits()) { ipTemp = new IntPtr(Convert.ToInt64(objObjectName.Name.Buffer.ToString(), 10) >> 32); } else { ipTemp = objObjectName.Name.Buffer; } if (ipTemp != IntPtr.Zero) { var baTemp = new byte[nLength]; try { Marshal.Copy(ipTemp, baTemp, 0, nLength); strObjectName = Marshal.PtrToStringUni(Is64Bits() ? new IntPtr(ipTemp.ToInt64()) : new IntPtr(ipTemp.ToInt32())); } catch (AccessViolationException) { return(null); } finally { Marshal.FreeHGlobal(ipObjectName); Win32API.CloseHandle(ipHandle); } } string path = GetRegularFileNameFromDevice(strObjectName); try { return(path); } catch { return(null); } }