Hallo!
Ich muss den Programmfokus auf das zuletzt benutzte Programm schalten. Dafür habe ich eine Klasse geschrieben, die laufend per
die HWND des aktiven Fensters ausliest. Sobald ich dann dorthin schalten will, rufe ich
auf. Doch leider funktioniert das nicht so ganz.
Hoffe Ihr findet einen Denk-/Programmierfehler in diesem Code:
Danke schonmal & lg,
Rudi
Ich muss den Programmfokus auf das zuletzt benutzte Programm schalten. Dafür habe ich eine Klasse geschrieben, die laufend per
Code:
GetForegroundWindow()
Code:
SetForegroundWindow()
Hoffe Ihr findet einen Denk-/Programmierfehler in diesem Code:
Code:
public static class cTaskManagement
{
#region APIs einbinden
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr GetForegroundWindow();
#endregion
#region Klassenvariablen
static IntPtr ActiveProcess = new IntPtr();
static Timer tmrAutoReco = new Timer();
#endregion
#region Eigenschaften
static private bool bAutoRecognitionOn_ = false;
static public bool bAutoRecognitionOn
{
get { return bAutoRecognitionOn_; }
set { bAutoRecognitionOn_ = value;
//Starten
if (value == true)
{
StartAutoRecognition();
}
}
}
static private frm_Main MainForm_ = new frm_Main();
static public frm_Main MainForm
{
get { return MainForm_; }
set { MainForm_ = value; }
}
#endregion
#region Methoden
private static void StartAutoRecognition()
{
tmrAutoReco = new Timer();
tmrAutoReco.Interval = 250;
tmrAutoReco.Tick += new EventHandler(tmrAutoReco_Tick);
tmrAutoReco.Enabled = true;
}
static void tmrAutoReco_Tick(object sender, EventArgs e)
{
if (bAutoRecognitionOn)
{
IntPtr CurrentWindow = GetForegroundWindow();
if (CurrentWindow != MainForm.Handle)
{
ActiveProcess = CurrentWindow;
Debug.Print(ActiveProcess.ToString());
}
}
else
{
tmrAutoReco.Enabled = false;
tmrAutoReco.Dispose();
}
}
public static void SetFocusToLastApplication()
{
SetForegroundWindow(ActiveProcess);
}
#endregion
}
Danke schonmal & lg,
Rudi