Desidero ottenere il nome dell'applicazione correntemente attiva quando il timer si arresta. Dopo la registrazione di 20 secondi dovrebbe mostrarmi il nome attuale dell'applicazione attiva. Ho provato un po 'di codice. Puoi vedere qui. Ma non mi mostra niente dopo che il timer si ferma.Ottieni il nome dell'applicazione attiva corrente
codice C#:
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();
}
Vuoi sapere il titolo della finestra corrente? http://stackoverflow.com/questions/115868/how-do-i-get-the-title-of-the-current-active-window-using-c – Lucas
Desidero il nome dell'applicazione. Se il blocco note è in esecuzione in background, dovrebbe mostrarmi il nome di "Blocco note" lì. – Dinesh
La domanda è: vuoi il titolo della finestra o il nome del processo dell'app in primo piano? – Andre