createdesktop APIを使用してデスクトップを作成しています。スクリーンショットを取ったり、デスクトップをuser.anyにデスクトップを表示せずに送信したりしたいと思います。これを実装する???createdesktop apiを使用して作成されたデスクトップのスクリーンショットを取る
答えて
編集:\これは、目に見えないデスクトップのために動作しません、私は私の古いコードを見てきた、と私はなかったアクティブデスクトップ(「WinSta0のスクリーンショットをキャッチするためにことを必要としていることがわかり私はOpenInputDesktopを使用しました。
+1 ThievingSixあなたは正しくです。
ご迷惑をおかけして申し訳ありません。
あなたは(、その後、あなたはSetThreadDesktopに渡すことのハンドルを持っているあなたはCreateDestkopでデスクトップを作成している場合)SetThreadDesktopを使用する必要があります。スレッドをデスクトップに切り替えると、スクリーンショットをキャッチできます。良いアイデアはスレッドのために以前のデスクトップに戻ることです(他の/将来のコードを '中断しない')。
var
lOldDesktop: HDESK;
begin
lOldDesktop:= GetThreadDesktop(GetCurrentThreadId);
try
if not SetThreadDesktop(ADesktop) then // pass handle to your desktop, or dekstop handle obtained from OpenInputDesktop
{error handle, like RaiseLastOSError or Exit(False)};
// your screenshot/input/mouse code here
finally
if lOldDesktop<> 0 then // GetThreadDesktop can fail (I don't know condition when this GetThreadDesktop(GetCurrentThreadId) could fail)
SetThreadDesktop(lOldDesktop); // revert thread to previous desktop
end;
end;
SetThreadDesktopが、その場合には失敗する可能性があるためThievingSixが指摘したようにこのコードは、非メインスレッドで実行する必要があります。安全な方法はスクリーンショットを作るスレッドを生成することです。
PS。私はこれが "入力マウス/キーボードを送信"(それはすべきです)で動作するかどうかは分かりませんが、スクリーンショットの動作についてはわかりません。
編集:セッション、ウィンドウステーション上の
- より、ここhttp://blogs.technet.com/b/askperf/archive/2007/07/24/sessions-desktops-and-windows-stations.aspx
- デスクトップツール(SysInternalsのを)デスクトップ - http://technet.microsoft.com/en-us/sysinternals/cc817881
私が見つけた短い答えはということですできません。再描画するための可視ウィンドウがないため、ペイントコールがないため、非アクティブデスクトップのスクリーンショットをとることはできません。
SwitchDesktop()コール、スクリーンショット、SwitchDesktop()を元に戻すことができます。ユーザーはそれに気づくことはありませんが、この短期間にウィンドウが再描画する時間がないため、スクリーンショットではほとんど得られません。
また、SetThreadDesktop()を呼び出すために新しいスレッドを作成する必要があります。メインスレッドを使用してGUIアプリケーションを使用すると、そのスレッドは失敗します。 SetThreadDesktop()は、現在のデスクトップにウィンドウがあるときに失敗します。
SysInternalsには、複数のデスクトップ(Linuxデスクトップスイッチのような)を管理するアプリケーションがあります。デスクトップを選択してそれに切り替えると、デスクトップのサムネイルが表示されます。このサムネイルはライブではなく、ユーザーがそのデスクトップにいるときに最後に認識された完全再描画によって取得されます。要するに、SysInternalsがライブスクリーンショットを行えない場合、私たちのいずれかが疑わしい。
これはもちろん、この正確な機能に関する私自身の研究に基づいています。誰かが実際に働かせてくれたら知りたいので、私もそれを使うことはできません!
[私は新しいデスクトップに切り替えた後に 'Default'デスクトップで自分のプログラムを実行しました](http://stackoverflow.com/questions/41029243/how-send-keys-and-mouse-inputs-to-default-desktop-when- new-desktop-created-is-vi)、私はスクリーンショットをキャプチャすることができますが、マウス/キーボードの操作では成功しません。あなたは私を助けるためにいくつかのsuggesionを持っていますか? – Saulo
- 1. C#SlimDXを使用してウィンドウ/デスクトップのスクリーンショットを取る
- 2. CreateDesktop APIによって作成された新しいデスクトップでGUIソフトウェアがどのように表示されますか?
- 3. javascriptを使用してデスクトップのスクリーンショットをキャプチャする
- 4. DirectXを使用してバックバッファからデスクトップのスクリーンショットを取得する方法
- 5. PHPを使用したサーバのデスクトップのスクリーンショット
- 6. vuejsを使用してデスクトップのスクリーンショットを取得できますか?
- 7. CreateDesktopを使用して作成した新しいデスクトップで新しいプロセスを起動できませんWindows 10
- 8. デスクトップ向けAPIを使用したオンラインバックアップソリューション
- 9. ffmpegを使用してビデオのスクリーンショットを作成するレール
- 10. elasticsearch python apiを使用して、作成されたすべてのスナップショットの概要を取得する方法
- 11. Sikuliを使用してMicrosoft Wordでデスクトップのスクリーンショットを保存します。
- 12. REST APIを使用してネストされたリレーションシップのSalesforceケースオブジェクトを作成
- 13. デスクトップC#(WPF)のスクリーンショット
- 14. 新しいデスクトップを作成するには? C++
- 15. LimeSurvey APIレスポンスを使用して作成されたデータフレームの動的Rヒストグラム
- 16. APIを使用したユーザー作成フロー
- 17. アーサナは - タグのAPIを作成する - の取得 - - 私はAPIを使用してタグを作成していたときに作成タグ
- 18. 分度器のデスクトップのスクリーンショットを撮る
- 19. 利用プランを使用したAWS APIゲートウェイクライアントAPIキーの作成
- 20. Twitter API:新しく作成されたアカウントを取得
- 21. Knex.jsを使用してネストされたリターンモデルを作成する
- 22. Reflection APIを使用して、生成されたfinalクラスのオブジェクトのディープコピーを作成する方法
- 23. セットアップと配備を使用してデスクトップへのショートカットを作成する
- 24. APIキーを使用してドライブAPIサービスを作成するC#
- 25. adbkitを使用してAndroidのスクリーンショットを取得する方法
- 26. netbeansを使用して作成された既存のパネルにjtextfieldを作成
- 27. ajaxを使用して動的に作成されたdivを取り込む
- 28. IntelliJのDialogWrapperを使用して作成されたダイアログのアイコン
- 29. グラフapiを使ってfbページで作成されたコメント
- 30. Aero合成なしのvsyncはありません。 CreateDesktop()のデスクトップでAeroをオンにできません
私はsetthreaddesktopと呼ばれるデスクトップを作成したのでスクリーンショットを撮るためのコードを提供できますが、スクリーンショットを撮ろうとするとトレイのみを取得します – opc0de
別の「スクリーンショットコード」は必要ありません。 。あなたの新しいデスクトップ*にはStartMenuはありません。各デスクトップには「独自のウィンドウ」があります。このツールで新しいデスクトップを作成すると、新しいデスクトップ上で実行される新しいexplorer.exeプロセスが作成されます。http://technet.microsoft.com/en-us/sysinternals/cc817881(ThievingSixとSysInternalsデスクトップ) 。 – kibab
最後に試したときにスクリーンショットの黒い画面が表示されるため(作業中のウィンドウが再描画されていないため)、作業コードを見たいと思っています。 SysInternalsがライブサムネイルを行っていないという事実が、その点に追加されています。 – ThievingSix