检查本功能是否在Excel中运行

 1 BOOL g_bParentIsNotEXCEL_EXE = FALSE;
 2 BOOL isNotEXCEL_EXE( DWORD dwProcessID )
 3 {
 4   HANDLE hProcessSnap;
 5   PROCESSENTRY32 pe32;
 6 
 7   // Take a snapshot of all processes in the system.
 8   hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
 9   if( hProcessSnap == INVALID_HANDLE_VALUE )
10   {
11     return( FALSE );
12   }
13 
14   // Set the size of the structure before using it.
15   pe32.dwSize = sizeof( PROCESSENTRY32 );
16 
17   // Retrieve information about the first process, and exit if unsuccessful
18   if( !Process32First( hProcessSnap, &pe32 ) )
19   {    
20     CloseHandle( hProcessSnap );    // Must clean up the  snapshot object!
21     return( FALSE );
22   }
23 
24   // Now walk the snapshot of processes, and display information about each process in turn
25   do
26   {
27 
28     if( pe32.th32ProcessID == dwProcessID )
29     {
30         CString strExeFile = pe32.szExeFile;    
31         //AfxMessageBox( strExeFile);
32         strExeFile.MakeUpper();
33         if( strExeFile != _T("EXCEL.EXE") && strExeFile != _T("MATLAB.EXE"))
34         {
35             CloseHandle( hProcessSnap );    // Must clean up the  snapshot object!
36             return TRUE;            
37         }
38         break;
39     }    
40   } while( Process32Next( hProcessSnap, &pe32 ) );
41   CloseHandle( hProcessSnap );    // Must clean up the  snapshot object!
42   return FALSE;
43 }
 1     HMODULE hModule = LoadLibrary(L"NTdll.dll");
 2     if (hModule)
 3     {        
 4         NTSTATUS (__stdcall *NtQueryInformationProcess) (
 5                 IN HANDLE ProcessHandle,
 6                 IN PROCESSINFOCLASS ProcessInformationClass,
 7                 OUT PVOID ProcessInformation,
 8                 IN ULONG ProcessInformationLength,
 9                 OUT PULONG ReturnLength OPTIONAL
10         );
11           
12         (FARPROC &)NtQueryInformationProcess = GetProcAddress(hModule, "NtQueryInformationProcess");
13         if (NtQueryInformationProcess)
14         {
15             DWORD dwProcessID = GetCurrentProcessId();         
16                 
17             HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwProcessID);
18             if( NULL != hProcess )    
19             {
20                 LONG status;
21                 PROCESS_BASIC_INFORMATION pbi;
22                 status = NtQueryInformationProcess( hProcess,ProcessBasicInformation,(PVOID)&pbi,sizeof(PROCESS_BASIC_INFORMATION),NULL );
23                 if (!status)
24                 {                
25                     g_bParentIsNotEXCEL_EXE = isNotEXCEL_EXE( ( DWORD )pbi.Reserved3 );
26                 }
27             }            
28         }
29     }
原文地址:https://www.cnblogs.com/spriteflk/p/4709996.html