هل استطيع نقل مكتبة Pas من دلفي7 إلى XE3 وتكون تعمل ؟
#1
السلام عليكم ورحمة الله وبركاتة

لاحظت بعض الاخطاء في XE3 وانا اعمل برنامجي عليه ... لكن في الدالة OpenProcess حصلت على خطا
وهو ان الدالة تعمل اثناء فتح البرنامج من خلال XE3 اما عندما افتح البرنامج كأي برنامج تنفيذي آخر لا تعمل

ففكرت وقلت انقل مكتبة الـPas الموجودة في Delphi7 إلى XE3 واعمل عليها فكيف اقووم بعمل ذلك :confused:
الرد
#2
ALmuhhnad كتب :ان الدالة تعمل اثناء فتح البرنامج من خلال XE3 اما عندما افتح البرنامج كأي برنامج تنفيذي آخر لا تعمل

ففكرت وقلت انقل مكتبة الـPas الموجودة في Delphi7 إلى XE3 واعمل عليها فكيف اقووم بعمل ذلك :confused:

و عليكم السلام و رحمة الله تعالى و بركاته
هل جربت اخي الكريم فتح البرنامج المستهدف بعد الحصول على privilege token للبرنامجك ؟

اما بالنسبة لاستعمال المكتبات الخارجية، احرص ان تكون متوافقة لان DXE3 تغير كثيرا -طبيعة و حجم المتغيرات بعد اضافة دعم الــ Unicode و دعم المنصات...

يمكنك وضع المكتبة التي تريد بجانب ملف المشروع لكي يتم تحميلها اولا او بالتعديل في مسار البحث الموجود في خيارات المشروع افضل من ان تستبدل المكتبات جذريا في نسخ دلفي...
الرد
#3
إقتباس : اما بالنسبة لاستعمال المكتبات الخارجية، احرص ان تكون متوافقة لان DXE3 تغير كثيرا -طبيعة و حجم المتغيرات بعد اضافة دعم الــ Unicode و دعم المنصات...

يمكنك وضع المكتبة التي تريد بجانب ملف المشروع لكي يتم تحميلها اولا او بالتعديل في مسار البحث الموجود في خيارات المشروع افضل من ان تستبدل المكتبات جذريا في نسخ دلفي...

شكراً آخي [ STRELiTZIA ] على الاجابة ... سأحاول ... رغم انه كماا ذكرت فلقد كنت اشك اني استطيع بسبب التطورات التي حدثت
من Delphi7 إلى XE3

إقتباس : هل جربت اخي الكريم فتح البرنامج المستهدف بعد الحصول على privilege token للبرنامجك ؟
لم افهم ماذا تعني بـ privilege token ... علماً اني أعمل Trainer للعبة ما ولاغيير في ذاكرة اللعبة استعمل الـ OpenProcess كي أستطيع التغيير في البياانات اوقراءتها

وهذا شكل الاستعمال :
كود :
PidHandle := OpenProcess(PROCESS_ALL_ACCESS,False,Pid); WritePTR_Word(PidHandle,$00897FE4,OFFSETs,1,trackbarSpeedMove.Position); CloseHandle(PidHandle);

ولكن بعد تنقيح البرنامج وجدت ان المشكلة في الدالة OpenProcess فهي تعيد القيمة 00 في PidHandle
اما اثناء تشغيلة من خلال XE3 كانت الدالة تعيد القيمة المطلوبة !

لست متأكداً انه في الدالة OpenProcess بالضبط لكن حتماَ المشلكة في XE3

قبل قليل قمت بتجربة البرنامج على جهاز آخر ووجدته يعمل على الجهاز الآخر ... آما على جهازي فهو لا يعمل إلا إذا كنت قد شغلته من خلال XE3 ... لذلك استغربت ...
ايضاً جربت نفس الاسطر في Delphi7 وكانت تعمل لذلك قلت ان المشكلة في XE3
الرد
#4
السلام عليكم و رحمة الله
فعلا، الاشكال الذي ذكرته في مشاركتك في محله و هو يخص تعريف الثابت process_all_access حسب اصدارات دلفي 7 و dxe3
حمل الشرح المرفق اخي الكريم...


الملفات المرفقة
.rar   Attached001.rar (الحجم : 68.54 ك ب / التحميلات : 23)
الرد
#5
الف شكر على المسا عدة أستاذي [ STRELiTZIA ]

لم اطبق اين من الحلول المقترحه بعد .... لكن لدي سؤال هل ستحل المشكلة عندما أغير في الكود

كود :
{ if NTDDI_VERSION >= NTDDI_VISTA } PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFFF); { else } //PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFF); { endif }

إلى

كود :
{ if NTDDI_VERSION >= NTDDI_VISTA } PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFF); { else } //PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFF); { endif }
قمت بتغيير FFFF إلى FFF

طبعاً سارجع التتيغرات بعدما اعمل برنامجي
الرد
#6
الحمد لله الحل الأول نجح بفضل الله ثم بفضل مساااعدتك استتذاي الفاضل [ STRELiTZIA ]

لكن لدي الفضول ان اعرف طريقة استعمال Token Privileges إذا لم يكن لديك مانع ان تدلني على شرح وافي لها
فمما اشرت انها تعطي برنامجي الصلاحيات ...إلخ ... وفعلاً في برنامجي لابد من الصلاحيات الكاملة لكي تتم جميع
وضائف البرنامج
الرد
#7
إقتباس :لكن لدي سؤال هل ستحل المشكلة عندما أغير في الكود
نعم، جربت الطريقتين تطبيقيا، و كلاهما يعملان...

إقتباس :قمت بتغيير FFFF إلى FFF

طبعاً سارجع التتيغرات بعدما اعمل برنامجي

في وحدة مشروعك يكفي تعريف القيمة الثابتة دون لمس وحدات دلفي، مثل:
PHP كود :
var
  
Main: TMain;
const
 
PROCESS_ALL_ACCESS = PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFFF);
implementation

{$R *.dfm} 

او

PHP كود :
var
  
Main: TMain;
const
 
PROCESS_ALL_ACCESS = PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFF);
implementation

{$R *.dfm} 

او

PHP كود :
hProcess := OpenProcess(STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFFF, FALSE, StrToInt(PidEdt.Text)); 

او

PHP كود :
hProcess := OpenProcess(STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFF, FALSE, StrToInt(PidEdt.Text)); 

إقتباس :لكن لدي الفضول ان اعرف طريقة استعمال Token Privileges إذا لم يكن لديك مانع ان تدلني على شرح وافي لها
ليس عندي مرجع واحد بل اتغذى من كل المراجع الموجودة بالنت و ابدا دائما من موقع msdn

بالتوفيق ان شاء الله
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم