CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [WinAPI] Szukam rozwiązania do monitorwania temp. CPU

[WinAPI] Szukam rozwiązania do monitorwania temp. CPU

problemy z funkcjonowaniem bibliotek, komponentów itp.

[WinAPI] Szukam rozwiązania do monitorwania temp. CPU

Nowy postprzez GoldWolf » poniedziałek, 6 czerwca 2011, 14:34

Witam, bo sporej przerwie, poszukuję biblioteki czy ogólnie czegoś, co mógłbym wykorzystać. Szukam czegoś uniwersalnego nie zależnego od używanego środowiska programistycznego. Macie jakiś pomysł?
Dokładnie chcę wiedzieć jaka jest temp. procka.
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    Windows 7Firefox

Re: [WinAPI] Szukam rozwiązania do monitorwania temp. CPU

Nowy postprzez GoldWolf » wtorek, 7 czerwca 2011, 10:22

Trafiłem na takie rozwiązanie, nie wiem czy dotyczy tylko VC, ale próbowałem je trochę przerobić zgodnie z tym co znalazłem w sieci.
KOD cpp:     UKRYJ  
//bazuje na tym - http://msdn.microsoft.com/en-us/library ... 85%29.aspx
//
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <wbemidl.h>
#include <windows.h>
#include <Winuser.h>
#include <comdef.h>
# pragma comment(lib, "wbemuuid.lib")

#include <conio.h>

int main(){


        CoInitialize(NULL);
if (CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT,
    RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0) != S_OK)
    return 0;

IWbemLocator* pIWbemLocator = NULL;
IWbemServices* pWbemServices = NULL;
IEnumWbemClassObject* pEnumObject = NULL;

//BSTR bstrNamespace = (L"root\\cimv2");
BSTR bstrNamespace = (L"root\\WMI");

if (CoCreateInstance (
    CLSID_WbemAdministrativeLocator,
    NULL ,
    CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER ,
    IID_IUnknown ,
    ( void ** ) & pIWbemLocator) != S_OK)
    return 0;

if (pIWbemLocator->ConnectServer(bstrNamespace, NULL, NULL, NULL, 0,
    NULL, NULL,&pWbemServices) != S_OK)
    return 0;

HRESULT hRes;

//BSTR strQuery = (L"Select * from win32_Processor");
BSTR strQuery = (L"Select * from MSAcpi_ThermalZoneTemperature");
BSTR strQL = (L"WQL");
hRes = pWbemServices->ExecQuery(strQL, strQuery,
WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumObject);
if (hRes != S_OK)
   {
    MessageBox(0, "Could not execute Query", 0, 0);
    return 0;
}

hRes = pEnumObject->Reset();
if (hRes != S_OK)
{
    MessageBox(0, "Could not Enumerate", 0, 0);
    return 0;
}

ULONG uCount = 1, uReturned;
IWbemClassObject* pClassObject = NULL;
hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned);
if(hRes != S_OK)
{
    MessageBox(0, "Could not Enumerate - 123", 0, 0);
    return 0;
}

VARIANT v;
BSTR strClassProp = SysAllocString(L"CurrentTemperature");
hRes = pClassObject->Get(strClassProp, 0, &v, 0, 0);
if (hRes != S_OK)
{
    MessageBox(0, "Could not Get Value", 0, 0);
    return 0;
}
//BSTR Bstr = &v;
SysFreeString(strClassProp);
_bstr_t bstrPath = &v; //Just to convert BSTR to ANSI
//_bstr_t bstrPath(Bstr);
char* strPath=(char*)bstrPath;

if (SUCCEEDED(hRes))
    MessageBoxA(NULL, strPath, 0, 0);
else
    MessageBoxA(NULL,"Error in getting object", 0, 0);

VariantClear(&v);
pIWbemLocator->Release();
pWbemServices->Release();
pEnumObject->Release();
pClassObject->Release();
CoUninitialize();


        getch();
        return 0;
}


