BORHAN TEC
شنبه 09 آبان 1388, 12:48 عصر
سلام
با استفاده از برنامه زير مي توان ليست برنامه هاي در حال اجرا را به همراه مسير به نمايش در آورد :
در ابتدا عبارت Tlhelp32 را به قسمت uses اضافه كنيد
uses
TlHelp32;
سپس يك كنترل ListView به فرم اضافه كنيد ونام آنرا به lstview_MemoryScan تغيير دهيد.
سپس روي آن كليك راست كرده و columns editor را انتخاب كنيد و سه ستون براي آن تعريف كنيد. سپس تابعي مشابه تابع زير تعريف كنيد:
procedure TForm1.ShowProcessInMemoryScanListView(aProcessID: Cardinal);
var
ListItem : TListItem;
hSnapShot : Cardinal;
Info : tagMODULEENTRY32;
// S : LongBool;
exeName : String;
Drive : String;
begin
hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, aProcessID);
Info.dwSize := SizeOf(Info);
Module32NextW(hSnapShot, Info);
exeName := info.szExePath;
Drive := ExtractFileDrive(exeName);
// if (GetDriveType(PWideChar(Drive)) = DRIVE_REMOVABLE)
// and (exeName <> Application.ExeName) then begin
ListItem := lstview_MemoryScan.Items.Add;
ListItem.Caption := exeName ;
ListItem.SubItems.Add(IntToStr(aProcessID));
if (FileGetAttr(exeName) and 2 = 2) then
ListItem.SubItems.Add('Suspious')
else
ListItem.SubItems.Add('Safe');
// end; // End Of External If Statement
CloseHandle(hSnapShot);
end;
سپس يك دكمه روي فرم بياندازيد و كد زير را درون آن بنويسيد:
procedure TForm1.MemoryScanRefreshClick(Sender: TObject);
var
hSnapShot : Cardinal;
Info : tagPROCESSENTRY32W;
S : LongBool;
// exeName : String;
begin
// sleep(100);
lstview_MemoryScan.Clear;
hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Info.dwSize := SizeOf(Info);
S := Process32FirstW(hSnapShot, Info);
while (s <> False) do
begin
Info.dwSize := SizeOf(info);
ShowProcessInMemoryScanListView(Info.th32ProcessID );
S := Process32NextW(hSnapShot,Info);
end;
حال اگر برنامه را run كنيد ليست پروسه هاي در حال اجرا را مي بينيد.
پرسش (مشكل): وقتي برنامه را از درون دلفي ران ميكنم ليست برنامه ها را به درستي نمايش مي دهد اما اگر آنرا در محيط خارج از دلفي اجرا مي كنم ليست برنامه ها را به درستي نمايش نمي دهد! به نظر شما مشكل از كجا است؟؟؟؟؟؟؟.....:متفکر::چشمک:
در ضمن از دلفي 2010 استفاده كرده ام!
با استفاده از برنامه زير مي توان ليست برنامه هاي در حال اجرا را به همراه مسير به نمايش در آورد :
در ابتدا عبارت Tlhelp32 را به قسمت uses اضافه كنيد
uses
TlHelp32;
سپس يك كنترل ListView به فرم اضافه كنيد ونام آنرا به lstview_MemoryScan تغيير دهيد.
سپس روي آن كليك راست كرده و columns editor را انتخاب كنيد و سه ستون براي آن تعريف كنيد. سپس تابعي مشابه تابع زير تعريف كنيد:
procedure TForm1.ShowProcessInMemoryScanListView(aProcessID: Cardinal);
var
ListItem : TListItem;
hSnapShot : Cardinal;
Info : tagMODULEENTRY32;
// S : LongBool;
exeName : String;
Drive : String;
begin
hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, aProcessID);
Info.dwSize := SizeOf(Info);
Module32NextW(hSnapShot, Info);
exeName := info.szExePath;
Drive := ExtractFileDrive(exeName);
// if (GetDriveType(PWideChar(Drive)) = DRIVE_REMOVABLE)
// and (exeName <> Application.ExeName) then begin
ListItem := lstview_MemoryScan.Items.Add;
ListItem.Caption := exeName ;
ListItem.SubItems.Add(IntToStr(aProcessID));
if (FileGetAttr(exeName) and 2 = 2) then
ListItem.SubItems.Add('Suspious')
else
ListItem.SubItems.Add('Safe');
// end; // End Of External If Statement
CloseHandle(hSnapShot);
end;
سپس يك دكمه روي فرم بياندازيد و كد زير را درون آن بنويسيد:
procedure TForm1.MemoryScanRefreshClick(Sender: TObject);
var
hSnapShot : Cardinal;
Info : tagPROCESSENTRY32W;
S : LongBool;
// exeName : String;
begin
// sleep(100);
lstview_MemoryScan.Clear;
hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Info.dwSize := SizeOf(Info);
S := Process32FirstW(hSnapShot, Info);
while (s <> False) do
begin
Info.dwSize := SizeOf(info);
ShowProcessInMemoryScanListView(Info.th32ProcessID );
S := Process32NextW(hSnapShot,Info);
end;
حال اگر برنامه را run كنيد ليست پروسه هاي در حال اجرا را مي بينيد.
پرسش (مشكل): وقتي برنامه را از درون دلفي ران ميكنم ليست برنامه ها را به درستي نمايش مي دهد اما اگر آنرا در محيط خارج از دلفي اجرا مي كنم ليست برنامه ها را به درستي نمايش نمي دهد! به نظر شما مشكل از كجا است؟؟؟؟؟؟؟.....:متفکر::چشمک:
در ضمن از دلفي 2010 استفاده كرده ام!