C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь


http://www.ooors.ru/ Фейерверк РК6054 007. Купить салют Фейерверк ультра 007.

 Работа с переменными в других процессах / Система / Visual C++

Работа с переменными в других процессах
A: (SUnteXx)
Оригинальная ссылка: нету

Ниже приведеный код работает тока на линейке NT: NT, 2000, XP и т.д.

Приведенный ниже пример показывает, как можно получить название всех кнопок Таскбара. Для этого нам необходимо "внедриться" в чужой процесс, создав там строку и считав туда названия, а потом уже получить переменную из того процесса!
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <commctrl.h>

void GetButtonText(HWND hwndTaskbar, int iNum, char *szText, UINT iMax)
{
    DWORD d;
    char **lp;

    if (!hwndTaskbar)
    {
        hwndTaskbar = FindWindow("Shell_TrayWnd", NULL); // Панелька внизу
        hwndTaskbar = FindWindowEx(hwndTaskbar, NULL, "ReBarWindow32", NULL); // Панель левее кнопки пуск
        hwndTaskbar = FindWindowEx(hwndTaskbar, NULL, "MSTaskSwWClass", NULL); // Панель, там где минимизированные окна и т.п.
        hwndTaskbar = FindWindowEx(hwndTaskbar, NULL, "ToolbarWindow32", NULL); // хм... таскбар
    }

// получаем ID процесса таскбара
    GetWindowThreadProcessId(hwndTaskbar, &d);

// открываем процесс на запись/чтение
    HANDLE h = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, d);

// создаем переменную в другом процессе    
    lp = (LPSTR*)VirtualAllocEx(h, NULL, iMax, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); 

// очищаем нашу строку, куда будем считывать текст окна из таскбара
    memset(szText, 0, iMax);

// пишем пустую строку в процесс.
// Этого, в данном случае можно не делать. Просто показал как это делается
    WriteProcessMemory(h, (LPVOID)lp, szText, iMax, NULL);

// получаем название кнопки в выделенную в другом процессе строку
    SendMessage(hwndTaskbar, TB_GETBUTTONTEXT, iNum, (LPARAM)lp);

// читаем значение строки из другого процесса в наш
    ReadProcessMemory(h, (LPVOID)lp, szText, iMax, 0l);

// удаляем переменную в другом процессе
    VirtualFreeEx(h, lp, 0, MEM_RELEASE);

// заканчиваем работу с другим процессом
    CloseHandle(h);
}

void main(void)
{
    char szText[200];
    HWND hwndTaskbar;
    
// ищем окно Таскбара    
    hwndTaskbar = FindWindow("Shell_TrayWnd", NULL); // Панелька внизу
    hwndTaskbar = FindWindowEx(hwndTaskbar, NULL, "ReBarWindow32", NULL); // Панель левее кнопки пуск
    hwndTaskbar = FindWindowEx(hwndTaskbar, NULL, "MSTaskSwWClass", NULL); // Панель, там где минимизированные окна и т.п.
    hwndTaskbar = FindWindowEx(hwndTaskbar, NULL, "ToolbarWindow32", NULL); // хм... таскбар

// получаем количество кнопок в таскбаре    
    int max = SendMessage(hwndTaskbar, TB_BUTTONCOUNT, 0, 0);

    for (int i = 0; i <= max; i++)
    {
// если данная кнопка под номером i не видна (скрыта), то
        if (SendMessage(hwndTaskbar, TB_ISBUTTONHIDDEN, i, 0))
            continue; // переходим к следующей кнопку

// получаем текст кнопки №i в таскбаре
        GetButtonText(hwndTaskbar, i, szText, 200);
        printf("%s\r\n", szText); // выводим название
    }
    
    printf("\r\nPress any key to continue"); // просим юзверя нажать "any key" на клавиатуре

    while(!_getch()); // ждем нажатия кнопки

    return; // выходим
}