PDA

View Full Version : شناسایی اجرا شدن یک فایل خاص



دنیای دلفی
سه شنبه 21 اسفند 1386, 17:45 عصر
سلام
می دانید که با استفاده از کد زیر می توان شناسایی اجرا شدن Internet Exporer را شناسایی کرد .




var
Task:HWND;


begin
Task:=FindWindow('IEFrame',nil);
Closewindow(Task);
end;




با استفاده از کد فوق می توان پنجره باز شده را می نی مایز کرد .
اما سوال اول چطوری می توان آن را Kill کرد . (بستن قطعی برنامه)
سوال دوم : برای اینترنت اکسپلورر IEFrame است برای Opera , FireFox ,NetScape به جای IEFrame باید چه عبارتی نوشت .

ممنون از راهنمایی دوستان :تشویق:

DAMAVAND
سه شنبه 21 اسفند 1386, 18:38 عصر
سلام
می دانید که با استفاده از کد زیر می توان شناسایی اجرا شدن Internet Exporer را شناسایی کرد .



با استفاده از کد فوق می توان پنجره باز شده را می نی مایز کرد .
اما سوال اول چطوری می توان آن را Kill کرد . (بستن قطعی برنامه)
سوال دوم : برای اینترنت اکسپلورر IEFrame است برای Opera , FireFox ,NetScape به جای IEFrame باید چه عبارتی نوشت .

ممنون از راهنمایی دوستان :تشویق:

برای بستن پنجره :



PostMessage(Handle,WM_CLOSE,0,0);

برای پیدا کردن پنجره FireFox :


procedure TForm1.Button1Click(Sender: TObject);
var
h:HWND;
begin
h:=FindWindow('MozillaUIWindowClass',nil);
PostMessage(h,WM_CLOSE,0,0);
end;

ولی این کاری که شما انجام میدی کار درستی نیست,یعنی پنجره مربوط به اون برنامه ها رو بدست بیاری و بعد ببندیشون.
کار درست این هست که چک کنی ببینی ایا پروسس مربوط به اون برنامه ها در حال اجرا هست یا نه , اگه در حال اجرا بود اون ها رو End Process کنی. تو سایت زیاد بحث شده یه جستجو کنی
پیدا میکنی .

موفق باشید

دنیای دلفی
سه شنبه 21 اسفند 1386, 19:25 عصر
ممنون از راهنمایی شما . دوست گرامی شما به نکته خوبی اشاره کردی ولی اگر کاربر اسم فایل مثلا iexplore.exe را به ie.exe تغییر بده بعد من چجوری توی proccess ها اون رو پیدا کنم مشکل من اینه اگر راهی هست راهنمایی کنید .

دنیای دلفی
سه شنبه 21 اسفند 1386, 19:31 عصر
ممنون کار کرد ولی برای Opera و NetScape این کد چیست /

دنیای دلفی
سه شنبه 21 اسفند 1386, 19:46 عصر
یک نکته کوچیک و یک مشکل بزرگ وجود داره . وقتی کاربر MyComputer یا هر پنجره دیگر را باز می کنه و یک آدرس اینترنتی رو می نویسه او پنجره MyComputer تبدیل می شه به Internter Explorer ولی نه در TaskManager فایل iexplore.exe دیده می شه نه با کد


procedure TForm1.Button1Click(Sender: TObject);
var
h:HWND;
begin
h:=FindWindow('IEFrame',nil);
PostMessage(h,WM_CLOSE,0,0);
end;
می شه اجرا شدن و بستن اینترنت اکسپلورر را شناسایی کرد . به نظر شما دوستان راهی هست .

DAMAVAND
سه شنبه 21 اسفند 1386, 20:09 عصر
برای Opera :


h:=FindWindow('OpWindow',nil);

برای NetScap :


h:=FindWindow('NS_AE_WindowClass',nil);

خوب مشکل کجاست ?????

پنجره MyComputer به Interner Explorer تبدیل میشه بعد همون کد اون رو میبنده !
من مشکلی ندیدم ????? !!!

