crims
asked on
C++ ReadProcessMemory() won't print out
OpenProc = OpenProcess(PROCESS_VM_REA D,FALSE,Pr ocessID);
if(OpenProc)
{
NumberOfPeopleInRoom = SendMessage(ListBox(), LB_GETCOUNT, 0, 0) - 1;
cout << NumberOfPeopleInRoom << endl;
WORD length;
char pszCmdLine[16];
DWORD itemData;
DWORD Baddress;
char MemCopiedTo[16];
/* okay, this is the code i have so far now, still prints a blank line
* Am I supposed to close the Process before i print it out or what??
* I just want it to print the item i selected in this case it would be item 10
* just trying to print the string which is contained on/in the 10th item
* i posted previously but beyond this point i got no more help
*/
itemData = SendMessage(ListBox(), LB_GETITEMDATA,(WPARAM) 10,0);
Baddress = (DWORD)itemData;
ReadProcessMemory(OpenProc ,(LPCVOID) Baddress,p szCmdLine, 16,&bytes) ;
CopyMemory(MemCopiedTo,psz CmdLine,20 );
cout << MemCopiedTo << endl;
}
if(OpenProc)
{
NumberOfPeopleInRoom = SendMessage(ListBox(), LB_GETCOUNT, 0, 0) - 1;
cout << NumberOfPeopleInRoom << endl;
WORD length;
char pszCmdLine[16];
DWORD itemData;
DWORD Baddress;
char MemCopiedTo[16];
/* okay, this is the code i have so far now, still prints a blank line
* Am I supposed to close the Process before i print it out or what??
* I just want it to print the item i selected in this case it would be item 10
* just trying to print the string which is contained on/in the 10th item
* i posted previously but beyond this point i got no more help
*/
itemData = SendMessage(ListBox(), LB_GETITEMDATA,(WPARAM) 10,0);
Baddress = (DWORD)itemData;
ReadProcessMemory(OpenProc
CopyMemory(MemCopiedTo,psz
cout << MemCopiedTo << endl;
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Alex,
I didn't ignore you, i replied I am new to this expert-exchange, i think i closed it out the topic or something, gave some guy 500 points for just telling me to change a variable.
i asked are you saying i need to allocate virtual memory?
and btw the LB_GETTEXT didn't work.
MAHESH,
The link on exper-exchange you posted, has
CListBox* pLB = (CListBox*) Get_Control(lb_id); // gets the listbox from the control id- this works fine
int i, count = pLB->GetCount(); // this works too- the correct numberof items shows up
I don't know what CListBox* pLB is... obviously some type of variable. didn't know how to use it or what.
and the pLB->GetCount(); I tried a few of the functions in that code... are they in the standard C++ libraries, or did the guy code them himself?
I guess the best way to say it is... below is the code in vb trying to convert it to C++
uzgy: Public Sub NewAddRoomToList(TheList As ListBox, AddUser As Boolean)
' You can use this sub with any AOL
On Error Resume Next
Dim cprocess As Long, itmhold As Long, ScreenName As String
Dim psnhold As Long, rbytes As Long, Index As Long, room As Long
Dim rlist As Long, sthread As Long, mthread As Long, itmNum As Long
room& = FindRoom&
If room& = 0& Then Exit Sub
itmNum& = 24
Top:
rlist& = FindWindowEx(room&, 0&, "_AOL_Listbox", vbNullString)
sthread& = GetWindowThreadProcessId(r list, cprocess&)
mthread& = OpenProcess(PROCESS_READ Or RIGHTS_REQUIRED, False, cprocess&)
If mthread& Then
For Index& = 0 To SendMessage(rlist, LB_GETCOUNT, 0, 0) - 1
ScreenName$ = String$(4, vbNullChar)
itmhold& = SendMessage(rlist, LB_GETITEMDATA, ByVal CLng(Index&), ByVal 0&)
itmhold& = itmhold& + itmNum&
Call ReadProcessMemory(mthread& , itmhold&, ScreenName$, 4, rbytes)
Call CopyMemory(psnhold&, ByVal ScreenName$, 4)
psnhold& = psnhold& + 6
ScreenName$ = String$(16, vbNullChar)
Call ReadProcessMemory(mthread& , psnhold&, ScreenName$, Len(ScreenName$), rbytes&)
ScreenName$ = Left$(ScreenName$, InStr(ScreenName$, vbNullChar) - 1)
'This is used because if you use the old way it returns either
'a blank or just a 'p'
If Trim(ScreenName$) = "" Or Trim(ScreenName$) = "p" Then
itmNum& = 28
Call CloseHandle(mthread)
GoTo Top
End If
If ScreenName$ <> GetUser Or AddUser = True Then
TheList.AddItem ScreenName$
End If
Next Index&
Call CloseHandle(mthread)
End If
End Sub
I didn't ignore you, i replied I am new to this expert-exchange, i think i closed it out the topic or something, gave some guy 500 points for just telling me to change a variable.
i asked are you saying i need to allocate virtual memory?
and btw the LB_GETTEXT didn't work.
MAHESH,
The link on exper-exchange you posted, has
CListBox* pLB = (CListBox*) Get_Control(lb_id); // gets the listbox from the control id- this works fine
int i, count = pLB->GetCount(); // this works too- the correct numberof items shows up
I don't know what CListBox* pLB is... obviously some type of variable. didn't know how to use it or what.
and the pLB->GetCount(); I tried a few of the functions in that code... are they in the standard C++ libraries, or did the guy code them himself?
I guess the best way to say it is... below is the code in vb trying to convert it to C++
uzgy: Public Sub NewAddRoomToList(TheList As ListBox, AddUser As Boolean)
' You can use this sub with any AOL
On Error Resume Next
Dim cprocess As Long, itmhold As Long, ScreenName As String
Dim psnhold As Long, rbytes As Long, Index As Long, room As Long
Dim rlist As Long, sthread As Long, mthread As Long, itmNum As Long
room& = FindRoom&
If room& = 0& Then Exit Sub
itmNum& = 24
Top:
rlist& = FindWindowEx(room&, 0&, "_AOL_Listbox", vbNullString)
sthread& = GetWindowThreadProcessId(r
mthread& = OpenProcess(PROCESS_READ Or RIGHTS_REQUIRED, False, cprocess&)
If mthread& Then
For Index& = 0 To SendMessage(rlist, LB_GETCOUNT, 0, 0) - 1
ScreenName$ = String$(4, vbNullChar)
itmhold& = SendMessage(rlist, LB_GETITEMDATA, ByVal CLng(Index&), ByVal 0&)
itmhold& = itmhold& + itmNum&
Call ReadProcessMemory(mthread&
Call CopyMemory(psnhold&, ByVal ScreenName$, 4)
psnhold& = psnhold& + 6
ScreenName$ = String$(16, vbNullChar)
Call ReadProcessMemory(mthread&
ScreenName$ = Left$(ScreenName$, InStr(ScreenName$, vbNullChar) - 1)
'This is used because if you use the old way it returns either
'a blank or just a 'p'
If Trim(ScreenName$) = "" Or Trim(ScreenName$) = "p" Then
itmNum& = 28
Call CloseHandle(mthread)
GoTo Top
End If
If ScreenName$ <> GetUser Or AddUser = True Then
TheList.AddItem ScreenName$
End If
Next Index&
Call CloseHandle(mthread)
End If
End Sub
It this will not work, return to my previous answer which was ignored.