MFC作成プロセス、取得プロセス、クローズプロセス
3026 ワード
使用する関数は次のとおりです.
1.プロセスの作成
作成プロセスコードは次のとおりです.
2.ウィンドウ名に従ってプロセスを開く
関連する関数は次のとおりです.
1.プロセスの作成
BOOL WINAPI CreateProcess(
_In_opt_ LPCTSTR lpApplicationName, // , :c:\\program files\\tensent\\qq\\bin\\qq.exe
_Inout_opt_ LPTSTR lpCommandLine, // , , ,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, //
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, //
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,// , 0,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCTSTR lpCurrentDirectory,
_In_ LPSTARTUPINFO lpStartupInfo, // , STARTUPINFO
_Out_ LPPROCESS_INFORMATION lpProcessInformation // , PROCESS_INFORMATION
);
作成プロセスコードは次のとおりです.
HANDLE hProc;
void CCreateProcessDlg::OnBnClickedButton1()//
{
// TODO:
STARTUPINFO si;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
PROCESS_INFORMATION pi;
memset(&pi, 0, sizeof(PROCESS_INFORMATION));
BOOL bCreateSuccess = ::CreateProcess(L"C:\\Program Files (x86)\\Tencent\\QQ\\Bin\\QQ.exe",// (exe)
NULL,//
NULL,//
NULL,//
FALSE, //
0, // , 0,
NULL,//
NULL,//
&si, &pi);
if (!bCreateSuccess)
{
CString str;
str.Format(L" :%d",GetLastError());
::AfxMessageBox(str);
}
else
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
::AfxMessageBox(L" ");
}
}
2.ウィンドウ名に従ってプロセスを開く
関連する関数は次のとおりです.
static CWnd* PASCAL FindWindow(
LPCTSTR lpszClassName, // NULL
LPCTSTR lpszWindowName // , QQ, 360,
);
DWORD WINAPI GetWindowThreadProcessId(
_In_ HWND hWnd,
_Out_opt_ LPDWORD lpdwProcessId
);
HANDLE WINAPI OpenProcess( _In_ DWORD dwDesiredAccess, // PROCESS_ALL_ACCESS _In_ BOOL bInheritHandle, _In_ DWORD dwProcessId );
id, :
void CCreateProcessDlg::OnBnClickedButton3()//
{
// TODO:
DWORD pid;
HWND hQQ = ::FindWindow(NULL, L"QQ");
::GetWindowThreadProcessId(hQQ, &pid);
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (hProc == NULL)
{
CString str;
str.Format(L"%d", (int)pid);
::AfxMessageBox(str);
::AfxMessageBox(TEXT(" "));
}
else
{
::AfxMessageBox(TEXT(" "));
}
}
3.プロセスのクローズBOOL WINAPI TerminateProcess(
_In_ HANDLE hProcess,
_In_ UINT uExitCode
);
::TerminateProcess(hProc, 0); // hProcess openprocess()