فکر کنم شما میخوای دسترسی کاربر رو به اینترنت محدود کنید نه ???
برای این کار راههای بهتری هم وجود داره Registry و چند راه دیگه الان خاطرم نیست !
ولی تو سایت هستش.
موفق باشید

دنیای دلفی
سه شنبه 21 اسفند 1386, 21:13 عصر
یک تعدادی از هندلها پیدا کردم



Internet Explorer(4~7) <IEFrame> IEXPLORE
Netscape(6.x~7.x) <MozillaWindowClass> Netscape6 Netscape7.xx
Netscape(8.x) <NS_AE_WindowClass> Netscape Browser
Netscape(9.x) <MozillaUIWindowClass> Netscape Browser
Mozilla or Firefox <MozillaWindowClass> Mozilla
Mozilla or Firefox <MozillaUIWindowClass> Mozilla
SeaMonkey <MozillaUIWindowClass> SeaMonkey
Sleipnir(2.00) <SleipnirMainWindow> Sleipnir
Opera <Opera Main Window> Opera //توجه با فاصله درست است
Lunascape3 <Lunascape3MainWnd> Lunascape Version 3.0.0
Lunascape4 <Lunascape4MainWnd> Lunascape Version 4.5.0 beta2 or beta3

دنیای دلفی
سه شنبه 21 اسفند 1386, 21:30 عصر
آره درست حدس زدی می خواهم اینترنت را برای زمان مشخصی قطع کنم .
تو سایت چند روز جستجو وبررسی کردم به نتیجه مطلوبی نریسیدم . چون در این زمینه بررسی و درخواست زیادی نشده است .
بررسی های که خودم کردم به این نتیجه رسیدم که بهترین راه مثل یک فایروال عمل کردن یعنی پورت http یعنی 80 , پورت ftp یعنی 21 , smtp و pop3 یعنی 25 را ببندم . ولی جستجوی زیادی در گوگول و سایت انجام دادم کدی پیدا نکردم با Indy هم نشد . در سایت مطرح کردم برای بستن پورتهای TCP/IP با دلفی راهی هست کسی نتونست جوابی بده .
با رجیستری کلید خاصی پیدا نکردم (خیلی جستجو کردم)
حالا با این دست یافته ها بهترین راه را بستن مرورگرهای مختلف دیدم تا روش بستن پورتها را بررسی مجدد بکنم .

دنیای دلفی
سه شنبه 21 اسفند 1386, 21:36 عصر
کماکان مشکل باز شدن یک سایت در مای کامپیوتر وجود دارد که آن به شکل اینترنت اکسپلورر در می آید ولی پنجره باز شده بوسیله Findwindow شناسایی نمی شود که آن را ببندیم . اگر ممکنه بررسی کنید .

ممنون می شوم

Cave_Man
سه شنبه 21 اسفند 1386, 22:33 عصر
آره درست حدس زدی می خواهم اینترنت را برای زمان مشخصی قطع کنم .
تو سایت چند روز جستجو وبررسی کردم به نتیجه مطلوبی نریسیدم . چون در این زمینه بررسی و درخواست زیادی نشده است .
بررسی های که خودم کردم به این نتیجه رسیدم که بهترین راه مثل یک فایروال عمل کردن یعنی پورت http یعنی 80 , پورت ftp یعنی 21 , smtp و pop3 یعنی 25 را ببندم . ولی جستجوی زیادی در گوگول و سایت انجام دادم کدی پیدا نکردم با Indy هم نشد . در سایت مطرح کردم برای بستن پورتهای TCP/IP با دلفی راهی هست کسی نتونست جوابی بده .
با رجیستری کلید خاصی پیدا نکردم (خیلی جستجو کردم)
حالا با این دست یافته ها بهترین راه را بستن مرورگرهای مختلف دیدم تا روش بستن پورتها را بررسی مجدد بکنم .
چرا کانکشن اینترنتت رو قطع نمیکنی؟ بعد از سپری شدن اون زمان دوباره کامکشن رو برقرار میکنی.ساده ترین راه بهترین راهه!

