View Full Version : سوال: دلیل کار نکردن بعضی توابع در ویندوز 64
loo30fer
یک شنبه 02 مرداد 1390, 12:52 عصر
با سلام
میخواستم بدونم دلیل اینکه بعضی توابع در ویندوز 64 بیتی کار نمیکنند چیست مانند گرفتن Process PID ؟
ضمنا ممنون میشم راه حل رو هم بگین ؟ با تشکر
Felony
یک شنبه 02 مرداد 1390, 13:05 عصر
دلیل این هست که یک پروسه 32 بیتی نمیتونه به یک پروسه 64 بیتی دسترسی داشته باشه .
loo30fer
یک شنبه 02 مرداد 1390, 13:14 عصر
دلیل این هست که یک پروسه 32 بیتی نمیتونه به یک پروسه 64 بیتی دسترسی داشته باشه .
ممنون . خوب حالا راه حلی وجود داره ؟
Felony
یک شنبه 02 مرداد 1390, 18:02 عصر
باید از WMI استفاده کنی ؛ با استفاده از دستورات WQL یک Query از کلاس Win32_Process میگیری و ازش ProcessName و ProcessID رو درخواست میکنی ، چند روز پیش تو یه برنامه تحت شبکه به همچین چیزی نیاز داشتم و برای خودم نوشتم ، اون قسمت مورد نیازت رو ضمیمه کردم .
یوسف زالی
یک شنبه 02 مرداد 1390, 20:12 عصر
دلیل این هست که یک پروسه 32 بیتی نمیتونه به یک پروسه 64 بیتی دسترسی داشته باشه .
در این مورد توضیح بدین لطفا. ممنون.
من تونستم برای گرفتن Handle و PID از این دستورات استفاده کنم:
GetWindowThreadProcessId(h, PID); // handle ro midim PID mide
و این:
function EnumProcess(hHwnd: HWND; SpecialPID : integer): boolean; stdcall;
var
pPid: DWORD;
ClassName: string;
begin
GetWindowThreadProcessId(hHwnd, pPid);
if pPid = SpecialPID then
begin
SetLength(ClassName, 255);
SetLength(ClassName, GetClassName(hHwnd, PChar(className), Length(className)));
if SameText(ClassName, 'TApplication') then
hHwnd is your handle
end;
Result := true;
end;
.
.
EnumWindows(@EnumProcess, YourPID);
PID می دیم Handle میده.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.