Tutaj jest chyba podpowiedź, ale nie rozkminiłem jej jeszcze - http://www.eggheadcafe.com/microsoft/Wi ... g-wmi.aspx

Problem może polega na tym, że mam procesor wiele rdzeniowy i to będą 3 różne odczyty, ogólny i dla poszczególnego rdzenia.

Znalazłem jeszcze coś takiego:
KOD cpp:     UKRYJ  
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>

# pragma comment(lib, "wbemuuid.lib")

int main(int argc, char **argv)
{
    CoInitializeEx(0, COINIT_MULTITHREADED);    // Initialize COM
    try  
    {
        HRESULT hres;

                hres =  CoInitializeSecurity(NULL, -1,NULL,NULL,RPC_C_AUTHN_LEVEL_DEFAULT,
                        RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE,NULL);    
                if (FAILED(hres))
                {
                        cout << "Failed to initialize security. Error code = 0x"
                                << hex << hres << endl;
                        CoUninitialize();
                        return 1;                    // Program has failed.
                }

                IWbemLocator *pLoc = NULL;
                hres = CoCreateInstance(CLSID_WbemLocator,0,CLSCTX_INPROC_SERVER,IID_IWbemLocator, (LPVOID *) &pLoc);
         
                if (FAILED(hres))
                {
                        cout << "Failed to create IWbemLocator object."
                                << " Err code = 0x"
                                << hex << hres << endl;
                        CoUninitialize();
                        return 1;                 // Program has failed.
                }

                IWbemServices *pSvc = NULL;
               
                // Connect to the root\WMI namespace with
                // the current user and obtain pointer pSvc
                // to make IWbemServices calls.
                hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\WMI"),NULL,NULL,0,NULL,0,0,&pSvc);
                if (FAILED(hres))
                {
                        cout << "Could not connect. Error code = 0x"
                                 << hex << hres << endl;
                        pLoc->Release();    
                        CoUninitialize();
                        return 1;                // Program has failed.
                }

                hres = CoSetProxyBlanket(pSvc,RPC_C_AUTHN_WINNT,RPC_C_AUTHZ_NONE,NULL,
                        RPC_C_AUTHN_LEVEL_CALL,RPC_C_IMP_LEVEL_IMPERSONATE,NULL,EOAC_NONE);

                if (FAILED(hres))
                {
                        cout << "Could not set proxy blanket. Error code = 0x"
                                << hex << hres << endl;
                        pSvc->Release();
                        pLoc->Release();    
                        CoUninitialize();
                        return 1;               // Program has failed.
                }

                IEnumWbemClassObject* pEnumerator = NULL;

                hres = pSvc->ExecQuery(bstr_t("WQL"),bstr_t("SELECT * FROM MSAcpi_ThermalZoneTemperature"),
                        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);

                if (FAILED(hres))
                {
                        cout << "Query for operating system name failed."
                                << " Error code = 0x"
                                << hex << hres << endl;
                        pSvc->Release();
                        pLoc->Release();
                        CoUninitialize();
                        return 1;               // Program has failed.
                }

                IWbemClassObject *pclsObj;
                ULONG uReturn = 0;
                SAFEARRAY *allNames;
                while (pEnumerator)
                {
                        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);                  
                        if(0 == uReturn)
                        {
                                break;
                        }
                        /*pclsObj->GetNames(NULL,0,NULL,&allNames);
                        for (LONG a = allNames->rgsabound[0].lLbound; a < allNames->rgsabound[0].lLbound + allNames->rgsabound[0].cElements; a++)
                        {    
                                BSTR            name;  
                                hres = SafeArrayGetElement(allNames, &a, &name);  
                                wcout << name << endl;
                        }*/

                        VARIANT vtProp;
                        VariantInit(&vtProp);

                        hr = pclsObj->Get(L"CurrentTemperature", 0, &vtProp, 0, 0);
                        wcout << "Current CPU Temperature : " << (vtProp.intVal - 2732)/10.0 << endl;
                       
                        VariantClear(&vtProp);
                        pclsObj->Release();
                }

                // Cleanup
                // ========
           
                pSvc->Release();
                pLoc->Release();
                pEnumerator->Release();
                /*pclsObj->Release();*/
    }
    // In case there was an error, print it out...
    catch (_com_error err)
    {
        printf("Error occurred: %S",err.ErrorMessage());
    }
    CoUninitialize();
    return 0;
}


