Pergunta

Existe uma API em C que eu posso usar para verificar se a indexação de arquivos está ligado ou desligado? Código é apreciado.

Foi útil?

Solução

WMI é uma dor no C ++, mas o Serviço API nativa é muito limpo.

SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if(hSCManager)
{
    SC_HANDLE hService = OpenService(hSCManager, _T("ServiceNameGoesHere"), SERVICE_QUERY_STATUS);
    if(hService)
    {
        // service is installed
        SERVICE_STATUS ServiceStatus;
        if(ServiceQueryStatus(hService, &ServiceStatus))
        {
            // service is running
            // get current state from ServiceStatus.dwCurrentState
        }
        else if(GetLastError() == ERROR_SERVICE_NOT_ACTIVE)
        {
            // service is not running
        }
        else
        {
            // error
        }
        CloseServiceHandle(hService);
        hService = NULL;
    }
    else if(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST)
    {
        // service is not installed
    }
    else
    {
        // error
    }
    CloseServiceHandle(hSCManager);
    hSCManager = NULL;
}
else
{
    // error
}

Outras dicas

WMI pode proporcionar isso, use a classe Win32_Service. Fazer isso em 'C' é fugly, o SDK fornece apenas amostras C ++ . Este é o código equivalente C #:

using System;
using System.Management;   // Add reference!!

class Program {
    public static void Main() {
        var searcher = new ManagementObjectSearcher("root\\CIMV2",
            "SELECT * FROM Win32_Service WHERE Name='wsearch'");

        foreach (ManagementObject queryObj in searcher.Get()) {
            Console.WriteLine("State = {0}", queryObj["State"]);
        }
        Console.ReadLine();
    }
}

Para ser pedante, a linguagem de programação C não tem qualquer conhecimento de indexação de arquivos do Windows ou para que o assunto outras características específicas de plataforma. Os ISO C especifica padrão um rigoroso conjunto de API como para tratamento de string, manipulação de arquivo (abrir, fechar, etc.), etc. operações aritméticas e especifica e define o primitivo agem em cima. Estas operações são agnósticos da plataforma subjacente. Todos estes API são definidos muito estritamente pela especificação da linguagem em si (ver norma ISO C99 para uma referência atual).

Você teria que contar com uma biblioteca externa (para o idioma) para obter a API que você desejar (API para descobrir se a indexação de arquivos está ligado ou desligado). Então, o que você quer descobrir é a) o que esta biblioteca é b) o API para o uso desta biblioteca para chamar de seu programa C e c) como vincular esta biblioteca para a sua aplicação, entre outras coisas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top