ジョブオブジェクトコンテキストでプログラムを実行しようとしていますが、ジョブに制限を設定した後、ジョブにない他のプログラムから何かをコピーすると、プログラムに戻ってctrl +を使用しようとしますv または右クリック メニューの [貼り付け] を実行すると、ジョブ コンテキスト内のプログラムは単に何も貼り付けません。
しかし、他の状況では、たとえば、プログラムから何かをコピーして、自分のプログラムまたは他のプログラム内のどこかに貼り付けると、正常に実行されます。
ジョブオブジェクトの勉強を始めて数日経ちましたが、JOB_OBJECT_UILIMIT_WRITECLIPBOARD や JOB_OBJECT_UILIMIT_READCLIPBOARD の制限を設定していなかったので、とても不思議です。この問題を解決する方法を教えてください。ありがとう!
私のシステムは Windows 7 64 ビットで、この問題を引き起こすコードは次のとおりです。
#include "stdafx.h"
#include <windows.h>
#define exePath L"c:\\windows\\notepad.exe"
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hJob = CreateJobObject( NULL , NULL );
JOBOBJECT_BASIC_UI_RESTRICTIONS jobbuir;
jobbuir.UIRestrictionsClass = JOB_OBJECT_UILIMIT_NONE;
jobbuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_DESKTOP;
jobbuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_EXITWINDOWS;
jobbuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS;
SetInformationJobObject(hJob, JobObjectBasicUIRestrictions, &jobbuir, sizeof(jobbuir));
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
BOOL bResult = CreateProcess(
exePath, L"" , NULL, NULL, FALSE,
CREATE_SUSPENDED | CREATE_BREAKAWAY_FROM_JOB |
CREATE_UNICODE_ENVIRONMENT | DETACHED_PROCESS , NULL, NULL, &si, &pi
);
AssignProcessToJobObject(hJob, pi.hProcess);
ResumeThread(pi.hThread);
CloseHandle(pi.hThread);
HANDLE h[2];
h[0]=pi.hProcess;
h[1]=hJob;
DWORD dw = WaitForMultipleObjects(2, h, FALSE, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(hJob);
return 0;
}
ブラストシャン