Jednak też nie trybi, znaczy nie wiem jak poprawić.
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    Windows 7Firefox

Re: [WinAPI] Szukam rozwiązania do monitorwania temp. CPU

Nowy postprzez GoldWolf » wtorek, 7 czerwca 2011, 13:34

Dobra to już to rozkminiłem.

Dobra już skumałem o co chodzi przesyłam poprawny kod, już był wysyłany, ale tak dla podsumowania dam co i jak.
KOD c:     UKRYJ  
//bazuje na tym - http://msdn.microsoft.com/en-us/library ... 85%29.aspx
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <wbemidl.h>
#include <windows.h>
#include <Winuser.h>
#include <comdef.h>
# pragma comment(lib, "wbemuuid.lib")

#include <conio.h>

int main(){


        CoInitialize(NULL);
if (CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT,
    RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0) != S_OK)
    return 0;

IWbemLocator* pIWbemLocator = NULL;
IWbemServices* pWbemServices = NULL;
IEnumWbemClassObject* pEnumObject = NULL;

BSTR bstrNamespace = (L"root\\cimv2");
//BSTR bstrNamespace = (L"root\\WMI");

if (CoCreateInstance (
    CLSID_WbemAdministrativeLocator,
    NULL ,
    CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER ,
    IID_IUnknown ,
    ( void ** ) & pIWbemLocator) != S_OK)
    return 0;

if (pIWbemLocator->ConnectServer(bstrNamespace, NULL, NULL, NULL, 0,
    NULL, NULL,&pWbemServices) != S_OK)
    return 0;

HRESULT hRes;

//BSTR strQuery = (L"Select * from win32_Processor");
//BSTR strQuery = (L"SELECT * FROM MSAcpi_ThermalZoneTemperature");
BSTR strQuery = (L"Select * from Win32_TemperatureProbe");
BSTR strQL = (L"WQL");
hRes = pWbemServices->ExecQuery(strQL, strQuery,
WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumObject);
if (hRes != S_OK)
   {
    MessageBox(0, "Could not execute Query", 0, 0);
    return 0;
}

hRes = pEnumObject->Reset();
if (hRes != S_OK)
{
    MessageBox(0, "Could not Enumerate", 0, 0);
    return 0;
}

ULONG uCount = 1, uReturned;
IWbemClassObject* pClassObject = NULL;
hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned);
if(hRes != S_OK)
{
    MessageBox(0, "Could not Enumerate - Brak sensora chyba <img style="vertical-align: middle;" src="./images/smilies/icon_e_wink.gif" alt=";-)" title="Mruga" />", 0, 0);
    return 0;
}

VARIANT v;
BSTR strClassProp = SysAllocString(L"Resolution"); //Trzecia LINIJKA
hRes = pClassObject->Get(strClassProp, 0, &v, 0, 0);
if (hRes != S_OK)
{
    MessageBox(0, "Could not Get Value", 0, 0);
    return 0;
}

SysFreeString(strClassProp);
_bstr_t bstrPath = &v; //Just to convert BSTR to ANSI

char* strPath=(char*)bstrPath;

if (SUCCEEDED(hRes))
    MessageBoxA(NULL, strPath, 0, 0);
else
    MessageBoxA(NULL,"Error in getting object", 0, 0);

VariantClear(&v);
pIWbemLocator->Release();
pWbemServices->Release();
pEnumObject->Release();
pClassObject->Release();
CoUninitialize();


        getch();
        return 0;
}


I interesują nas tylko 3 linijki w tym kodzie.

Pierwsza to - BSTR bstrNamespace = (L"root\\cimv2");

