ايران ويج

نسخه‌ی کامل: ReadProcessMemory کمک
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام من یک برنامه نوشتم به زبان C++ حالا همون رو با زبان VB6 نوشتم اما خروجی چیزی رو نشون نمیده کمک کنید من باید حتما این رو به زبان VB6 بنویسم.
کد:
#include <iostream.h>
#include <conio.h>
#include <windows.h>
char Str[63];

int main()
{
cout << "Test" << endl << "coded by Sima" << endl;
HWND fenster = NULL;
while(fenster == NULL)
{
fenster = FindWindow(NULL, "Test");
Sleep(100);
}
cout << "Process Found!" << endl;
DWORD prozessid;
GetWindowThreadProcessId(fenster, &prozessid);
HANDLE handleprozess;
handleprozess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, prozessid);
DWORD puffer = NULL;
ReadProcessMemory(handleprozess,(void*)(0x01AB18E4),&str,sizeof(str),&puffer);
cout << "Value: " << str << endl;
CloseHandle(handleprozess);
getch();
}
خوب حالا همین برنامه رو مینویسم به زبان VB6
کد:
dim str as string
phwnd = FindWindow(vbNullString, "Test")
If (phwnd = 0) Then
    MsgBox "Window not found!"
    Exit Sub
End If
GetWindowThreadProcessId phwnd, pid

phandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If (phandle = 0) Then
    MsgBox "Couldn't get a process handle!"
    Exit Sub
End If
BaseAddr = &H01AB18E4
ReadProcessMemory phandle, BaseAddr, str, 1, 0&

Text2.text = str

CloseHandle phandle
این کد رو که اجرا میکنم هیچ خروجی به من نمیده اما کدی که در C++ نوشتم خروجی رو درست میده خروجی من یک متن هست String حالا کمک کنید ببینم مشکل این چیه AngryAngryAngry
اندازه مقداری که که قراره متغير برگدونه رو بايد از قبل خالی کنيد
کد:
str = String(256, 0&)

يه نکته ديگه که من کلی سرش الاف شدم اينه که تابع readprocessmemory که از خود VB تو برنامه قرار ميديد امکان داره آرگمنت هاش اشتباه تعيين شده باشه

از تابع زير استفاده کنيد:
کد:
Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
(۱۰-شهریور-۱۳۸۹, ۱۶:۲۷:۵۶)CRazYFULL نوشته است: [ -> ]اندازه مقداری که که قراره متغير برگدونه رو بايد از قبل خالی کنيد
کد:
str = String(256, 0&)

يه نکته ديگه که من کلی سرش الاف شدم اينه که تابع readprocessmemory که از خود VB تو برنامه قرار ميديد امکان داره آرگمنت هاش اشتباه تعيين شده باشه

از تابع زير استفاده کنيد:
کد:
Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
خدایش خیلی گلی اقای مردی با مرامی سروری دیگه چی میتوانم بگم هر چی بگم کمه درست شد دقیقن مشکل از درست تعریف نشدن ارگومان ها بود خدا بگم چه مارشون نکنه.
راستی یک سوال برام پیش امد اگر تو اون ادرس اطلاعات دیگه ای هم باشه اما من نخوام بخونمش چی کار کنمShy
ببخشید سر شما رو درد اوردم با این سوال های پشت سر همShy
نقل قول: راستی یک سوال برام پیش امد اگر تو اون ادرس اطلاعات دیگه ای هم باشه اما من نخوام بخونمش چی کار کنمShy
ببخشید سر شما رو درد اوردم با این سوال های پشت سر هم

اگه آدرس ثابت باشه و طول مقداری هم که ميخوايد به دست بياريد ثابت باشه اندازه و آدرس دقيق اون رو ميتونيد بگيريد اما اگر غير از اين باشه بالاخره بايد يه سری حروف يا کلمه ثابت قبل يا بعد از مقداری که ميخوايد به دست بياريد پيدا کنيد بعد جدا سازی رو انجام بديد...

انجمن برای پرسش و پاسخ ساخته شده ديگه