이 함수는 프로세스가 forground에서 전체 화면에서 실행되고 있는지 여부를 감지 등을 발견하면 프로세스의 이름을 반환
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", SetLastError = true)]
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[DllImport("user32.dll")]
private static extern Int32 GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
[DllImport("user32.dll")]
private static extern bool
GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
private struct POINTAPI
{
public int x;
public int y;
}
private struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
private struct WINDOWPLACEMENT
{
public int length;
public int flags;
public int showCmd;
public POINTAPI ptMinPosition;
public POINTAPI ptMaxPosition;
public RECT rcNormalPosition;
}
public string FullscreenProcess()
{
IntPtr foreWindow = GetForegroundWindow();
// get the placement
WINDOWPLACEMENT forePlacement = new WINDOWPLACEMENT();
forePlacement.length = Marshal.SizeOf(forePlacement);
GetWindowPlacement(foreWindow, ref forePlacement);
if (forePlacement.rcNormalPosition.top == 0 && forePlacement.rcNormalPosition.left == 0 && forePlacement.rcNormalPosition.right == Screen.PrimaryScreen.Bounds.Width && forePlacement.rcNormalPosition.bottom == Screen.PrimaryScreen.Bounds.Height)
{
uint processID;
GetWindowThreadProcessId(foreWindow, out processID);
Process proc = Process.GetProcessById((int)processID);
return proc.ProcessName;
}
return null;
}
이 후, 우리가 세트로 반환 된 프로세스 이름과 일치 할 필요 인기있는 미디어 플레이어 또는 기타 프로세스.
사용자가 전체 화면으로 재생한다고 가정했습니다.
유일한 옵션은 유휴로 간주하지 않는 프로그램 각각에 대해 API에 연결하고 해당 프로그램의 재생 여부를 확인하는 것입니다. – Dani
유휴 시간의 의미에 대한 객관적인 정의부터 시작해야합니다. – hammar
사용자가 특정 시간 동안 시스템을 사용하지 않은 경우 wabcam 시작 및 모니터링과 같은 작업을 수행하기 만하면됩니다. –