如何让一个程序在运行1分钟后自动关闭

想让一个xx.exe的软件,在每次点击运行后一定一时间比如1分钟后自动关闭该程序,应该怎么弄.最好是帮我写个批处理,简单些.

#include <windows.h>
#ifdef NOCONSOLE
#pragma comment(linker, "/SUBSYSTEM:windows")
#pragma comment(lib, "user32.lib")
#else
#pragma comment(linker, "/SUBSYSTEM:console")
#endif
#pragma comment(linker, "/ENTRY:entry /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:msvcrtd.lib")
#pragma comment(lib, "kernel32.lib")
#undef RtlZeroMemory
#ifndef DEFINED_WAIT_TIME
#define DEFINED_WAIT_TIME 60000
#endif
void WINAPI RtlZeroMemory(LPVOID pMem, DWORD nLen);
int entry()
{
    int nExitCode;
    LPWSTR szCmd;
    int nSzCmdStartIndex;
    STARTUPINFOW si;
    PROCESS_INFORMATION pi;
    WCHAR errMsg[] = L"Can't create process.";
    
    szCmd = GetCommandLineW();
    nSzCmdStartIndex = 0;
    
    if (*szCmd == L'"') {
        nSzCmdStartIndex = 1;
        while(szCmd[nSzCmdStartIndex] != L'"')
            ++nSzCmdStartIndex;
        ++nSzCmdStartIndex;
    }
    
    while(szCmd[nSzCmdStartIndex] != L' ' && szCmd[nSzCmdStartIndex] != 0)
        ++nSzCmdStartIndex;
    
    
    if (szCmd[nSzCmdStartIndex] == 0)
        return 1;
    else {
        while(szCmd[nSzCmdStartIndex] == L' ' && szCmd[nSzCmdStartIndex] != 0)
            ++nSzCmdStartIndex;
        if (szCmd[nSzCmdStartIndex] == 0)
            return 1;
    }
    
    
    RtlZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    
    if (CreateProcessW(NULL, &szCmd[nSzCmdStartIndex], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) != FALSE)
    {
        CloseHandle(pi.hThread);
        WaitForSingleObject(pi.hProcess, DEFINED_WAIT_TIME);
        TerminateProcess(pi.hProcess, 1);
        CloseHandle(pi.hProcess);
        return 0;
    }
    else
    {
        DWORD nErrCode = GetLastError();
        LPWSTR pszMsg;
#ifndef NOCONSOLE
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
#endif
        int nErrMsg;
        int nWritten;
        if ((nErrMsg = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, nErrCode, LANG_SYSTEM_DEFAULT, (LPWSTR)&pszMsg, 0, NULL)) != 0)
#ifdef NOCONSOLE
            MessageBoxW(NULL, pszMsg, L"Error!", MB_OK | MB_ICONERROR);
#else
            WriteConsoleW(hStdout, pszMsg, nErrMsg, &nWritten, NULL);
#endif
        else {
#ifdef NOCONSOLE
            MessageBoxW(NULL, errMsg, L"Error!", MB_OK | MB_ICONERROR);
#else
            nErrMsg = sizeof(errMsg) / sizeof(*errMsg);
            WriteConsoleW(hStdout, errMsg, nErrMsg, &nWritten, NULL);
#endif
        }
        
        return 1;
    }
}

批处理不会写这么高级的。就弄个C语言写的。

有控制台的版本和没有控制台的版本都有。

 

参数就是你要运行的程序的命令行

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-10
需要编写一个程序,从系统那里得到正在运行的程序链表,逐一比较要操作的进程并找到后进行计时,到时间后向那个窗口发送结束运行的消息即可。这个程序因为会用到windows的一些系统资源,简单的批处理不容易办到,最好还是用c来写方便些。
第2个回答  2013-09-09
#include <stdio.h>
int main(){
printf("sleep 60 seconds\n");

sleep(60);

printf("ok\n");

return 0;

}
这个程序就是每次点击后一分钟就会关闭追问

你没明白我的意思.我是想找个批处理,比如让暴风影音每次运行一分钟后就自动关闭.

相似回答