Native Window Handles sind kein Müll gesammelt. Nachdem ich im Internet gesucht habe, habe ich über SafeProcessHandle im MSDN Artikel erfahren. Versucht, es zu implementieren, aber ich erhalte ‚System.Runtime.InteropServices.SEHException‘Intptr Handle sind nicht Garbage Collected
https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.safehandle.aspx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
namespace TestHandle
{
class Program
{
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
static void Main(string[] args)
{
while (true)
{
IntPtr hWnd = GetForegroundWindow();
int processID = 0;
int threadID = GetWindowThreadProcessId(hWnd, out processID);
using (Process p = Process.GetProcessById(processID))
{
StringBuilder text = new StringBuilder(256);
GetWindowText(hWnd, text, 256);
Console.WriteLine(text.ToString());
}
Console.WriteLine(hWnd);
Thread.Sleep(100);
}
char tmp = 'q';
while (Console.Read() != tmp) ;
}
}
}
Um aktuell geöffnete Fenster zu erhalten, ich versuche es durch Timer zu implementieren und auch durch, während versucht Schleife, aber es erhöht den Speicherbedarf und wenn ich eine lange laufende Konsole-Anwendung entwerfe, die funktioniert, bis der PC läuft, werden die Dinge schlimmer. Kann mir jemand dabei helfen?
Sie besitzen diese Fenster nicht, also müssen Sie nicht aufräumen. Kein Code versucht hier aufzuräumen. Keine Verwendung von Salbeigriffen kann gesehen werden. Dienste haben keinen Zugriff auf interaktive Desktops. Bitte machen Sie deutlich, was Sie erreichen wollen und was das Problem ist. –
Es ist eine lange laufende Konsolenanwendung, um laufendes Fenster zu erhalten. Ja, Sie sind wahr, aber wenn Sie diesen Code in einem Timer ausführen, werden Sie feststellen, dass der Speicherbedarf ständig zunimmt. – Jef