Get current active application name

I want to get the name of the active application when my timer stops. After recording 20 seconds, it should show me the current active name of the application. I tried the code. You can see here. But it shows me nothing after stopping the timer.

C # code:

public class Win32wrapper { private System.Timers.Timer pingTimer; private Timer recordTimer; private List<HarvestApp.ProcessInformation> ProcessList = new List<HarvestApp.ProcessInformation>(); [DllImport("user32.dll")] public static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] public static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, out uint processId); private DateTime recordStartTime; public void startTimer(int pingTimerValue=5000, int recordTimerValue=20000) { pingTimer = new System.Timers.Timer(pingTimerValue); pingTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); pingTimer.Interval = pingTimerValue; pingTimer.Enabled = true; recordTimer = new Timer(recordTimerValue); recordTimer.Elapsed += new ElapsedEventHandler(OnRecordEvent); recordTimer.Interval = recordTimerValue; recordTimer.Enabled = true; recordStartTime = DateTime.Now; } private void OnTimedEvent(object source, ElapsedEventArgs e) { Console.WriteLine("The Ping Elapsed event was raised at {0}", e.SignalTime); //Record through win32dll the application foreground caption GetActiveFileNameTitle(); //Store into collection object, Push into ArrayList, Push into process id } public String GetActiveFileNameTitle() { IntPtr hWnd = GetForegroundWindow(); uint processId; GetWindowThreadProcessId(hWnd, out processId); Process p = Process.GetProcessById((int)processId); //p.MainModule.FileName.Dump(); return p.ProcessName; } private void OnRecordEvent(object source, ElapsedEventArgs e) { Console.WriteLine("The Record Elapsed event was raised at {0}", e.SignalTime); ProcessInformation procTemp = GetMaxRunTimeForApplicationsBetween(recordStartTime, DateTime.Now); Harvest_TimeSheetEntry tempEntry = new Harvest_TimeSheetEntry(procTemp, recordStartTime, DateTime.Now); //Add to the list of the specific day Only not the entire // Globals._globalController.harvestManager._TIMESHEETENTRYDICTIONARY[recordStartTime.Date].Add(tempEntry); Globals._globalController.getDayViewWindow.Dispatcher.BeginInvoke(new Action(delegate() { Globals._globalController.getDayViewWindow.addHarvestEntrytoView(tempEntry); })); //Clean Out the ProcessList? recordStartTime = DateTime.Now; } public void stopTimer() { pingTimer.Stop(); recordTimer.Stop(); } 
+6
source share
1 answer

Edit: Skipped title.

Watch your code:

 private void OnTimedEvent(object source, ElapsedEventArgs e) { Console.WriteLine("The Ping Elapsed event was raised at {0}", e.SignalTime); //Record through win32dll the application foreground caption // You miss the output or usage of the return value here. GetActiveFileNameTitle(); // Try var procName = GetActiveFileNameTitle(); Console.WriteLine(procName); //Store into collection object, Push into ArrayList, Push into process id } 

Working example:

 [DllImport("user32.dll")] public static extern IntPtr GetForegroundWindow(); 

to get the Foreground window and:

 [DllImport("user32.dll", SetLastError = true)] public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); 

To determine the ProcessID. Using ProcessID, you can get the name of the process. With the process class: http://msdn.microsoft.com/de-de/library/system.diagnostics.process.mainmodule.aspx

 class Program { static void Main(string[] args) { Thread.Sleep(5000); // Test it with 5 Seconds, set a window to foreground, and you see it works! IntPtr hWnd = GetForegroundWindow(); uint procId = 0; GetWindowThreadProcessId(hWnd, out procId); var proc = Process.GetProcessById((int)procId); Console.WriteLine(proc.MainModule); Console.ReadKey(); } [DllImport("user32.dll")] public static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll", SetLastError = true)] public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); } 
+12
source

Source: https://habr.com/ru/post/948231/


All Articles