Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

.386
 
.model flat, stdcall  
option casemap :none  
 
    include \masm32\include\windows.inc
 
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\shell32.inc
    include \masm32\include\masm32.inc
    include \masm32\include\comdlg32.inc
    include \masm32\include\wininet.inc
    include \masm32\include\Comctl32.inc
    include \masm32\include\winmm.inc
    include \masm32\include\advapi32.inc
    include \masm32\include\gdi32.inc
 
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\shell32.lib
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\comdlg32.lib
    includelib \masm32\lib\wininet.lib
    includelib \masm32\lib\Comctl32.lib
    includelib \masm32\lib\winmm.LIB
    includelib \masm32\lib\advapi32.lib
    includelib \masm32\lib\gdi32.lib
 
EXTRADATA struct
        Wnd dd ?  ; Хэндл родительского окна иконки
        uID dd ?  ; Стиль отображения иконки
EXTRADATA ends
 
.data
mestitle    db "Bomz",0
form        db "ID процесса: %d",9, 9,"TOP: %d", 9,"LEFT: %d", 9,"BOTTOM: %d", 9,"RIGHT: %d",  0
Class1        db 'Shell_TrayWnd',0
Class2        db 'TrayNotifyWnd',0            ; область уведомлений
Class3        db 'SysPager',0
Class4        db 'ToolbarWindow32',0
 
.data?
extra        EXTRADATA <>
button        TBBUTTON <>
rect1        RECT <>
rect        RECT <>
buffer        db 512 dup(?)
hWnd        HWND ?
ProcId        dd ?
hProcess    dd ?
lpData        dd ?
lpData1        dd ?
IconNumber    dd ?
BytesRead    dd ?
ProcTrayId    dd ?
hWnd1        HWND ?
ButtonID    dd ?
 
.code
start:
 
    invoke FindWindow,addr Class1, NULL            ; Найти окно трея
    mov hWnd, eax
    invoke FindWindowEx,hWnd,NULL,addr Class2, NULL        ; Найти окно уведомлений в трее
    mov hWnd, eax
    invoke FindWindowEx,hWnd,NULL,addr Class3, NULL        ; Найти трей
    mov hWnd, eax
    invoke FindWindowEx,hWnd,NULL,addr Class4, NULL        ; Найти панель иконок в трее
    mov hWnd, eax
    invoke GetWindowRect, hWnd,addr rect
    invoke  SendMessage,hWnd,TB_BUTTONCOUNT,0,0        ; Получить количество иконок в трее
    mov IconNumber, eax
    invoke  GetWindowThreadProcessId,hWnd,addr ProcId    ; Получить ID процесса-владельца трея
    invoke  OpenProcess,PROCESS_ALL_ACCESS,FALSE,ProcId    ; Открыть процесс с полным доступом
    mov hProcess,eax                    ; Сохранить хэндл процесса-владельца трея
    invoke  VirtualAllocEx,hProcess,NULL,sizeof button,MEM_COMMIT,PAGE_READWRITE    ; Выделить блок памяти в контексте процесса
         mov lpData, eax                    ; Сохранить указатель на блок памяти
    invoke  VirtualAllocEx,hProcess,NULL,sizeof rect1,MEM_COMMIT,PAGE_READWRITE    ; Выделить блок памяти в контексте процесса
         mov lpData1, eax                    ; Сохранить указатель на блок памяти
NEXT:
;    dec IconNumber
    mov IconNumber, 0
 
    invoke  SendMessage,hWnd,TB_GETBUTTON,IconNumber,lpData                        ; Получить иконку из трея с индексом IconNumber
    invoke  ReadProcessMemory, hProcess, lpData,addr button, sizeof button, addr BytesRead        ; Прочитать структуру иконки
    invoke  ReadProcessMemory,hProcess,button.dwData,addr extra, sizeof extra,addr BytesRead    ; Прочитать пользовательские данные иконки
    invoke  GetWindowThreadProcessId, extra.Wnd,addr ProcTrayId                    ; Получить Id процесса, чья иконка находится в трее
 
    invoke  SendMessage,hWnd,TB_GETRECT, button.idCommand, lpData1
    invoke  ReadProcessMemory, hProcess, lpData1,addr rect1, sizeof rect1, addr BytesRead
 
 
    mov eax, rect1.top
    inc eax
    add rect.top, eax
    mov eax, rect1.left
    inc eax
    add rect.left, eax
    mov eax, rect1.right
    dec eax
    add rect.right, eax
    mov eax, rect1.bottom
    dec eax
    add rect.bottom, eax
 
 
    invoke wsprintf,ADDR buffer,ADDR form, ProcTrayId, rect1.top, rect1.left,  rect1.bottom, rect1.right
    invoke MessageBox,0,ADDR buffer,ADDR mestitle,MB_OK + MB_ICONASTERISK
    invoke wsprintf,ADDR buffer,ADDR form, ProcTrayId, rect.top, rect.left, rect.bottom, rect.right
    invoke MessageBox,0,ADDR buffer,ADDR mestitle,MB_OK + MB_ICONASTERISK
 
;cmp IconNumber,0
;jnz NEXT
    invoke  VirtualFreeEx,ProcId,lpData,0,MEM_RELEASE
    invoke  CloseHandle,ProcId
    invoke ExitProcess,0
 
end start

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 19:09 03-05-2011 | Исправлено: bomzzz, 03:40 05-05-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru