Odjechani.com.pl

Pełna wersja: Czy ta klasa może być przydatna?
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Służy do manipulowania pamięcią procesu. Metoda open wybiera okno z odpowiednią nazwą, read służy do odczytu wartości z danego adresu a write zapisuje daną wartość pod dany adres. Ta klasa z założenia ma oferować dużo łatwiejsze i bezpieczniejsze manipulowanie pamięcią procesu niż używanie gołego WinApi. Choć z drugiej strony nie jestem pewien czy to nie jest przerost formy nad treścią. Zapraszam do oceny. 
#include <windows.h>
class OneProcess
{
private:
    DWORD process_id;
    HANDLE handle;
    HWND hwnd;
public:
    template<typename type>
    type Read(DWORD address)
    {
        if(hwnd)
        {
            type value_to_return;
            ReadProcessMemory(handle, (LPVOID)address, &value_to_return,sizeof(type),0);
            return value_to_return;
        }
    }
    template<typename type>
    void Write(DWORD address, type value_to_write)
    {
        WriteProcessMemory(handle, (LPVOID)address, &value_to_write,sizeof(type),0);
    }
    void Open(char window_name[])
    {
        hwnd=FindWindow(NULL, window_name);
        if(hwnd)
        {
            GetWindowThreadProcessId(hwnd,&process_id);
            handle=OpenProcess(PROCESS_ALL_ACCESS, false, process_id);
        }
    }
    void Close()
    {
        CloseHandle(handle);
    }
    OneProcess(char window_name[])
    {
        Open(window_name);
    }
    OneProcess(){}
    ~OneProcess()
    {
        Close();
    }
};
A możesz wyjaśnić, co czyni tę klasę bezpieczniejszą i dlaczego? Manipulowanie procesem zwykle może się wiązać z zawieszaniem tego procesu, a z tym i całej aplikacji, więc wszystko zależy od tego do czego się odwołasz i po co.
Nie popełnisz błędu takiego jak np. przypadkowa zmiana wartości zmiennej przechowującej uchwyt do okna. Takie błędy są krytyczne a mogą w ogóle nie zostać zauważone przez kompilator. O tym drugim wiem.