Gdy wchodzimy na stronę - http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Na samym dole jest tabelka i pisze nam jaka jest przestrzeń nazw, w tym wypadku - Namespace \root\cimv2 - mam nadzieje, że kumiecie.

Druga to z czego będziemy korzystać jak z Win32_TemperatureProbe, czyli interesuje nas część kodu:
BSTR strQuery = (L"Select * from Win32_TemperatureProbe"); - chyba jasne jak słońce

Ostatnia linijka to z jakiej własności (metody) tej klasy skorzystamy ja z - CurrentReading:
BSTR strClassProp = SysAllocString(L"CurrentReading");

W ten sposób możecie wykorzystać wszystkie (lub większość) tego co oferuje WMI class.

Mogą też pojawić się problemy z zmiennymi, bo każda metoda może przyjmować różne wartości m.in. sint32, uint16, boolean. Być może będzie trzeba jeszcze poprawić.

A na koniec powiem tylko, że płyta którą posiada nie ma sensora temp ;-). By sprawdzić czy taki sensor jest wystarczy ten oto kod
KOD c:     UKRYJ  
strComputer = "."
Set colTempProbe = GetObject("Winmgmts:"_
    & "{impersonationLevel=impersonate}!\\"_
    & strComputer & "\root\cimv2")._
    InstancesOf("Win32_TemperatureProbe")
Num = 0
For Each obj In colTempProbe      
    WScript.Echo   obj.Name & VBNewLine _
        & obj.DeviceID & VBNewLine _
        & obj.Status & VBNewLine _
        & obj.Resolution & VBNewLine _
        & obj.Tolerance & VBNewLine _
        & obj.Accuracy
    Num = Num +1
Next
If Num = 0 Then
    WScript.Echo "No temperature probe data"
End If
Wkleić do notatnika i zapisać jako Coś.vbs i przekonać się co się pojawi ;-).

Podziękował Jan Wężyk.
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    Windows 7Firefox

Re: [WinAPI] Szukam rozwiązania do monitorwania temp. CPU

Nowy postprzez polymorphism » wtorek, 7 czerwca 2011, 14:29

KOD cpp:     UKRYJ  
...

BSTR bstrNamespace = (L"root\\cimv2");

...

BSTR strQuery = (L"Select * from Win32_TemperatureProbe");
BSTR strQL = (L"WQL");

...

Te linie nie są poprawne. BSTR to nie jest klasyczny łańcuch znakowy, pisałem o tym w wątku dotyczącym dostępu do obiektów DOM poprzez interfejsy COM. Co ciekawe wersję poprawną masz w linii:
KOD cpp:     UKRYJ  
BSTR strClassProp = SysAllocString(L"Resolution"); //Trzecia LINIJKA

I tak powinna wyglądać inicjalizacja łańcuchów BSTR.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
GoldWolf
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [WinAPI] Szukam rozwiązania do monitorwania temp. CPU

Nowy postprzez GoldWolf » piątek, 10 czerwca 2011, 11:00

Akurat, tym sposobem nie udało mi się odczytać temp, jedynie wykorzystałem odczyt informacji o obciążeniu procesora. Jakbym coś znalazł to dam znać.
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    Windows 7Firefox

Re: [WinAPI] Szukam rozwiązania do monitorwania temp. CPU

Nowy postprzez GoldWolf » poniedziałek, 27 czerwca 2011, 13:41

Cyfrowy Baron napisał(a):Funkcja, którą wykorzystujesz do sprawdzania temperatury oparta jest na WMI i niestety nie będzie działać na każdym sprzęcie, gdyż nie każdy producent sprzętu dostarcza odpowiednie protokoły i rozszerzenia dla swojego sprzętu. U mnie np. ten kod zwraca komunikat o braku sensora, a mam ich cztery.

Właśnie to jest dziwne, bo przecież właściwie każda płyta ma te czujniki. Jak znajdę trochę czasu, to spróbuję jakoś do Biosu się dostać, ale raczej nie za pomocą WMI.
Nie chodzi mi o super dokładny odczyt, ale jakiś by się przydał, szczególnie, że program ma za zadanie obciążać, czyli wygrzewać CPU.
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    Windows 7Firefox