دنیای دلفی
سه شنبه 21 اسفند 1386, 23:28 عصر
دوست گرامی ممنون از راهنمایی .
در جایی که می خواهم اینترنت قطع بشه از شبکه Lan برای اتصال به اینترنت استفاده می کنند . و نباید وقتی اینترنت قطع می شود Connection آن سیستم Disable بشود چون از کانکشن و کارت شبکه استفاده می کنند برای برنامه های حسابداری تحت شبکه و غیره من می خواهم فقط اینترنت قطع بشه و سایر امتیازات کار با شبکه برقرار بماند .

Cave_Man
چهارشنبه 22 اسفند 1386, 07:02 صبح
نوشتن برنامه های چند ردیفه در چنین مواقعی مزیت های خودش رو نشون میده
کلاینت به سرور فرمان میده و میگه که کانکشن ایرنتنتم رو قطع کن و بعد از سپری شدن اون زمان دوباره کلاینت درخواست برقراری کانکشن رو به سرور ارسال میکنه و اینترنت برقرار میشه
میتونید همین مکانیسم رو با همین Indy پیاده کنید

دنیای دلفی
چهارشنبه 22 اسفند 1386, 10:15 صبح
نرم افزار به اشتراک گذاری اینترنت بر روی سرور Winproxy است که این قابلیت را ندارد . وگرنه روش جالبی است

mortezakiaee
چهارشنبه 22 اسفند 1386, 11:11 صبح
ربطی به بحث نداره ولی اصولا برای کنترل اینترنت در شبکه از VPN استفاده می کنن که نتایج خیلی بهتری می ده.

دنیای دلفی
چهارشنبه 22 اسفند 1386, 14:22 عصر
ربطی به بحث نداره ولی اصولا برای کنترل اینترنت در شبکه از VPN استفاده می کنن که نتایج خیلی بهتری می ده.

اگر ممکنه یک مثال عملی بزنید

