22.07.2006, 04:58
общий
это ответ
Здравствуйте, Tamashev Denis M!
Здавствуй, хоть мой вариант и не возвращает правильного результата, хочу сказать, что у тебя здесь неск. ошибок: Во первых - все проверки, которые ты выполняешь на NULL, сделаны не правильно - НЕ равно нулю ( = 0) а (== 0). Тогда у тебя будут выскакивать ошибки на экране.
Во-вторых - проверь ответ от ReadProcessMemory. В нём говорилось если что, "неверный дескриптор", который получался от FindWindow и GetWindowThreadProcessId.
Ну и последнее, что я заметил - это то, что функция FindWindow работает с именем КЛАССА тоже, а ты его опускаешь. Я с помощью winsighta получил имя например некоторого окна, и имя его заголовка, но программа перестала выдавать ошибки, но всё-равно почему-то память не копировала. Не знаю, почему, может быть не было к ней доступа. Попробуй, если что - пиши. Ниже мой вариант (я переделал его для своег Borland C++ 5.02, если что в вижуале может что-нибудь не сработать)
Приложение:
int _tmain(int argc, _TCHAR* argv[]){ FILE *f; char zt[80]; char ds[80]; char buf[16]; HANDLE fg; HWND hWnd; DWORD pid; DWORD adress=0x00100000; DWORD adrss=0x00400000; DWORD lin=adress; /////////////////////////////////////////// cout<<"Enter name Window: "<<endl; cin >> zt; hWnd = FindWindow("ml_online_window",zt); if (hWnd == NULL) { cerr << "Error can‘t get window "<<endl; cin.get(); exit(-1); } GetWindowThreadProcessId(hWnd,&pid); fg = OpenProcess(PROCESS_ALL_ACCESS | PROCESS_VM_READ, FALSE, pid); if (fg == NULL) { cerr <<"Can‘t Get Descriptor" << endl; cin.get(); exit(-1); } /////////////////////////////////////// cout << "Enter file name: "<<endl; cin >> ds; f=fopen(ds,"wb+"); while(adress<adrss) { if (ReadProcessMemory(fg,&lin,buf, 16,NULL) == 0) { cerr << endl << "Error occured! GetLastError() == " << GetLastError() << endl << "Error message is: "; char errorMsg[256]; char errorMsg2[256]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) errorMsg, 256, NULL); CharToOem(errorMsg, errorMsg2); cerr << errorMsg2 << endl; cin.get(); break; } cout << lin << endl; //////////////////////// /////////////////////// fwrite(&buf,1,15,f); lin++; ////////////////////// } return 0;}