本文整理汇总了C++中TerminateProcess函数的典型用法代码示例。如果您正苦于以下问题:C++ TerminateProcess函数的具体用法?C++ TerminateProcess怎么用?C++ TerminateProcess使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了TerminateProcess函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _gpgme_io_spawn
//.........这里部分代码省略.........
&sec_attr, /* thread security attributes */
FALSE, /* inherit handles */
cr_flags, /* creation flags */
NULL, /* environment */
NULL, /* use current drive/directory */
&si, /* startup information */
&pi)) /* returns process information */
{
TRACE_LOG1 ("CreateProcess failed: ec=%d", (int) GetLastError ());
free (arg_string);
close (tmp_fd);
DeleteFile (tmp_name);
/* FIXME: Should translate the error code. */
errno = EIO;
return TRACE_SYSRES (-1);
}
free (arg_string);
if (flags & IOSPAWN_FLAG_ALLOW_SET_FG)
_gpgme_allow_set_foreground_window ((pid_t)pi.dwProcessId);
/* Insert the inherited handles. */
for (i = 0; fd_list[i].fd != -1; i++)
{
HANDLE hd;
/* Make it inheritable for the wrapper process. */
if (!DuplicateHandle (GetCurrentProcess(), fd_to_handle (fd_list[i].fd),
pi.hProcess, &hd, 0, TRUE, DUPLICATE_SAME_ACCESS))
{
TRACE_LOG1 ("DuplicateHandle failed: ec=%d", (int) GetLastError ());
TerminateProcess (pi.hProcess, 0);
/* Just in case TerminateProcess didn't work, let the
process fail on its own. */
ResumeThread (pi.hThread);
CloseHandle (pi.hThread);
CloseHandle (pi.hProcess);
close (tmp_fd);
DeleteFile (tmp_name);
/* FIXME: Should translate the error code. */
errno = EIO;
return TRACE_SYSRES (-1);
}
/* Return the child name of this handle. */
fd_list[i].peer_name = handle_to_fd (hd);
}
/* Write the handle translation information to the temporary
file. */
{
/* Hold roughly MAX_TRANS quadruplets of 64 bit numbers in hex
notation: "0xFEDCBA9876543210" with an extra white space after
every quadruplet. 10*(19*4 + 1) - 1 = 769. This plans ahead
for a time when a HANDLE is 64 bit. */
#define BUFFER_MAX 810
char line[BUFFER_MAX + 1];
int res;
int written;
size_t len;
if ((flags & IOSPAWN_FLAG_ALLOW_SET_FG))
strcpy (line, "~1 \n");
示例2: wm_exec
int wm_exec(char *command, char **output, int *status, int secs) {
HANDLE hThread;
DWORD dwCreationFlags;
STARTUPINFO sinfo = { 0 };
PROCESS_INFORMATION pinfo = { 0 };
ThreadInfo tinfo = { 0 };
int retval = 0;
sinfo.cb = sizeof(STARTUPINFO);
sinfo.dwFlags = STARTF_USESTDHANDLES;
// Create stdout pipe and make it inheritable
if (!CreatePipe(&tinfo.pipe, &sinfo.hStdOutput, NULL, 0)) {
merror("%s: ERROR: CreatePipe()", ARGV0);
return -1;
}
sinfo.hStdError = sinfo.hStdOutput;
if (!SetHandleInformation(sinfo.hStdOutput, HANDLE_FLAG_INHERIT, 1)) {
merror("%s: ERROR: SetHandleInformation()", ARGV0);
return -1;
}
// Create child process and close inherited pipes
dwCreationFlags = wm_task_nice < -10 ? HIGH_PRIORITY_CLASS :
wm_task_nice < 0 ? ABOVE_NORMAL_PRIORITY_CLASS :
wm_task_nice == 0 ? NORMAL_PRIORITY_CLASS :
wm_task_nice < 10 ? BELOW_NORMAL_PRIORITY_CLASS :
IDLE_PRIORITY_CLASS;
if (!CreateProcess(NULL, command, NULL, NULL, TRUE, dwCreationFlags, NULL, NULL, &sinfo, &pinfo)) {
merror("%s: ERROR: CreateProcess(): %ld", ARGV0, GetLastError());
return -1;
}
CloseHandle(sinfo.hStdOutput);
// Create reading thread
hThread = CreateThread(NULL, 0, Reader, &tinfo, 0, NULL);
if (!hThread) {
merror("%s: ERROR: CreateThread(): %ld", ARGV0, GetLastError());
return -1;
}
// Get output
switch (WaitForSingleObject(pinfo.hProcess, secs * 1000)) {
case 0:
if (status) {
DWORD exitcode;
GetExitCodeProcess(pinfo.hProcess, &exitcode);
*status = exitcode;
}
break;
case WAIT_TIMEOUT:
TerminateProcess(pinfo.hProcess, 1);
retval = WM_ERROR_TIMEOUT;
break;
default:
merror("%s: ERROR: WaitForSingleObject()", ARGV0);
TerminateProcess(pinfo.hProcess, 1);
retval = -1;
}
// Output
WaitForSingleObject(hThread, INFINITE);
if (retval >= 0)
*output = tinfo.output ? tinfo.output : strdup("");
else
free(tinfo.output);
// Cleanup
CloseHandle(hThread);
CloseHandle(pinfo.hProcess);
CloseHandle(pinfo.hThread);
return retval;
}
示例3: osd_process_kill
void osd_process_kill(void)
{
TerminateProcess(GetCurrentProcess(), -1);
}
示例4: DebugMainLoop
//.........这里部分代码省略.........
}
if (!pOptions->first_chance) {
break;
}
}
// XXX: Deferred symbols don't get loaded without this
SymRefreshModuleList(pProcessInfo->hProcess);
dumpException(pProcessInfo->hProcess,
&DebugEvent.u.Exception.ExceptionRecord);
// Find the thread in the thread list
THREAD_INFO_LIST::const_iterator it;
for (it = pProcessInfo->Threads.begin(); it != pProcessInfo->Threads.end(); ++it) {
DWORD dwThreadId = it->first;
HANDLE hThread = it->second.hThread;
if (dwThreadId != DebugEvent.dwThreadId &&
ExceptionCode != STATUS_BREAKPOINT &&
ExceptionCode != STATUS_WX86_BREAKPOINT) {
continue;
}
dumpStack(pProcessInfo->hProcess, hThread, NULL);
}
if (!DebugEvent.u.Exception.dwFirstChance) {
/*
* Terminate the process. As continuing would cause the JIT debugger
* to be invoked again.
*/
fTerminating = TRUE;
TerminateProcess(pProcessInfo->hProcess, (UINT)ExceptionCode);
}
break;
}
case CREATE_THREAD_DEBUG_EVENT:
if (pOptions->verbose_flag) {
lprintf("CREATE_THREAD PID=%lu TID=%lu\r\n",
DebugEvent.dwProcessId,
DebugEvent.dwThreadId
);
}
// Add the thread to the thread list
pProcessInfo = &g_Processes[DebugEvent.dwProcessId];
pThreadInfo = &pProcessInfo->Threads[DebugEvent.dwThreadId];
pThreadInfo->hThread = DebugEvent.u.CreateThread.hThread;
break;
case CREATE_PROCESS_DEBUG_EVENT: {
HANDLE hFile = DebugEvent.u.CreateProcessInfo.hFile;
char szImageName[MAX_PATH];
char *lpImageName = NULL;
if (hFile && GetFileNameFromHandle(hFile, szImageName, _countof(szImageName))) {
lpImageName = szImageName;
}
if (pOptions->verbose_flag) {
PCSTR lpModuleName = lpImageName ? getBaseName(lpImageName) : "";
lprintf("CREATE_PROCESS PID=%lu TID=%lu lpBaseOfImage=%p %s\r\n",
示例5: does
//.........这里部分代码省略.........
reports when the read operation is complete. */
ReadFile(info->child_out_r, pipe_buffer, sizeof(pipe_buffer), NULL, &overlap);
/* Loop until EOF or error. */
for (;;) {
DWORD n_r, n_w;
int i, n;
i = WaitForMultipleObjects(3, events, FALSE, INFINITE);
if (i == WAIT_OBJECT_0) {
/* Read from socket, write to process. */
char buffer[BUFSIZ];
int pending;
ResetEvent(events[0]);
do {
n = ncat_recv(&info->fdn, buffer, sizeof(buffer), &pending);
if (n <= 0)
goto loop_end;
n_r = n;
if (WriteFile(info->child_in_w, buffer, n_r, &n_w, NULL) == 0)
break;
if (n_w != n)
goto loop_end;
} while (pending);
} else if (i == WAIT_OBJECT_0 + 1) {
char *crlf = NULL, *wbuf;
/* Read from process, write to socket. */
if (GetOverlappedResult(info->child_out_r, &overlap, &n_r, FALSE)) {
wbuf = pipe_buffer;
if (o.crlf) {
n = n_r;
if (fix_line_endings((char *) pipe_buffer, &n, &crlf, &crlf_state))
wbuf = crlf;
n_r = n;
}
/* The above call to WSAEventSelect puts the socket in
non-blocking mode, but we want this send to block, not
potentially return WSAEWOULDBLOCK. We call block_socket, but
first we must clear out the select event. */
WSAEventSelect(info->fdn.fd, events[0], 0);
block_socket(info->fdn.fd);
n = ncat_send(&info->fdn, wbuf, n_r);
if (crlf != NULL)
free(crlf);
if (n != n_r)
break;
/* Restore the select event (and non-block the socket again.) */
WSAEventSelect(info->fdn.fd, events[0], FD_READ | FD_CLOSE);
/* Queue another asychronous read. */
ReadFile(info->child_out_r, pipe_buffer, sizeof(pipe_buffer), NULL, &overlap);
} else {
if (GetLastError() != ERROR_IO_PENDING)
/* Error or end of file. */
break;
}
} else if (i == WAIT_OBJECT_0 + 2) {
/* The child died. There are no more writes left in the pipe
because WaitForMultipleObjects guarantees events with lower
indexes are handled first. */
break;
} else {
break;
}
}
loop_end:
WSACloseEvent(events[0]);
rc = unregister_subprocess(info->proc);
ncat_assert(rc != -1);
GetExitCodeProcess(info->proc, &ret);
if (ret == STILL_ACTIVE) {
if (o.debug > 1)
logdebug("Subprocess still running, terminating it.\n");
rc = TerminateProcess(info->proc, 0);
if (rc == 0) {
if (o.debug > 1)
logdebug("TerminateProcess failed with code %d.\n", rc);
}
}
GetExitCodeProcess(info->proc, &ret);
if (o.debug > 1)
logdebug("Subprocess ended with exit code %d.\n", ret);
shutdown(info->fdn.fd, 2);
subprocess_info_close(info);
free(info);
rc = WaitForSingleObject(pseudo_sigchld_mutex, INFINITE);
ncat_assert(rc == WAIT_OBJECT_0);
if (pseudo_sigchld_handler != NULL)
pseudo_sigchld_handler();
rc = ReleaseMutex(pseudo_sigchld_mutex);
ncat_assert(rc != 0);
return ret;
}
示例6: cut_win32_kill_process
gboolean
cut_win32_kill_process (GPid pid, guint exit_code)
{
return TerminateProcess(pid, exit_code) ? TRUE : FALSE;
}
示例7: OSCriticalExit
void STDCALL OSCriticalExit()
{
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, 0, 0);
TerminateProcess(GetCurrentProcess(), INVALID);
}
示例8: process_terminate
int process_terminate(process_info_t *p) {
if (!TerminateProcess(p->process, 1))
return -1;
return 0;
}
示例9: WaitForChild
//.........这里部分代码省略.........
"Server crash frequency too high: stopping display";
Debug("%s %s\n", msg, d->name);
LogError("%s %s\n", msg, d->name);
#if !defined(HAVE_ARC4RANDOM) && !defined(DEV_RANDOM)
AddTimerEntropy();
#endif
/* For a local X server either:
* 1. The server exit was returned by waitpid(). So
* serverPid==-1 => StopDisplay() calls RemoveDisplay()
*
* 2. The server is in zombie state or still running. So
* serverPid>1 => StopDisplay()
* a. sets status=zombie,
* b. kills the server.
* The next waitpid() returns this zombie server pid
* and the 'case zombie:' below then calls
* RemoveDisplay().
*/
StopDisplay(d);
} else {
RestartDisplay(d, TRUE);
}
d->lastReserv = now;
}
break;
case waitCompose (SIGTERM,0,0):
Debug ("Display exited on SIGTERM, try %d of %d\n",
d->startTries, d->startAttempts);
if (d->displayType.origin == FromXDMCP ||
d->status == zombie ||
++d->startTries >= d->startAttempts)
{
/*
* During normal xdm shutdown, killed local X servers
* can be zombies; this is not an error.
*/
if (d->status == zombie &&
(d->startTries < d->startAttempts))
LogInfo ("display %s is being disabled\n", d->name);
else
LogError ("display %s is being disabled\n", d->name);
StopDisplay(d);
} else
RestartDisplay (d, TRUE);
break;
case REMANAGE_DISPLAY:
d->startTries = 0;
Debug ("Display exited with REMANAGE_DISPLAY\n");
/*
* XDMCP will restart the session if the display
* requests it
*/
if (d->displayType.origin == FromXDMCP || d->status == zombie)
StopDisplay(d);
else
RestartDisplay (d, FALSE);
break;
default:
Debug ("Display exited with unknown status %d\n", waitVal(status));
LogError ("Unknown session exit code %d from process %d\n",
waitVal (status), pid);
StopDisplay (d);
break;
}
}
/* SUPPRESS 560 */
else if ((d = FindDisplayByServerPid (pid)))
{
d->serverPid = -1;
switch (d->status)
{
case zombie:
Debug ("Zombie server reaped, removing display %s\n", d->name);
RemoveDisplay (d);
break;
case phoenix:
Debug ("Phoenix server arises, restarting display %s\n", d->name);
d->status = notRunning;
break;
case running:
Debug ("Server for display %s terminated unexpectedly, status %d %d\n", d->name, waitVal (status), status);
LogError ("Server for display %s terminated unexpectedly: %d\n", d->name, waitVal (status));
if (d->pid != -1)
{
Debug ("Terminating session pid %d\n", d->pid);
TerminateProcess (d->pid, SIGTERM);
}
break;
case notRunning:
Debug ("Server exited for notRunning session on display %s\n", d->name);
break;
}
}
else
{
Debug ("Unknown child termination, status %d\n", waitVal (status));
}
}
StartDisplays ();
}
示例10: ScreenSaverPageProc
INT_PTR CALLBACK
ScreenSaverPageProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PDATA pData;
pData = (PDATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
switch (uMsg)
{
case WM_INITDIALOG:
{
OnInitDialog(hwndDlg, pData);
break;
}
case WM_DESTROY:
{
if (pData->PrevWindowPi.hProcess)
{
TerminateProcess(pData->PrevWindowPi.hProcess, 0);
CloseHandle(pData->PrevWindowPi.hProcess);
CloseHandle(pData->PrevWindowPi.hThread);
}
HeapFree(GetProcessHeap(),
0,
pData);
break;
}
case WM_ENDSESSION:
{
SetScreenSaverPreviewBox(hwndDlg,
pData);
break;
}
case WM_COMMAND:
{
DWORD controlId = LOWORD(wParam);
DWORD command = HIWORD(wParam);
switch (controlId)
{
case IDC_SCREENS_LIST:
{
if (HIWORD(wParam) == CBN_SELCHANGE)
{
SelectionChanged(hwndDlg, pData);
SetScreenSaverPreviewBox(hwndDlg, pData);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
break;
}
case IDC_SCREENS_TIMEDELAY:
{
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
}
case IDC_SCREENS_POWER_BUTTON: // Start Powercfg.Cpl
{
if (command == BN_CLICKED)
WinExec("rundll32 shell32.dll,Control_RunDLL powercfg.cpl",SW_SHOWNORMAL);
break;
}
case IDC_SCREENS_TESTSC: // Screensaver Preview
{
if(command == BN_CLICKED)
{
ScreensaverPreview(hwndDlg, pData);
SetScreenSaverPreviewBox(hwndDlg, pData);
}
break;
}
case IDC_SCREENS_SETTINGS: // Screensaver Settings
{
if (command == BN_CLICKED)
ScreensaverConfig(hwndDlg, pData);
break;
}
case IDC_SCREENS_USEPASSCHK: // Screensaver Is Secure
{
if (command == BN_CLICKED)
{
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
}
break;
}
}
break;
}
case WM_NOTIFY:
//.........这里部分代码省略.........
示例11: KillRunningProcessesSlave
//.........这里部分代码省略.........
}
pe.dwSize = sizeof( PROCESSENTRY32 );
if(!Process32First( hSnapshot, &pe )) {
// technically we should at least find the MSI process, but we let this pass
rv = ERROR_SUCCESS;
goto _cleanup;
}
do {
for(i=0; i<nKpList; i++) {
if(!_tcsicmp( kpList[i].image, pe.szExeFile )) {
// got one
if(bKill) {
// try to kill the process
HANDLE hProcess = NULL;
// If we encounter an error, instead of bailing
// out, we continue on to the next process. We
// may not have permission to kill all the
// processes we want to kill anyway. If there are
// any files that we want to replace that is in
// use, Windows Installer will schedule a reboot.
// Also, it's not like we have an exhaustive list
// of all the programs that use Kerberos anyway.
hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pe.th32ProcessID);
if(hProcess == NULL) {
rv = GetLastError();
break;
}
if(!TerminateProcess(hProcess, 0)) {
rv = GetLastError();
CloseHandle(hProcess);
break;
}
CloseHandle(hProcess);
} else {
TCHAR buf[256];
// we are supposed to just list out the processes
rv = MsiRecordClearData( hRecordInsert ); RV_BAIL;
rv = MsiRecordSetString( hRecordInsert, 1, _T("KillableProcesses"));
rv = MsiRecordSetInteger( hRecordInsert, 2, rowNum++ ); RV_BAIL;
_itot( rowNum, buf, 10 );
rv = MsiRecordSetString( hRecordInsert, 3, buf ); RV_BAIL;
if(_tcslen(kpList[i].desc)) {
rv = MsiRecordSetString( hRecordInsert, 4, kpList[i].desc ); RV_BAIL;
} else {
rv = MsiRecordSetString( hRecordInsert, 4, kpList[i].image ); RV_BAIL;
}
MsiViewModify(hViewInsert, MSIMODIFY_INSERT_TEMPORARY, hRecordInsert); RV_BAIL;
found = TRUE;
}
break;
}
}
} while( Process32Next( hSnapshot, &pe ) );
if(!bKill) {
// set the 'FoundProcceses' property
示例12: _T
/*-----------------------------------------------------------------------------
Close any dialog windows that may be open
-----------------------------------------------------------------------------*/
void CurlBlastDlg::CloseDialogs(void)
{
TCHAR szTitle[1025];
// make sure wptdriver isn't doing a software install
bool installing = false;
HWND hWptDriver = ::FindWindow(_T("wptdriver_wnd"), NULL);
if (hWptDriver) {
if (::GetWindowText(hWptDriver, szTitle, _countof(szTitle))) {
CString title = szTitle;
title.MakeLower();
if (title.Find(_T(" software")) >= 0)
installing = true;
}
}
// if there are any explorer windows open, disable this code (for local debugging and other work)
if( !installing && !::FindWindow(_T("CabinetWClass"), NULL ) )
{
HWND hDesktop = ::GetDesktopWindow();
HWND hWnd = ::GetWindow(hDesktop, GW_CHILD);
TCHAR szClass[100];
CArray<HWND> hDlg;
const TCHAR * szKeepOpen[] = {
_T("urlblast")
, _T("url blast")
, _T("task manager")
, _T("aol pagetest")
, _T("choose file")
, _T("network delay simulator")
, _T("shut down windows")
, _T("vmware")
, _T("security essentials")
};
// build a list of dialogs to close
while(hWnd)
{
if(hWnd != m_hWnd)
{
if(::IsWindowVisible(hWnd))
if(::GetClassName(hWnd, szClass, 100))
if((!lstrcmp(szClass,_T("#32770"))||!lstrcmp(szClass,_T("Internet Explorer_Server")))) // check window title for all classes
{
bool bKill = true;
// make sure it is not in our list of windows to keep
if(::GetWindowText( hWnd, szTitle, 1024))
{
log.Trace(_T("Killing Dialog: %s"), szTitle);
_tcslwr_s(szTitle, _countof(szTitle));
for(int i = 0; i < _countof(szKeepOpen) && bKill; i++)
{
if(_tcsstr(szTitle, szKeepOpen[i]))
bKill = false;
}
// do we have to terminate the process that owns it?
if( !lstrcmp(szTitle, _T("server busy")) )
{
log.Trace(_T("Terminating process"));
DWORD pid;
GetWindowThreadProcessId(hWnd, &pid);
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
if( hProcess )
{
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
}
}
}
if(bKill)
hDlg.Add(hWnd);
}
}
hWnd = ::GetWindow(hWnd, GW_HWNDNEXT);
}
// close all of the dialogs
for(int i = 0; i < hDlg.GetSize(); i++)
{
//see if there is an OK button
HWND hOk = ::FindWindowEx(hDlg[i], 0, 0, _T("OK"));
if( hOk )
{
int id = ::GetDlgCtrlID(hOk);
if( !id )
id = IDOK;
::PostMessage(hDlg[i],WM_COMMAND,id,0);
}
else
::PostMessage(hDlg[i],WM_CLOSE,0,0);
}
}
//.........这里部分代码省略.........
示例13: uv_spawn
//.........这里部分代码省略.........
/* Create the child in a suspended state so we have a chance to set
its process affinity before it runs. */
process_flags |= CREATE_SUSPENDED;
}
if (!CreateProcessW(application_path,
arguments,
NULL,
NULL,
1,
process_flags,
env,
cwd,
&startup,
&info)) {
/* CreateProcessW failed. */
err = GetLastError();
goto done;
}
if (options->cpumask != NULL) {
/* The child is currently suspended. Set its process affinity
or terminate it if we can't. */
int i;
int cpumasksize;
DWORD_PTR sysmask;
DWORD_PTR oldmask;
DWORD_PTR newmask;
cpumasksize = uv_cpumask_size();
if (!GetProcessAffinityMask(info.hProcess, &oldmask, &sysmask)) {
err = GetLastError();
TerminateProcess(info.hProcess, 1);
goto done;
}
newmask = 0;
for (i = 0; i < cpumasksize; i++) {
if (options->cpumask[i]) {
if (oldmask & (((DWORD_PTR)1) << i)) {
newmask |= ((DWORD_PTR)1) << i;
} else {
err = UV_EINVAL;
TerminateProcess(info.hProcess, 1);
goto done;
}
}
}
if (!SetProcessAffinityMask(info.hProcess, newmask)) {
err = GetLastError();
TerminateProcess(info.hProcess, 1);
goto done;
}
/* The process affinity of the child is set. Let it run. */
if (ResumeThread(info.hThread) == ((DWORD)-1)) {
err = GetLastError();
TerminateProcess(info.hProcess, 1);
goto done;
}
}
/* Spawn succeeded */
/* Beyond this point, failure is reported asynchronously. */
示例14: restartDwmComposition
// Force DWM process to recreate all its Direct3D objects.
static void
restartDwmComposition(HANDLE hProcess)
{
HRESULT hr;
HMODULE hModule = LoadLibraryA("dwmapi");
assert(hModule);
if (!hModule) {
return;
}
typedef HRESULT (WINAPI *PFNDWMISCOMPOSITIONENABLED)(BOOL *pfEnabled);
PFNDWMISCOMPOSITIONENABLED pfnDwmIsCompositionEnabled = (PFNDWMISCOMPOSITIONENABLED)GetProcAddress(hModule, "DwmIsCompositionEnabled");
assert(pfnDwmIsCompositionEnabled);
if (!pfnDwmIsCompositionEnabled) {
return;
}
typedef HRESULT (WINAPI *PFNDWMENABLECOMPOSITION)(UINT uCompositionAction);
PFNDWMENABLECOMPOSITION pfnDwmEnableComposition = (PFNDWMENABLECOMPOSITION)GetProcAddress(hModule, "DwmEnableComposition");
assert(pfnDwmEnableComposition);
if (!pfnDwmEnableComposition) {
return;
}
BOOL bIsWindows8OrGreater = IsWindows8OrGreater();
if (bIsWindows8OrGreater) {
// Windows 8 ignores DwmEnableComposition(DWM_EC_DISABLECOMPOSITION).
// It is however possible to force DWM to restart by restarting the
// display device via the devcon utility
devconEnable(DEVCON_CLASS_DISPLAY);
} else {
BOOL fEnabled = FALSE;
hr = pfnDwmIsCompositionEnabled(&fEnabled);
if (FAILED(hr) || !fEnabled) {
return;
}
fprintf(stderr, "info: restarting DWM composition\n");
hr = pfnDwmEnableComposition(DWM_EC_DISABLECOMPOSITION);
assert(SUCCEEDED(hr));
if (FAILED(hr)) {
return;
}
Sleep(1000/30);
hr = pfnDwmEnableComposition(DWM_EC_ENABLECOMPOSITION);
assert(SUCCEEDED(hr));
(void)hr;
}
fprintf(stderr, "Press any key when finished tracing\n");
getchar();
DWORD dwExitCode;
if (GetExitCodeProcess(hProcess, &dwExitCode) &&
dwExitCode != STILL_ACTIVE) {
// DWM process has already terminated
return;
}
fprintf(stderr, "info: restarting DWM process\n");
if (bIsWindows8OrGreater) {
// From Windows 8 onwards DWM no longer runs as a service. We just
// kill it and winlogon parent process will respawn it.
if (!TerminateProcess(hProcess, 0)) {
logLastError("failed to terminate DWM process");
}
} else {
hr = pfnDwmEnableComposition(DWM_EC_DISABLECOMPOSITION);
assert(SUCCEEDED(hr));
restartService("uxsms");
}
}
示例15: work_over_actions
int work_over_actions(struct _config *cfg, char *path, char *strings[3])
{
int i = 0, enable = TRUE, searchfor = 0, action = 0;
struct process_record *pr = NULL;
char buf[BUFSIZE];
if (strings[0])
ses_read_i(&cfg->sessionroot, path, strings[0], 0, &enable);
if (!enable)
return 0;
if (!ses_read_i(&cfg->sessionroot, path, strings[1], 0, &searchfor))
return 0;
pr = get_nth_process_record(process_records, nprocesses, path, searchfor);
i = 0; action = 0;
sprintf(buf, strings[2], i);
while (ses_read_i(&cfg->sessionroot, path, buf, 0, &action)) {
switch (action) {
case SESSION_ACTION_HIDE:
if (pr && pr->window)
ShowWindow(pr->window, SW_HIDE);
break;
case SESSION_ACTION_SHOW:
if (pr && pr->window) {
ShowWindow(pr->window, /*SW_SHOWNORMAL*/ SW_SHOW);
SetForegroundWindow(pr->window);
};
break;
case SESSION_ACTION_MINIMIZE:
if (pr && pr->window)
ShowWindow(pr->window, SW_MINIMIZE);
break;
case SESSION_ACTION_MAXIMIZE:
if (pr && pr->window)
ShowWindow(pr->window, SW_MAXIMIZE);
break;
case SESSION_ACTION_CENTER:
if (pr && pr->window)
center_window(pr->window);
break;
case SESSION_ACTION_KILL:
if (pr && pr->window)
SendMessage(pr->window, WM_CLOSE, 0, 0);
break;
case SESSION_ACTION_MURDER:
if (pr)
TerminateProcess(pr->hprocess, 0);
break;
case SESSION_ACTION_RUN:
launch_putty(0, path);
break;
};
i++;
sprintf(buf, strings[2], i);
};
return i;
};