دنیای دلفی
چهارشنبه 22 اسفند 1386, 14:27 عصر
اگر ممکنه این رو بررسی کنیم که وقتی توی آدرس MyComputer یک سایت را می نویسیم و ظاهر مای کامپیوتر به شکل اینترنت اکسپلورر می شود ولی با دستور FindWindow('IEFrame',nil نمی شه اونو پیدا کرد و آن پنجره رو حذف کرد بنظر شما چطور میشه این وضعیت را شناسایی و مانع شد .

دنیای دلفی
چهارشنبه 22 اسفند 1386, 22:54 عصر
بعد از یک ماه تلاش و جستجو به یک روش عالی رسیدم شما هم استفاده کنید برای قطع و وصل اینترنت .


یادتون نره بعد از انجام کلیه کارها باید یک بار سیستم را ریست کنید:تشویق:


ابتدا فایل ndisapi.dll را در مسیر برنامه قرار دهید . سپس فایل ndisrd.sys را در پوشه System32/drivers کپی کنید .
سپس محتوای کد زیر را در فایل winpkf.pas کپی کنید و از نام فایل در Uses استفاده نمائید :





unit winpkf;

interface

uses
Windows, SysUtils;

const

// Some size constants
ADAPTER_NAME_SIZE = 256;
ADAPTER_LIST_SIZE = 32;
ETHER_ADDR_LENGTH = 6;
MAX_ETHER_FRAME = 1514;

// Adapter flags
MSTCP_FLAG_SENT_TUNNEL = $1; // Receive packets sent by MSTCP
MSTCP_FLAG_RECV_TUNNEL = $2; // Receive packets instead MSTCP
MSTCP_FLAG_SENT_LISTEN = $4; // Receive packets sent by MSTCP, original ones delivered to the network
MSTCP_FLAG_RECV_LISTEN = $8; // Receive packets received by MSTCP
MSTCP_FLAG_FILTER_DIRECT = $10; // In promiscuous mode TCP/IP stack receives all
// packets in the ethernet segment, to prevent this set this flag
// All packets with destination MAC different from FF-FF-FF-FF-FF-FF and
// network interface current MAC will be blocked

// By default loopback packets are passed to original MSTCP handlers without processing,
// to change this behavior use the flags below
MSTCP_FLAG_LOOPBACK_FILTER = $20; // Pass loopback packet for processing
MSTCP_FLAG_LOOPBACK_BLOCK = $40; // Silently drop loopback packets, this flag
// is recommended for usage in combination with
// promiscuous mode

// Device flags for intermediate buffer
PACKET_FLAG_ON_SEND = 1;
PACKET_FLAG_ON_RECEIVE = 2;

// filter flags
FILTER_PACKET_PASS = 1; // Pass packet if if matches the filter
FILTER_PACKET_DROP = 2; // Drop packet if it matches the filter
FILTER_PACKET_REDIRECT = 3; // Redirect packet to WinpkFilter client application

DATA_LINK_LAYER_VALID = 1; // Match packet against data link layer filter
NETWORK_LAYER_VALID = 2; // Match packet against network layer filter
TRANSPORT_LAYER_VALID = 4; // Match packet against transport layer filter

ETH_802_3 = 1;

ETH_802_3_SRC_ADDRESS = 1;
ETH_802_3_DEST_ADDRESS = 2;
ETH_802_3_PROTOCOL = 4;

IPV4 = 1;

IP_V4_FILTER_SRC_ADDRESS = 1;
IP_V4_FILTER_DST_ADDRESS = 2;
IP_V4_FILTER_PROTOCOL = 4;

IP_SUBNET_V4_TYPE = 1;
IP_RANGE_V4_TYPE = 2;

TCPUDP = 1;

TCPUDP_SRC_PORT = 1;
TCPUDP_DST_PORT = 2;

type

PTCP_AdapterList = ^TCP_AdapterList;
TCP_AdapterList = packed record
m_nAdapterCount: DWORD; // Number of adapters
m_szAdapterNameList: array[1..ADAPTER_LIST_SIZE, 1..ADAPTER_NAME_SIZE] of Char; // Array of adapter names
m_nAdapterHandle: array[1..ADAPTER_LIST_SIZE] of THANDLE; // Array of adapter handles, this are key handles for any adapter relative operation
m_nAdapterMediumList: array[1..ADAPTER_LIST_SIZE] of DWORD; // List of adapter mediums
m_czCurrentAddress: array[1..ADAPTER_LIST_SIZE, 1..ETHER_ADDR_LENGTH] of Byte; // current (configured) ethernet address
m_usMTU: array[1..ADAPTER_LIST_SIZE] of Word; // current adapter MTU
end;

PLIST_ENTRY = ^LIST_ENTRY;
LIST_ENTRY = record
Flink: PLIST_ENTRY;
Blink: PLIST_ENTRY;
end;

PINTERMEDIATE_BUFFER = ^INTERMEDIATE_BUFFER;
INTERMEDIATE_BUFFER = packed record
m_qLink: LIST_ENTRY;
m_dwDeviceFlags: DWORD;
m_Length: DWORD;
m_Flags: DWORD;
m_IBuffer: array[1..MAX_ETHER_FRAME] of Byte;
end;

PNDISRD_ETH_Packet = ^NDISRD_ETH_Packet;
NDISRD_ETH_Packet = packed record
Buffer: PINTERMEDIATE_BUFFER;
end;

PETH_REQUEST = ^ETH_REQUEST;
ETH_REQUEST = packed record
hAdapterHandle: THANDLE;
EthPacket: NDISRD_ETH_Packet;
end;

PADAPTER_MODE = ^ADAPTER_MODE;
ADAPTER_MODE = packed record
hAdapterHandle: THANDLE;
dwFlags: DWORD;
end;

PADAPTER_EVENT = ^ADAPTER_EVENT;
ADAPTER_EVENT = packed record
hAdapterHandle: THANDLE;
hEvent: THANDLE;
end;

PPACKET_OID_DATA = ^PACKET_OID_DATA;
PACKET_OID_DATA = packed record
hAdapterHandle: THANDLE;
Oid: DWORD;
Length: DWORD;
Data: array[1..2] of Byte;
end;

TETH_802_3_FILTER = packed record
m_ValidFields: Cardinal; // Specifies which of the fileds below contain valid values and should be matched against the packet
m_SrcAddress: array[1..ETHER_ADDR_LENGTH] of byte; // Source MAC address
m_DstAddress: array[1..ETHER_ADDR_LENGTH] of byte; // Destination MAC address
m_Protocol: system.Word; // EtherType
Padding:system.Word;
end;

TDATA_LINK_LAYER_FILTER = packed record
m_dwUnionSelector: Cardinal;
m_Eth8023Filter: TETH_802_3_FILTER;
end;

TIP_SUBNET_V4 = packed record
m_Ip: Cardinal; // IPv4 address expressed as ULONG
m_IpMask: Cardinal; // IPv4 mask expressed as ULONG
end;

TIP_RANGE_V4 = packed record
m_StartIp: Cardinal; // IPv4 address expressed as ULONG
m_EndIp: Cardinal; // IPv4 address expressed as ULONG
end;

TIP_ADDRESS_V4 = packed record
m_AddressType: Cardinal; // Specifies which of the IP v4 address types is used below
case integer of
0: (m_IpSubnet: TIP_SUBNET_V4);
1: (m_IpRange: TIP_RANGE_V4);
end;

TIP_V4_FILTER = packed record
m_ValidFields: Cardinal; // Specifies which of the fileds below contain valid values and should be matched against the packet
m_SrcAddress: TIP_ADDRESS_V4; // IP v4 source address
m_DstAddress: TIP_ADDRESS_V4; // IP v4 destination address
m_Protocol: byte; // Specifies next protocol
Padding: array[1..3] of byte;
end;

TNETWORK_LAYER_FILTER = packed record
m_dwUnionSelector: Cardinal;
m_IPv4: TIP_V4_FILTER;
end;

TPORT_RANGE = packed record
m_StartRange: System.Word;
m_EndRange: System.Word;
end;

TTCPUDP_FILTER = packed record
m_ValidFields: Cardinal; // Specifies which of the fileds below contain valid values and should be matched against the packet
m_SrcPort: TPORT_RANGE; // Source port
m_DstPort: TPORT_RANGE; // Destination port
end;

TRANSPORT_LAYER_FILTER = packed record
m_dwUnionSelector: Cardinal;
m_TcpUdp: TTCPUDP_FILTER;
end;

TSTATIC_FILTER = packed record
m_Adapter: Int64; // Adapter handle extended to 64 bit size for structure compatibility across x64 and x86
m_dwDirectionFlags: Cardinal; // PACKET_FLAG_ON_SEND or/and PACKET_FLAG_ON_RECEIVE
m_FilterAction: Cardinal; // FILTER_PACKET_XXX
m_ValidFields: Cardinal; // Specifies which of the fileds below contain valid values and should be matched against the packet

m_LastReset: Cardinal; // Time of the last counters reset (in seconds passed since 1 Jan 1980)
m_Packets: Int64; // Packets passed through this filter
m_Bytes: Int64; // Bytes passed through this filter
m_DataLinkFilter: TDATA_LINK_LAYER_FILTER;
m_NetworkFilter: TNETWORK_LAYER_FILTER;
m_TransportFilter: TRANSPORT_LAYER_FILTER;
end;

PSTATIC_FILTER_TABLE =^TSTATIC_FILTER_TABLE;
TSTATIC_FILTER_TABLE = packed record
m_TableSize: Cardinal; // number of STATIC_FILTER entries
m_StaticFilters: array[0..1] of TSTATIC_FILTER;
end;

procedure InitNDISAPI;
procedure FreeNDISAPI;

var
NDISAPIHandle: THandle = 0;

OpenFilterDriver: function(pszFileName : Pchar): THANDLE; stdcall;
CloseFilterDriver: procedure(hOpen: THANDLE); stdcall;
GetDriverVersion: function(hOpen: THANDLE): DWORD; stdcall;
GetTcpipBoundAdaptersInfo: function(hOpen: THANDLE; pAdapters: PTCP_AdapterList): DWORD; stdcall;
SendPacketToMstcp: function(hOpen: THANDLE; pPacket: PETH_REQUEST): DWORD; stdcall;
SendPacketToAdapter: function(hOpen: THANDLE; pPacket: PETH_REQUEST): DWORD; stdcall;
ReadPacket: function(hOpen: THANDLE; pPacket: PETH_REQUEST): DWORD; stdcall;
SetAdapterMode: function(hOpen: THANDLE; pMode: PADAPTER_MODE): DWORD; stdcall;
GetAdapterMode: function(hOpen: THANDLE; pMode: PADAPTER_MODE): DWORD; stdcall;
FlushAdapterPacketQueue: function(hOpen: THANDLE; hAdapter: THANDLE): DWORD; stdcall;
GetAdapterPacketQueueSize: function(hOpen: THANDLE; hAdapter: THANDLE; pdwSize: PDWORD): DWORD; stdcall;
SetPacketEvent: function(hOpen: THANDLE; hAdapter: THANDLE; hWin32Event: THANDLE): DWORD; stdcall;
SetWANEvent: function(hOpen: THANDLE; hWin32Event: THANDLE): DWORD; stdcall;
SetAdapterListChangeEvent: function(hOpen: THANDLE; hWin32Event: THANDLE): DWORD; stdcall;
NdisrdRequest: function(hOpen: THANDLE; OidData: PPACKET_OID_DATA; dwSet: DWORD): DWORD; stdcall;
SetHwPacketFilter: function(hOpen: THANDLE; hAdapter: THANDLE; dwFilter: DWORD):DWORD; stdcall;
GetHwPacketFilter: function(hOpen: THANDLE; hAdapter: THANDLE; var dwFilter: DWORD):DWORD; stdcall;
SetMTUDecrement: function(dwMTUDecrement: DWORD): DWORD; stdcall;
GetMTUDecrement: function(): DWORD; stdcall;
SetAdaptersStartupMode : function(dwStartupMode: DWORD): DWORD; stdcall;
GetAdaptersStartupMode: function(): DWORD; stdcall;
IsDriverLoaded: function(hOpen: THANDLE): Boolean; stdcall;
GetBytesReturned: function(hOpen: THANDLE): DWORD; stdcall;
SetPacketFilterTable: function(hOpen: THANDLE; pFilterList: PSTATIC_FILTER_TABLE): Boolean; stdcall;
GetPacketFilterTable: function(hOpen: THANDLE; pFilterList: PSTATIC_FILTER_TABLE): Boolean; stdcall;
GetPacketFilterTableResetStats: function(hOpen: THANDLE; pFilterList: PSTATIC_FILTER_TABLE): Boolean; stdcall;
ResetPacketFilterTable: function(hOpen: THANDLE): Boolean; stdcall;
GetPacketFilterTableSize: function(hOpen: THANDLE; pSize: PDWORD): Boolean; stdcall;
ConvertWindowsNTAdapterName: function(szAdapterName: Pchar; szUserFriendlyName: Pchar; dwUserFriendlyNameLength: DWORD): DWORD; stdcall;
ConvertWindows2000AdapterName: function(szAdapterName: Pchar; szUserFriendlyName: Pchar; dwUserFriendlyNameLength: DWORD): DWORD; stdcall;
ConvertWindows9xAdapterName: function(szAdapterName: Pchar; szUserFriendlyName: Pchar; dwUserFriendlyNameLength: DWORD): DWORD; stdcall;

implementation

procedure InitNDISAPI;
begin
if NDISAPIHandle = 0 then
begin
NDISAPIHandle := LoadLibrary('NdisApi.dll');
if NDISAPIHandle <> 0 then
begin
OpenFilterDriver := GetProcAddress(NDISAPIHandle, 'OpenFilterDriver');
CloseFilterDriver := GetProcAddress(NDISAPIHandle, 'CloseFilterDriver');
GetDriverVersion := GetProcAddress(NDISAPIHandle, 'GetDriverVersion');
GetTcpipBoundAdaptersInfo := GetProcAddress(NDISAPIHandle, 'GetTcpipBoundAdaptersInfo');
SendPacketToMstcp := GetProcAddress(NDISAPIHandle, 'SendPacketToMstcp');
SendPacketToAdapter := GetProcAddress(NDISAPIHandle, 'SendPacketToAdapter');
ReadPacket := GetProcAddress(NDISAPIHandle, 'ReadPacket');
SetAdapterMode := GetProcAddress(NDISAPIHandle, 'SetAdapterMode');
GetAdapterMode := GetProcAddress(NDISAPIHandle, 'GetAdapterMode');
FlushAdapterPacketQueue := GetProcAddress(NDISAPIHandle, 'FlushAdapterPacketQueue');
GetAdapterPacketQueueSize := GetProcAddress(NDISAPIHandle, 'GetAdapterPacketQueueSize');
SetPacketEvent := GetProcAddress(NDISAPIHandle, 'SetPacketEvent');
SetWANEvent := GetProcAddress(NDISAPIHandle, 'SetWANEvent');
SetAdapterListChangeEvent := GetProcAddress(NDISAPIHandle, 'SetAdapterListChangeEvent');
NdisrdRequest := GetProcAddress(NDISAPIHandle, 'NdisrdRequest');
SetHwPacketFilter := GetProcAddress(NDISAPIHandle, 'SetHwPacketFilter');
GetHwPacketFilter := GetProcAddress(NDISAPIHandle, 'GetHwPacketFilter');
SetMTUDecrement := GetProcAddress(NDISAPIHandle, 'SetMTUDecrement');
GetMTUDecrement := GetProcAddress(NDISAPIHandle, 'GetMTUDecrement');
SetAdaptersStartupMode := GetProcAddress(NDISAPIHandle, 'SetAdaptersStartupMode');
GetAdaptersStartupMode := GetProcAddress(NDISAPIHandle, 'GetAdaptersStartupMode');
IsDriverLoaded := GetProcAddress(NDISAPIHandle, 'IsDriverLoaded');
GetBytesReturned := GetProcAddress(NDISAPIHandle, 'GetBytesReturned');
SetPacketFilterTable := GetProcAddress(NDISAPIHandle, 'SetPacketFilterTable');
GetPacketFilterTable := GetProcAddress(NDISAPIHandle, 'GetPacketFilterTable');
GetPacketFilterTableResetStats := GetProcAddress(NDISAPIHandle, 'GetPacketFilterTableResetStats');
ResetPacketFilterTable := GetProcAddress(NDISAPIHandle, 'ResetPacketFilterTable');
GetPacketFilterTableSize := GetProcAddress(NDISAPIHandle, 'GetPacketFilterTableSize');
ConvertWindowsNTAdapterName := GetProcAddress(NDISAPIHandle, 'ConvertWindowsNTAdapterName');
ConvertWindows2000AdapterName := GetProcAddress(NDISAPIHandle, 'ConvertWindows2000AdapterName');
ConvertWindows9xAdapterName := GetProcAddress(NDISAPIHandle, 'ConvertWindows9xAdapterName');
end
else
begin
raise Exception.Create('Cannot load library "NDISAPI.DLL"');
end;
end;
end;

procedure FreeNDISAPI;
begin
if NDISAPIHandle <> 0 then
begin
FreeLibrary(NDISAPIHandle);
NDISAPIHandle := 0;
end;
end;

end.






حالا این هم کد برنامه : یک کم بررسی کنید یک کلید برای قطع اینترنت یکی برای وصل یکی هم فقط یک بار استفاده کنید برای نوشتن برنامه در رجیستری .





unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,winpkf, StdCtrls,Registry;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SetOrClear(Flag:Byte);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}


