[英]Get the current active application name
I want to get name of currently active application when my timer stops. 我想在计时器停止时获取当前活动应用程序的名称。 After recording of 20 secs it should show me current active application name.
录制20秒后,它应显示当前活动的应用程序名称。 I tried some code.
我尝试了一些代码。 You can see here.
你可以在这里看到。 But it's not showing me anything after timer stops.
但是在计时器停止后它没有向我显示任何内容。
C# code: 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();
}
Edit: Title is missleading. 编辑:标题是误导性的。
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. 确定ProcessID。 With the ProcessID you're able to obtain the name of the process.
使用ProcessID,您可以获取进程的名称。 With the Process Class: http://msdn.microsoft.com/de-de/library/system.diagnostics.process.mainmodule.aspx
使用Process类: 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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.