2015-10-30 129 views
0

嘗試https://stackoverflow.com/a/30138664/533237並能夠捕捉畫面。會話0捕獲屏幕

但我想在會話0從應用程序運行捕獲屏幕或另一user.Introduced一個10秒睡眠捕捉前和切換到另一用戶。 也試過PsExec.exe -h -s E:\ sc.exe。雙方拋出錯誤

C:\Users\unity\Documents\Visual Studio 2015\Projects\ConsoleApplication2\Debug>sc.exe 
FAILURE 0x8876086C (-2005530516) 
    line: 60 file: 'c:\users\unity\documents\visual studio 2015\projects\consoleapplication2\consoleapplication2\consoleapplication2.cpp' 
    expr: 'd3d->GetAdapterDisplayMode(adapter, &mode)' 

C:\Users\unity\Documents\Visual Studio 2015\Projects\ConsoleApplication2\Debug>PsExec.exe -h -s E:\sc.exe -w E:\ 
PsExec v2.11 - Execute processes remotely 
Copyright (C) 2001-2014 Mark Russinovich 
Sysinternals - www.sysinternals.com 


FAILURE 0x8876086C (-2005530516) 
    line: 60 file: 'c:\users\unity\documents\visual studio 2015\projects\consoleapplication2\consoleapplication2\consoleapplication2.cpp' 
    expr: 'd3d->GetAdapterDisplayMode(adapter, &mode)' 

註釋掉GetAdapterDisplayMode和硬編碼的高度和寬度,但CreateDevice的失敗

FAILURE 0x8876086A (-2005530518) 
    line: 76 file: 'c:\users\unity\documents\visual studio 2015\projects\consoleapplication2\consoleapplication2\consoleapplication2.cpp' 
    expr: 'd3d->CreateDevice(adapter, D3DDEVTYPE_HAL, NULL, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &parameters, &device)' 

編輯: 想法是有一個單一的應用程序在後臺運行,並捕獲任何越來越顯示的用戶無關登錄或者即使沒有人在(鎖定/登錄屏幕)登錄

回答

1

有與此問題的兩個層面。

在一個級別上,而大量的GDI將工作,會話0不連接到官能顯示裝置,當然不是一個,其能夠D3D的。

在另一個層面上,而像DWM的相繼出臺,在Windows API始終呈現在顯示模型,其中隱形紗窗像素根本不存在。整個窗口顯示模型的構建是圍繞將窗口合作繪製到共享的顯示錶面上,窗口的任何部分都是根據桌面合成系統的要求重新繪製的。

這意味着,在一個非常基本的方式,你不能屏幕捕獲會話0作爲什麼,爲了做到這一點,會話0將必須被連接到活動顯示設備。

+1

這不完全正確 - 從Win8/Server 2012開始,您可以使用[會話0中的D3D](https://msdn.microsoft.com/en-us/library/windows/desktop/hh404562(v = vs.85).aspx#use_direct3d_in_session_0_processes),包括與顯示適配器相關的API,但是* output *和* window *相關的​​API仍然無效,因此沒有什麼可以「捕獲」那裏。 – MooseBoys