var
iIndex, counter: DWORD;
hFilt: THANDLE;
Adapts: TCP_AdapterList;
AdapterMode: ADAPTER_MODE;
Buffer: INTERMEDIATE_BUFFER;
ReadRequest: ETH_REQUEST;
hEvent: THANDLE;
hAdapter: THANDLE;


Function IDAdapter:Byte;
var
i: integer;
hFilt: THANDLE;
Adapts: PTCP_AdapterList;
Mode: PADAPTER_MODE;
aname: array[0..1023] of char;
VerInfo: TOSVersionInfo;
dwMTUDec: DWORD;
dwAdapterStartupMode: DWORD;

begin
// Allocate TCP_AdapterList record
new(Adapts);

// Allocate ADAPTER_MODE
new(Mode);

VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(VerInfo);

// Initialize NDISAPI
InitNDISAPI();

dwMTUDec := GetMTUDecrement();
dwAdapterStartupMode := GetAdaptersStartupMode();

// Create driver object
hFilt := OpenFilterDriver('NDISRD');

// Check if driver loaded
if IsDriverLoaded(hFilt) then begin

GetTcpipBoundAdaptersInfo (hFilt, Adapts);
for i := 1 to Adapts.m_nAdapterCount do begin
// Convert internal network interface name to user-friendly one depending of the OS
if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
if VerInfo.dwMajorVersion = 4 then
ConvertWindowsNTAdapterName(PChar(string(Adapts.m_ szAdapterNameList[i])), aname, 1024)
else
ConvertWindows2000AdapterName(PChar(string(Adapts. m_szAdapterNameList[i])), aname, 1024)
else
ConvertWindows9xAdapterName(PChar(string(Adapts.m_ szAdapterNameList[i])), aname, 1024);