Re: [WinAPI] Szukam rozwiązania do monitorwania temp. CPU

Nowy postprzez Cyfrowy Baron » wtorek, 28 czerwca 2011, 09:09

GoldWolf napisał(a):Właśnie to jest dziwne, bo przecież właściwie każda płyta ma te czujniki.


Używam programu,który podaje mi temperatury z tych czujników. WMI jest mało skuteczne i zależne od producenta sprzętu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [WinAPI] Szukam rozwiązania do monitorwania temp. CPU

Nowy postprzez GoldWolf » poniedziałek, 4 lipca 2011, 09:03

Ciekawy przypadek, akurat tego rozwiązania używam do pomiaru obciążenia CPU.

Stworzyłem sobie proste menu dodałem jeden klawisz Combofix:
KOD cpp:     UKRYJ  
if(LOWORD(wPar) == 200)
                                         //PostQuitMessage( 0 );
                                         ShellExecute( NULL, "open", "http://programowanie.cal.pl/forum/posting.php?mode=reply&f=5&t=1441", "", "", SW_SHOWNORMAL );


Gdy dodałem ten fragment kody, okazał się, że program się wywali, gdy przeglądarka nie nawiążę połączenia ze stroną, a inaczej gdy nie będzie aktywne połączenie sieciowe.

Drobna modyfikacja programu i wszystko wróciło do normy, ale warto o tym wspomnieć.

KOD cpp:     UKRYJ  
ULONG uCount = 1, uReturned;
        IWbemClassObject* pClassObject = NULL;
        hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned);
        if(hRes != S_OK){
// W TYM MIEJSCU SIĘ ZATRZYMYWAŁ
//              MessageBox(0, "Could not Enumerate - Klasa nie trybi <img style="vertical-align: middle;" src="./images/smilies/icon_e_wink.gif" alt=";-)" title="Mruga" />", 0, 0);
// ZERUJEMY  WARTOŚĆ i by PONOWNIE ROZPOCZĄĆ DZIAŁANIE
                i = 0;
        //      return 0;
// TRZEBA BYŁO ZASTOSOWAĆ ELSE
        }else {

                VARIANT v;
                BSTR strClassProp = SysAllocString(L"LoadPercentage"); //Trzecia LINIJKA
                hRes = pClassObject->Get(strClassProp, 0, &v, 0, 0);
                if (hRes != S_OK){
                        MessageBox(0, "Could not Get Value", 0, 0);
        //              return 0;
                }

                SysFreeString(strClassProp);
                _bstr_t bstrPath = &v; //Just to convert BSTR to ANSI

                char* strPath=(char*)bstrPath;
                char mam[50];
                mam[0] = '\0';
                if (SUCCEEDED(hRes)){
                        strcpy_s(mam, "Procent użycia CPU - ");
                        //sprintf_s(mam1, "%*ld", WIDTH, statex.dwMemoryLoad);
                        strcat_s(mam, strPath);
                        SetWindowText(hStatic3, mam);
                        //MessageBox(0, "Could not execute Query", 0, 0);
                                //MessageBoxA(NULL, strPath, 0, 0);
                        mam[0] = '\0';
                }else
                        MessageBoxA(NULL,"Error in getting object", 0, 0);

                        /*VariantClear(&v);
                        pClassObject->Release();*/

       

                VariantClear(&v);
                pClassObject->Release();
        }
        pIWbemLocator->Release();
        pWbemServices->Release();
        pEnumObject->Release();

        CoUninitialize();
        OleUninitialize();
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein

Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt
Avatar użytkownika
GoldWolf
Homos antropiczny
Homos antropiczny
 
Posty: 116
Dołączył(a): piątek, 16 stycznia 2009, 18:42
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Siódemka Profesjonalna
Kompilator: Microsoft Visual Studio 2010
Version 10.0.30319.1
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Biblioteki i komponenty

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości

cron