ورود

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 میده.