// Dump some network interface information
Showmessage(IntToStr(i)+') '+string(aname));

Mode.hAdapterHandle := Adapts.m_nAdapterHandle[i];
GetAdapterMode(hFilt, Mode);

end;
end;

// Perform cleanup
dispose(Adapts);
CloseFilterDriver (hFilt);

// Release NDISAPI
FreeNDISAPI();



end;



procedure ReleaseInterface();
begin
// Restore default mode
AdapterMode.dwFlags := 0;
AdapterMode.hAdapterHandle := hAdapter;
SetAdapterMode ( hFilt, @AdapterMode );

// Set NULL event to release previously set event object
SetPacketEvent (hFilt, hAdapter, 0);

// Close Event
if hEvent <> 0 then CloseHandle(hEvent);

// Close driver object
CloseFilterDriver (hFilt);

// Release NDISAPI
FreeNDISAPI();
end;

procedure TForm1.SetOrClear(Flag:Byte);
begin
// Initialize NDISAPI
InitNDISAPI();
// Create driver object
hFilt := OpenFilterDriver('NDISRD');
if IsDriverLoaded(hFilt) then
begin
// Get parameters from command line
iIndex :=StrToInt(Edit1.Text); //ßÏ ßÇÑÊ ÔÈßå
counter :=1; //ÊÚÏÇÏ ßÊåÇíí ßå ÈÇíÏ ÝíáÊÑ ÔæäÏ

