/// <summary> /// liefert die Prozess-ID zum Fenster /// </summary> /// <param name="hWnd"></param> /// <param name="bIsProgWindow"></param> /// <returns></returns> public uint GetProcessId(bool bIsProgWindow = true) { IntPtr hWnd = this.hWnd; if (!bIsProgWindow) // Programmfenster ermitteln { hWnd = Win32User.GetAncestor(hWnd, Win32User.GetAncestorFlags.GetRoot); } uint processId; Win32User.GetWindowThreadProcessId(hWnd, out processId); return(processId); }
//public unsafe static string GetPanelText1(IntPtr hStatusBar, int pos) { // string text = ""; // // Programmfenster ermitteln // IntPtr hwnd = GetAncestor(hStatusBar, GetAncestorFlags.GetRoot); // // Prozess-ID ermitteln // uint processId; // uint threadId = GetWindowThreadProcessId(hwnd, out processId); // if (processId > 0) { // // Prozess öffnen // IntPtr hProcess = OpenProcess(ProcessAccessFlags.All, false, processId); // if (hProcess != IntPtr.Zero) { // // Remote-Puffer anlegen // const int BUFFER_SIZE = 0x1000; // IntPtr ipRemoteBuffer = VirtualAllocEx(hProcess, IntPtr.Zero, new IntPtr(BUFFER_SIZE), AllocationType.COMMIT, MemoryProtection.READWRITE); // if (ipRemoteBuffer != IntPtr.Zero) { // // Textlänge und Text ermitteln // int chars = SendMessage(hStatusBar.ToInt32(), SB_GETTEXT, pos, ipRemoteBuffer.ToInt32()); // if (chars >= 0) { // byte[] localBuffer = new byte[BUFFER_SIZE]; // fixed (byte* pLocalBuffer = localBuffer) { // IntPtr ipLocalBuffer = new IntPtr(pLocalBuffer); // Int32 dwBytesRead = 0; // IntPtr ipBytesRead = new IntPtr(&dwBytesRead); // // Remote-Puffer in den lokalen Puffer einlesen // bool b4 = ReadProcessMemory(hProcess, ipRemoteBuffer, localBuffer, BUFFER_SIZE, out ipBytesRead); // //bool b4 = ReadProcessMemory(hProcess, ipRemoteBuffer, ipLocalBuffer, BUFFER_SIZE, out ipBytesRead); // if (b4) { // // Umwandlung in Text // text = Marshal.PtrToStringUni(ipLocalBuffer, chars); // if (text == " ") // text = String.Empty; // } // } // } // VirtualFreeEx(hProcess, ipRemoteBuffer, 0, FreeType.Release); // } // CloseHandle(hProcess); // } // } // return text; //} /// <summary> /// ermittelt den Text einer Statusbar /// </summary> /// <param name="hStatusBar"></param> /// <param name="pos">Position 0, ...</param> /// <returns></returns> public static string GetPanelText(IntPtr hStatusBar, int pos) { string text = ""; // Programmfenster ermitteln IntPtr hwnd = Win32User.GetAncestor(hStatusBar, Win32User.GetAncestorFlags.GetRoot); // Prozess-ID ermitteln uint processId; uint threadId = Win32User.GetWindowThreadProcessId(hwnd, out processId); if (processId > 0) { // Prozess öffnen IntPtr hProcess = Win32Kernel.OpenProcess(Win32Kernel.ProcessAccessFlags.All, false, processId); if (hProcess != IntPtr.Zero) { // Remote-Puffer anlegen const int BUFFER_SIZE = 0x1000; IntPtr ipRemoteBuffer = Win32Kernel.VirtualAllocEx(hProcess, IntPtr.Zero, new IntPtr(BUFFER_SIZE), Win32Kernel.AllocationType.COMMIT, Win32Kernel.MemoryProtection.READWRITE); if (ipRemoteBuffer != IntPtr.Zero) { // Textlänge und Text ermitteln int chars = Win32User.SendMessage(hStatusBar, Win32User.SB_GETTEXT, pos, ipRemoteBuffer.ToInt32()).ToInt32(); if (chars >= 0) { byte[] localBuffer = new byte[BUFFER_SIZE]; IntPtr ipBytesRead = new IntPtr(0); // Remote-Puffer in den lokalen Puffer einlesen if (Win32Kernel.ReadProcessMemory(hProcess, ipRemoteBuffer, localBuffer, BUFFER_SIZE, out ipBytesRead)) { // Umwandlung in Text text = System.Text.Encoding.Unicode.GetString(localBuffer).Substring(0, chars); if (text == " ") { text = String.Empty; } } } Win32Kernel.VirtualFreeEx(hProcess, ipRemoteBuffer, 0, Win32Kernel.FreeType.Release); } Win32Kernel.CloseHandle(hProcess); } } return(text); }