سلام
چندتا سوال كوچولو زد به ذهنم ، نصفه شبي بلد شدم و ........
1 - processbar تو يك برنامه ديگه هست ، ميشه value اون رو خوند
2 - مي خوام properties آبجكتهايي كه تو برنامه هاي ديگه هست رو بدست بيارم مثل ليست باكس يا دكمه اگه بشه تغيير هم بدم معركه ميشه
3 - ميشه فهميد كه يك برنامه خارجي الان در حال اجراي sub هست يا نه ؟ اگر ميشه مي تونم اون sub يا function رو از كار بندازم . يا اطلاعاتي در موردش بدست بيارم (هرچي باشه كافيه ، مثلا زمان شروع )
فقط همينا ، ممنون از لطف دوستان كه مارو تنها نميزارن ، با تشكر !!! منتظر جواب ميمونم
سلام.
سوال اولت که نا مفهومه.
سوال دومت به راحتی امکان پذیره. باید هندل برنامه مورد نظرتو بگیری و بعد دنبال هندل های child اون بگردی. اگه تونستم سورسشو برات میذارم. هندل شی مورد نظرتو که گرفتی با setwindowtext میتونی متنشو عوض کنی. api های دیگم برای کارای دیگه هست.
سوال سوم هم فکر میکنم شدنیه. همون طور که آنتی ها تو کار برنامه های ما دخالت میکنن.
جناب vz76 لطفا سوالاتتونو تو تاپیکهای جدا گانه بپرسین
در مورد سوال اول:باید مقدار حافظه اون progressbar رو برای پیدا کردن مقدارش بگردین یعتی threadid مربوط به اونو بدست بیارین و تو یه حلقه اون بخش از حافظه رو با read process memory بخونین مثل کاری که برنامه های cheat engine بازیها انجام میدن
در مورد سوال دوم: هر برنامه ای تو ویندوز برای ارتباط با سایر اجزا از message استفاده میکنه شما میتونین با فرستاده این پیغامها به کمک دستور sendmessage حالتهای اون شیی رو تغییر بدین در مورد property ها هم معمولا مقادیر اونها در برنامه ثبت میشه تا در هنگام load با استفاده از انها مقدار دهی بشه شما میتونین به اون قسمت دسترسی پیدا کرده و مقدار property هر object رد به دلخواه تنظیم کنین
در مورد سوال سوم:هم کاریه که با استفاده از debuger ها میتونین فراخوانی یک روتین یا تابع رو تشخیص بدین و برای غیر فعال کردنش هم راه های زیادی هست که مربوط به بخش کرک میشه
سلام
سوال اول و دومم رو بايد يكي ميكردم چون يك مفهوم رو در برداره
( آقا پيمان اگر لطف كني و سورسش رو در حد راهنمائي هم بزاري ممنون ميشم )
در مورد سوال اول ( و دوم ) بايد بگم فرضا من با windowfrompoint هندل يك آبجكت رو گرفتم ، حالا چه طوري بايد اطلاعات ديگه اون رو بدست بيارم مثل : نام ، آبجكت والد ، اندازه ، مقادير آبجكتهايي مثل Progressbar و اطلاعاتي از اين قبيل
sendmessge كه دوستان فرمودن آرگومانهاي 2و3و4 چه مقاديري رو بايد بگيرن ، براي گرفتن اطلاعات هم اگر اشتباه نكنم Getmesage بايد باشه ، حالا اين يكي ديگه چي پارامترهايي رو ميگيره ؟
براي تغيير پارامترها و خوندن اونها فرض بر اين هست كه اون برنامه اجرا شده
راستي lord_viper عزيز اگر داري يك سورس كوچولو در حد راهنمايي با VB بزاري ممنون ميشم
ممنون
vz67 نوشته است:در مورد سوال اول ( و دوم ) بايد بگم فرضا من با windowfrompoint هندل يك آبجكت رو گرفتم ، حالا چه طوري بايد اطلاعات ديگه اون رو بدست بيارم مثل : نام ، آبجكت والد ، اندازه ، مقادير آبجكتهايي مثل
Progressbar و اطلاعاتي از اين قبيل
برای پیدا کردن این اطلاعات توابع api وجود داره مثل
getwindowclassname و get parent وAdjustWindowRect
نقل قول: sendmessge كه دوستان فرمودن آرگومانهاي 2و3و4 چه مقاديري رو بايد بگيرن ، براي گرفتن اطلاعات هم اگر اشتباه نكنم Getmesage بايد باشه ، حالا اين يكي ديگه چي پارامترهايي رو ميگيره ؟
هر شیی دستورات مربوط به خودشو داره مثلا اینا مال listbox هست
LB_ADDFILE
LB_ADDSTRING
LB_DELETESTRING
LB_DIR
برای اطلاعات بیشتر به msdn مراجعه کنین پارامترهای دوم و سوم بستگی به نوع پیغام داره ولی معمولا 0 هستند
نقل قول: براي تغيير پارامترها و خوندن اونها فرض بر اين هست كه اون برنامه اجرا شده
دقیقا همین طوره
نقل قول: راستي lord_viper عزيز اگر داري يك سورس كوچولو در حد راهنمايي با
یه کد عالی دارم ولی به دلفی هست امار کاملی میده که خودمم ازش استفاده میکنم
اگه به دردتون میخوره بگو سورسو خودشو با هم بزارم[/quote]
من كه از دلفي سر در نميارم ، ولي ميشه سورس رو بدي !؟
توابع API و نظم استفاده از اونهارو حداقل مي تونم ازش استخراج كنم ، درسته ؟
ممنون خيلي لطف كردي
برای تبدیل integer به hex
نقل قول: function Int2Hex( Value : DWord; Digits : Integer ) : String;
var Buf: array[ 0..8 ] of Char;
Dest : PChar;
function HexDigit( B : Byte ) : Char;
{$IFDEF F_P}
const
HexDigitChr: array[ 0..15 ] of Char = ( '0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F' );
begin
Result := HexDigitChr[ B and $F ];
end;
{$ELSE DELPHI}
asm
{$IFDEF PARANOIA}
DB $3C,9
{$ELSE}
CMP AL,9
{$ENDIF}
JA @@1
{$IFDEF PARANOIA}
DB $04, $30-$41+$0A
{$ELSE}
ADD AL,30h-41h+0Ah
{$ENDIF}
@@1:
{$IFDEF PARANOIA}
DB $04, $41-$0A
{$ELSE}
ADD AL,41h-0Ah
{$ENDIF}
end;
{$ENDIF F_P/DELPHI}
begin
Dest := @Buf[ 8 ];
Dest^ := #0;
repeat
Dec( Dest );
Dest^ := '0';
if Value <> 0 then
begin
Dest^ := HexDigit( Value and $F );
Value := Value shr 4;
end;
Dec( Digits );
until (Value = 0) and (Digits <= 0);
Result := Dest;
end;
گرفتن ادرس فایل exe از روی pid شناسه پروسه
نقل قول: function Pid2Path(PID: DWORD): string;
var
Handle: THandle;
begin
Result := 'Not Found!';
Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);
if Handle <> 0 then
try
SetLength(Result, MAX_PATH);
begin
if GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH) > 0 then
SetLength(Result, StrLen(PChar(Result)))
else
exit;
end
finally
CloseHandle(Handle);
end;
end;
گرفتن سایز فایل
نقل قول: function GetFileSize(sFilePath: String): Integer;
var
tsrRec: TSearchRec;
iRes: Integer;
begin
Result := 0;
FillChar(tsrRec,SizeOf(tsrRec),0);
iRes := SysUtils.FindFirst(sFilePath,faAnyFile,tsrRec);
if iRes = 0 then
begin
Result := tsrRec.Size;
SysUtils.FindClose(tsrRec);
end;
end;
اینجا یه timer هست
نقل قول: procedure TForm1.Timer1Timer(Sender: TObject);
var
Pos:Tpoint;
WHwnd:hwnd;
WinClass : Array[0..256] Of Char;
ParentClass : Array[0..256] Of Char;
Path,Name : string;
First:hwnd;
Rect:TRect;
ID,Tid:Cardinal;
info:tagWINDOWINFO;
style:integer;
Proc:Thandle;
Loop: Integer;
Size:integer;
ControlID:integer;
begin
گرفتن مکان مکانما
نقل قول: (*******************************************)
GetCursorPos(Pos);
Px.Text := intTostr(pos.X);
Py.Text := intTostr(pos.Y);
گرفتن هندل جایی که مکانما در انجا قرار دارد
نقل قول: (*******************************************)
WHwnd:=WindowFromPoint(Pos);
Hwt.Text := intTostr(WHwnd);
Hwh.Text := '0x'+int2hex(WHwnd,5);
گرفتن نام کلاس شیی
نقل قول: (*******************************************)
GetClassName(WHwnd,WinClass,255);
Cls.Text :=WinClass;
(*******************************************)
If SendMessage(WHwnd,EM_GETPASSWORDCHAR,0,0) <> 0 then
begin
Pw.Color := clyellow ;
Pw.Text := 'Yes';
end
else begin
Pw.Color:=clWindow ;
Pw.Text := 'No';
end;
گرقتن محدوده نمایش ان کنترل
نقل قول: (*******************************************)
GetWindowRect(WHwnd,Rect);
Rec.Text := '[ '+intTostr(Rect.Left )+' x '+intTostr(rect.Top)+' ]'+' [ '+intTostr(rect.Right)+' x '+intTostr(rect.Bottom)+' ] '+
intTostr(Rect.Right - Rect.Left )+ ' x '+intTostr(Rect.Bottom - Rect.Top);
اطلاعات مربوت به style کنترل
نقل قول: (*******************************************)
GetWindowInfo(WHwnd,info);
Style := info.dwStyle;
St.Text :='0x'+int2Hex(style,8);
بدشت اوردن شناسه ریسمان مربوط به ان کنترل
نقل قول: (*******************************************)
Tid:=GetWindowThreadProcessId(WHwnd,ID);
Path:=Pid2Path(ID);
Name:=ExtractFileName(Path);
Size:=GetFileSize(Path);
ControlID:=GetDlgCtrlID(WHwnd);
Fs.Text:=IntToStr(Size);
En.Text:=Name;
Pth.Text := Path;
Td.Text := intTostr(Tid);
Cid.Text := IntToStr(ControlID);
(*******************************************)
Pid.Text := intTostr(ID);
بدست اوردن parent ان کنترل
نقل قول: (*******************************************)
First:=GetParent(WHwnd);
Pcl.Text := intTostr(First);
(*******************************************)
Pch.Text := '0x'+int2hex(First,5);
بدست اوردن کلاس مربوط به parent
نقل قول: (*******************************************)
GetClassName(First,ParentClass,255);
Ph.Text := ParentClass;
(*******************************************)
end;
end.
موفق باشید[/quote]
اتفاقا نرم اقزاری رو که این کارو می کنه نوشتم، حتی سورس کد رو هم خودش تولید میکنه و در اختیار کاربر قرار میده و چندین امکان منحصر به فرد دیگه که به شخصه مشابهشو ندیدم در اختیار کاربر قرار میده...
1 ماه پیش نوشته بوذمش برای جشنواره خوارزمی البته فقط برای کسب تجربه شرکت کردم چون واقعا نمیدونم در چه سطحی برگزار میشه و برنامه من در اون سطح بود یا نه.
اگه وقت کردم با توضیحات کامل توی سایت میزارمش...