Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как перехватить Win API

1.6K
27 января 2004 года
Grom2025
82 / / 20.03.2003
Задача простая. Нужно выдрать SysTray (точнее перехватывать функции добавления на него) в отсутствии Explorera (его просто напросто выгрузили)
401
28 января 2004 года
Br@in RIPper
289 / / 15.02.2003
Цитата:
Originally posted by Grom2025
Задача простая. Нужно выдрать SysTray (точнее перехватывать функции добавления на него) в отсутствии Explorera (его просто напросто выгрузили)



при добавлении иконки в tray окну с классом TrayNotifyWnd приходит какое-то сообщение... точно не помню какое. Пример написания своего shell'а можно посмотреть в исходниках LiteStep (есть такой explorer заменитель - свободно распостраняемый и с исходниками)

1.6K
31 января 2004 года
Grom2025
82 / / 20.03.2003
Цитата:
Originally posted by Br@in RIPper


при добавлении иконки в tray окну с классом TrayNotifyWnd приходит какое-то сообщение... точно не помню какое. Пример написания своего shell'а можно посмотреть в исходниках LiteStep (есть такой explorer заменитель - свободно распостраняемый и с исходниками)



А как насчет SetWindowsHookExA(..., ..., ..., ...):???:

401
03 февраля 2004 года
Br@in RIPper
289 / / 15.02.2003
Цитата:
Originally posted by Grom2025


А как насчет SetWindowsHookExA(..., ..., ..., ...):???:



нет, с помощью SetWindowsHookEx можно перехватыватить создание/удаление/активирование окон. С треем она не работает

1.6K
01 марта 2004 года
Grom2025
82 / / 20.03.2003
Цитата:
Originally posted by Br@in RIPper


нет, с помощью SetWindowsHookEx можно перехватыватить создание/удаление/активирование окон. С треем она не работает



А как же тогда люди софт пишут? LiteStep я скачал, поставил но исходников конечно-же не обнаружил!

3.2K
01 марта 2004 года
srd
50 / / 31.08.2003
Цитата:
Originally posted by Grom2025


А как же тогда люди софт пишут? LiteStep я скачал, поставил но исходников конечно-же не обнаружил!



http://am-productions.biz/downloads.php

Смотри там утилиту TrayModule - она вместе с исходниками. Работает в том случае, если текущий шелл сам не работает с треем. Так что перед испытаниями воспользуйся каким-нибудь другим шеллом без трея, например RunModule с того же сайта.

1
01 марта 2004 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Grom2025


А как же тогда люди софт пишут? LiteStep я скачал, поставил но исходников конечно-же не обнаружил!


А ApySpy тебе не поможет?

1.6K
02 марта 2004 года
Grom2025
82 / / 20.03.2003
Цитата:
Originally posted by srd


http://am-productions.biz/downloads.php

Смотри там утилиту TrayModule - она вместе с исходниками. Работает в том случае, если текущий шелл сам не работает с треем. Так что перед испытаниями воспользуйся каким-нибудь другим шеллом без трея, например RunModule с того же сайта.



Спасибо за линк! Очень интересные проекты... но вот только я не понял, подменять вызов API своей функцией это единственный способ? Если посмотреть кусок кода который есть в исходниках можно заметить подмену класса "Shell_TrayWnd" и "TrayNotifyWnd"!!! (Кстати под XP работает вместе с Explorerom правда немного криво)

Код:
CTrayModule::~CTrayModule()
{
    // unregister the classes
    HINSTANCE hInstance = GetModuleHandle(NULL);
    UnregisterClass(TEXT("Shell_TrayWnd"),hInstance);
    UnregisterClass(TEXT("TrayNotifyWnd"),hInstance);
...........cut...........
// создали класс...
CShellTrayWnd::CShellTrayWnd()
{
    m_pmwTrayNotifyWnd = NULL;
    CTrayData tdData;
    tdData.SetFile(TEXT("TrayModule.ini"));
    m_nSnapPixels = tdData.GetSnapPixels();
    // get the desktop rectangle for snappyness
    GetWindowRect(GetDesktopWindow(),&m_rDesktopRect);
    m_bActive = false;
    m_nMoveSpace = 0;
}
...........cut............
// вижу создание методов класса
LRESULT CShellTrayWnd::WndProc(HWND hWnd,UINT nMessage,WPARAM wParam,LPARAM lParam)
{// begin WndProc
    switch(nMessage)
    {// begin nMessage switch
    case WM_NCACTIVATE:
        OnNcActivate(wParam);
        break;
    case WM_SETTEXT:
    case WM_NCPAINT:
        OnNcActivate(m_bActive);
        break;
/*  case WM_SETFOCUS:
        m_bActive = true;
        OnFocus();
        break;
    case WM_KILLFOCUS:
        m_bActive = false;
        OnFocus();
        break;*/
    case WM_COPYDATA:
        return OnCopyData(wParam,lParam);
    case WM_DISPLAYCHANGE:
        OnDisplayChange(lParam);
        break;
    case WM_WINDOWPOSCHANGING:
        OnWindowPosChanging(lParam);
        break;
    case WM_LBUTTONDOWN:
        OnLButtonDown(wParam,lParam);
        break;
    case WM_CONTEXTMENU:
        OnContextMenu(wParam,lParam);
        break;
    case WM_PAINT:
        OnPaint();
        break;
    case WM_DESTROY:
        OnDestroy();
        break;
    }// end nMessage swtich
    return CMyWindow::WndProc(hWnd, nMessage, wParam, lParam);
}// end WndProc
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог