Proxy писал(а):Это всё извращенство. Зачем это понадобилось? Посмотри как артмани работает.
GDK писал(а):1. Никто не пробовал сделать что - либо подобное?
GDK писал(а):Не против если я тут бубу продолжать тему - в смысле писать о результатах и может быть задавать вопросы по API, которые необходимо будет применять для решения задачи? Думаю будет интересно многим т.к. мало инф. на эту тему.
GDK писал(а):Наткнулся на вопрос: Как сделать типа Application.TrackBars(1).position=222, где Application-объект главного окна приложения; TrackBars(1)-объект трекбара; position-св-во трекбара. Написать класс для Application-не проблема, TrackBar-тоже не проблема, написать св-во для класса тоже не проблема, а вот именно реализовать обращение Application.TrackBars(1).position=222 - Никак не разберусь.
А это бы существенно облегчило тебе жизнь. PEiD, LordPE, PE Tools тебе помогут.2. На каком яз. написана - не знаю.
DeleteMenu() - просто удалить соответствующий пункт меню, так же, как и с кнопкой закрыть.1. Как отключать кнопки системного меню?
Dim UserApp as new Application ' класс Application уже написан и коллекция TrackBars в нём есть.
Dim TrBrVert as TrackBar ' класс TrackBar написан
call UserApp.TrackBars.Add(TrBrVert )
UserApp.TrackBars(1).Position=500 'это - например
UserApp.TrackBars(1).Position=500
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'Напpавляет сообщение окну пpикладной задачи.
'Паpаметpы:
'Wnd: Окно, котоpое будет пpинимать сообщение, или $FFFF для всех пеpекpываемых или всплывающих окон.
'Msg: Тип сообщения.
'wParam: Дополнительная инфоpмация о сообщении.
'lParam: Дополнительная инфоpмация о сообщении.
'Возвpащаемое значение:
'Не нуль в случае успешного завеpшения; 0 - если нет.
Private Const WM_COMMAND = &H111
Private Const LVM_FIRST As Long = &H1000
Private Const LVM_GETHOTITEM As Long = (LVM_FIRST + 61)
Private Const LVM_GETITEMCOUNT As Long = (LVM_FIRST + 4)
Private Const LVM_GETITEMSTATE As Long = (LVM_FIRST + 44)
Private Const LVM_GETSELECTEDCOUNT As Long = (LVM_FIRST + 50)
Private Const LVM_GETSELECTIONMARK As Long = (LVM_FIRST + 66)
Private Const LVM_GETTOPINDEX As Long = (LVM_FIRST + 39)
Private Const LVM_GETITEMTEXTA As Long = (LVM_FIRST + 45)
Private Const LVM_GETITEMTEXTW As Long = (LVM_FIRST + 115)
Private Const LVIS_SELECTED As Long = &H2
Private Const LVIF_TEXT As Long = &H1
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hWnd As Long, ByRef lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpAddress As Any, ByRef dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Const WM_USER As Long = &H400
Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Private Const SYNCHRONIZE As Long = &H100000
Private Const PROCESS_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF)
Private Const PROCESS_DUP_HANDLE As Long = (&H40)
Private Const MEM_COMMIT As Long = &H1000
Private Const MEM_TOP_DOWN As Long = &H100000
Private Const PAGE_READWRITE As Long = &H4
Private Const TB_GETBUTTON As Long = (WM_USER + 23)
Private Const MEM_RELEASE As Long = &H8000
Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, ByRef lpRect As RECT) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type LVITEM
mask As Long
iItem As Long
iSubItem As Long
state As Long
stateMask As Long
pszText As String
cchTextMax As Long
iImage As Long
lParam As Long
iIndent As Long
End Type
Dim HWndGNm As Long
Dim HWndObjm As Long
Public Function InitObjectGN(HWndGNp As Long) 'Эта ф-ция специально для родительского окна.
'Её цель - получить хендл окна списка SysListView32 и записать в этот объект хендл родительского окна списка.
Dim FObjf As New FGDK
Dim HWndGNf As Long
Dim GNWinArrf() As Long
HWndGNf = HWndGNp
HWndGNm = HWndGNf
GNWinArrf() = FObjf.GetGNChWind(HWndGNf)
HWndObjm = GNWinArrf(14)
Set FObjf = Nothing
End Function
Public Function InitSLV32(HWndLV As Long) '
HWndObjm = HWndLV
End Function
Public Property Get GetWinTop() As Long
Dim GNRectf As RECT
Call GetWindowRect(HWndObjm, GNRectf) 'Получаем прямоугольник окна списка
GetWinTop = GNRectf.Top
End Property
Public Property Get GetWinBottom() As Long
Dim GNRectf As RECT
Call GetWindowRect(HWndObjm, GNRectf) 'Получаем прямоугольник окна списка
GetWinBottom = GNRectf.Bottom
End Property
Public Property Get GetWinLeft() As Long
Dim GNRectf As RECT
Call GetWindowRect(HWndObjm, GNRectf) 'Получаем прямоугольник окна списка
GetWinLeft = GNRectf.Left
End Property
Public Property Get GetWinRight() As Long
Dim GNRectf As RECT
Call GetWindowRect(HWndObjm, GNRectf) 'Получаем прямоугольник окна списка
GetWinRight = GNRectf.Right
End Property
Public Property Get GetWinWidth() As Long
Dim GNRectf As RECT
Call GetWindowRect(HWndObjm, GNRectf) 'Получаем прямоугольник окна списка
GetWinWidth = GNRectf.Right - GNRectf.Left
End Property
Public Property Get GetWinHeigt() As Long
Dim GNRectf As RECT
Call GetWindowRect(HWndObjm, GNRectf) 'Получаем прямоугольник окна списка
GetWinHeigt = GNRectf.Bottom - GNRectf.Top
End Property
Public Property Get GetHWndTrNameList() As Long
GetHWndTrNameList = HWndObjm
End Property
Public Property Get GetHWndGN() As Long
GetHWndGN = HWndGNm
End Property
Public Property Get GetItemCount() As Long
Dim i As Long
i = SendMessage(HWndObjm, LVM_GETITEMCOUNT, 0, 0)
GetItemCount = i
End Property
Public Property Get ATest()
Dim i As Long
Dim BufStr As String
'i = SendMessage(HWndObjm, LVM_GETITEMSTATE, 1, LVIS_SELECTED)
'Debug.Print i & " - HHHHH"
Dim rwb As Long
Dim procidf As Long
Dim hProcess As Long
Dim L As Long
Dim prc As Long ' указатель на выделенную память
Dim s() As Byte
Dim BufLV As LVITEM
Dim RezLV As LVITEM
BufLV.mask = 1
BufLV.cchTextMax = 255
BufLV.iSubItem = 3
BufLV.stateMask = LVIS_SELECTED
HWndStBrf = HWndObjm
'Exit Property
Call GetWindowThreadProcessId(HWndObjm, procidf) ' найти PID окна
hProcess = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_DUP_HANDLE, True, procidf) ' получить хендл процесса
prc = VirtualAllocEx(hProcess, 0, LenB(BufLV), MEM_COMMIT Or MEM_TOP_DOWN, PAGE_READWRITE) 'выделить память для LVItem
Call SendMessage(HWndObjm, LVM_GETITEMTEXTA, 1, prc) 'Попытка выдернуть текст
Call ReadProcessMemory(hProcess, prc, BufLV, LenB(BufLV), rwb) 'прочитать LVItem из памяти
Call VirtualFreeEx(hProcess, prc, LenB(BufLV), MEM_RELEASE) 'освободить память
Call CloseHandle(hProcess) 'Закрыть доступ к процессу
End Property
GDK писал(а):С некоторых пор решил оформлять работу в виде классов. Поэтому выложу код всего модуля класса. Процедура называется ATest.
GDK писал(а):Из неё понял, что надо:
Выделить память в чужом процессе не только для переменной (структуры LVITEM), но кроме того уже в памяти чужого процесса заполнить некоторые "поля" этой структуры (чтобы посылаемое сообщение выбрало именно текст итема); ещё тоже в памяти чужого процесса выделить память для приёма текста. И вот потом уже посылать GETITEMTEXT. Не пойму как заполнить структуру в чужом процессе. И ещё никак не разберусь что всё таки должно содержаться в структуре LVITEM в поле pszText . В APIViewer2004 написано что pszText as String, значит текст должен содержаться? A из MSDN понял (с моим незнанием англ.) что вроде как в pszText должен содержаться указатель на часть памяти, в которой хранится текст итема. Ну и разок встречал, объявление структуры LVITEM , где pszText as Long. Так текст или указатель ???
GDK писал(а):Для меня это значит:
Всегда, когда в к-либо структуре объявлено As String, это там указатель.
Но здравый смысл подсказывает, что я всё неправильно понял.
Сейчас этот форум просматривают: Google-бот и гости: 52