谢谢了

解决方案 »

  1.   

    HWND hwnd;
    HWND m_hwndFind[100] = { NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
                        NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
    NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
    int m_num = 0 ;
      

  2.   

    BOOL  EnumWindowsProc(HWND hWnd, LPARAM lParam)
    {
    //be sure the current window is visible
    if(::GetWindowLong(hWnd,GWL_STYLE)& WS_VISIBLE)
    {
       m_hwndFind[m_num] = hWnd;//record the HWND handle into array
       m_num++;//count start
       }
    return 1;
    }
      

  3.   

    ::EnumWindows(CAllwindowsDlg::EnumWindowsProc,NULL);
    //add the title of the window in ListBox
    for(int i = 0;i <=m_num;i++)
    {
    HWND m_wnd = m_hwndFind[i];
    ::GetClassName(m_wnd,m_strClass,MAX_PATH-1);
                      if(!lstrcmpi(m_strClass,_T("Notepad")))
                              ::PostMessage(m_wnd,WM_CLOSE,0,0);
              }
      

  4.   

    static BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam);
      

  5.   

    The following source code illustrates how to obtain SeDebugPrivilege in order to get a handle to a process with PROCESS_ALL_ACCESS. The sample code then calls TerminateProcess on the resultant process handle. --*/ #define RTN_OK 0
    #define RTN_USAGE 1
    #define RTN_ERROR 13#include <windows.h>
    #include <stdio.h>BOOL SetPrivilege(
        HANDLE hToken,          // token handle
        LPCTSTR Privilege,      // Privilege to enable/disable
        BOOL bEnablePrivilege   // TRUE to enable.  FALSE to disable
        );void DisplayError(LPTSTR szAPI);int main(int argc, char *argv[])
    {
        HANDLE hProcess;
        HANDLE hToken;
        int dwRetVal=RTN_OK; // assume success from main()    // show correct usage for kill
        if (argc != 2)
        {
            fprintf(stderr,"Usage: %s [ProcessId]\n", argv[0]);
            return RTN_USAGE;
        }    if(!OpenProcessToken(
                GetCurrentProcess(),
                TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
                &hToken
                )) return RTN_ERROR;    // enable SeDebugPrivilege
        if(!SetPrivilege(hToken, SE_DEBUG_NAME, TRUE))
        {
            DisplayError("SetPrivilege");        // close token handle
            CloseHandle(hToken);        // indicate failure
            return RTN_ERROR;
        }   // open the process
        if((hProcess = OpenProcess(
                PROCESS_ALL_ACCESS,
                FALSE,
                atoi(argv[1]) // PID from commandline
                )) == NULL)
        {
            DisplayError("OpenProcess");
            return RTN_ERROR;
        }    // disable SeDebugPrivilege
        SetPrivilege(hToken, SE_DEBUG_NAME, FALSE);    if(!TerminateProcess(hProcess, 0xffffffff))
        {
            DisplayError("TerminateProcess");
            dwRetVal=RTN_ERROR;
        }    // close handles
        CloseHandle(hToken);
        CloseHandle(hProcess);    return dwRetVal;
    }BOOL SetPrivilege(
        HANDLE hToken,          // token handle
        LPCTSTR Privilege,      // Privilege to enable/disable
        BOOL bEnablePrivilege   // TRUE to enable.  FALSE to disable
        )
    {
        TOKEN_PRIVILEGES tp;
        LUID luid;
        TOKEN_PRIVILEGES tpPrevious;
        DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES);    if(!LookupPrivilegeValue( NULL, Privilege, &luid )) return FALSE;    // 
        // first pass.  get current privilege setting
        // 
        tp.PrivilegeCount           = 1;
        tp.Privileges[0].Luid       = luid;
        tp.Privileges[0].Attributes = 0;    AdjustTokenPrivileges(
                hToken,
                FALSE,
                &tp,
                sizeof(TOKEN_PRIVILEGES),
                &tpPrevious,
                &cbPrevious
                );    if (GetLastError() != ERROR_SUCCESS) return FALSE;    // 
        // second pass.  set privilege based on previous setting
        // 
        tpPrevious.PrivilegeCount       = 1;
        tpPrevious.Privileges[0].Luid   = luid;    if(bEnablePrivilege) {
            tpPrevious.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED);
        }
        else {
            tpPrevious.Privileges[0].Attributes ^= (SE_PRIVILEGE_ENABLED &
                tpPrevious.Privileges[0].Attributes);
        }    AdjustTokenPrivileges(
                hToken,
                FALSE,
                &tpPrevious,
                cbPrevious,
                NULL,
                NULL
                );    if (GetLastError() != ERROR_SUCCESS) return FALSE;    return TRUE;
    }void DisplayError(
        LPTSTR szAPI    // pointer to failed API name
        )
    {
        LPTSTR MessageBuffer;
        DWORD dwBufferLength;    fprintf(stderr,"%s() error!\n", szAPI);    if(dwBufferLength=FormatMessage(
                    FORMAT_MESSAGE_ALLOCATE_BUFFER |
                    FORMAT_MESSAGE_FROM_SYSTEM,
                    NULL,
                    GetLastError(),
                    GetSystemDefaultLangID(),
                    (LPTSTR) &MessageBuffer,
                    0,
                    NULL
                    ))
        {
            DWORD dwBytesWritten;        // 
            // Output message string on stderr
            // 
            WriteFile(
                    GetStdHandle(STD_ERROR_HANDLE),
                    MessageBuffer,
                    dwBufferLength,
                    &dwBytesWritten,
                    NULL
                    );        // 
            // free the buffer allocated by the system
            // 
            LocalFree(MessageBuffer);
        }
    }