ExitProcessProc := ReleaseInterface;

// Get TCP/IP bound interfaces
GetTcpipBoundAdaptersInfo (hFilt, @Adapts);

// Check paramer values
if iIndex > Adapts.m_nAdapterCount then
Exit;


hAdapter := Adapts.m_nAdapterHandle[iIndex];

AdapterMode.dwFlags :=Flag;
AdapterMode.hAdapterHandle := hAdapter;

// Create notification event
hEvent := CreateEvent(Nil, TRUE, FALSE, Nil);

if hEvent <> 0 then
if SetPacketEvent (hFilt, hAdapter, hEvent) <> 0 then
begin
// Initialize request
ReadRequest.EthPacket.Buffer := @Buffer;
ReadRequest.hAdapterHandle := hAdapter;

SetAdapterMode ( hFilt, @AdapterMode );

end;
end;


end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SetOrClear(0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SetOrClear(MSTCP_FLAG_SENT_TUNNEL or MSTCP_FLAG_RECV_TUNNEL);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
MyReg: TRegistry;
begin
MyReg := TRegistry.Create;
with MyReg do
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('\System\CurrentControlSet\Services\NDISRD ', True);
WriteInteger('Type',1);
WriteString('Group','Streams Drivers');
WriteInteger('Start',1);
WriteInteger('Error Control',1);
CloseKey;
end;

end;

end.



حالا حالشو ببرید:قلب::گیج::تشویق::لبخند: