WIn32API ターミナルサーバー上のプロセスを終了させる
ターミナルサーバー上のプロセスを終了させるには、WTSTerminateProcess関数を用いる。
BOOL WTSTerminateProcess( HANDLE hServer, //ターミナルサーバーのハンドル DWORD ProcessId,//終了させるプロセスID DWORD ExitCode //終了コード );
実際は、予めインターネットエクスプローラを起動しておく必要がある
#include <windows.h> #include <stdio.h> #include <wtsapi32.h> #pragma comment(lib, "wtsapi32.lib") #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") int main() { PWTS_PROCESS_INFO ProcessInfo; DWORD dwCount = 0; //ターミナルサーバー上のプロセス情報を取得する WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1, &ProcessInfo, &dwCount); //インターネットエクスプローラのプロセスを終了させる for (DWORD i=0; i < dwCount; i++) { if (StrCmpI(ProcessInfo[i].pProcessName, TEXT("iexplore.exe")) == 0) { WTSTerminateProcess(WTS_CURRENT_SERVER_HANDLE, ProcessInfo[i].ProcessId, 0); } } WTSFreeMemory(ProcessInfo); return 0; }
#include <windows.h> #include <stdio.h> #include <wtsapi32.h> #pragma comment(lib, "wtsapi32.lib") #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") int main() { HANDLE hServer; PWTS_PROCESS_INFO ProcessInfo; DWORD dwCount = 0; //TCHAR szNetBiosName[] = TEXT("リモートPCのNETBIOS名");//リモートPCのNETBIOS名を指定する TCHAR szNetBiosName[] = TEXT(""); hServer = <span class="deco" style="color:#FF0000;">WTSOpenServer</span>(szNetBiosName); if (hServer == NULL) { return 1; } //プロセス情報を取得する WTSEnumerateProcesses(hServer, 0, 1, &ProcessInfo, &dwCount); //インターネットエクスプローラのプロセスを終了させる for (DWORD i=0; i < dwCount; i++) { if (StrCmpI(ProcessInfo[i].pProcessName, TEXT("iexplore.exe")) == 0) { WTSTerminateProcess(WTS_CURRENT_SERVER_HANDLE, ProcessInfo[i].ProcessId, 0); } } //クリーンアップ WTSFreeMemory(ProcessInfo); WTSCloseServer(hServer); return 0; }
http://msdn.microsoft.com/ja-jp/library/cc429641.aspx