PersianTools Forums

Go Back   PersianTools Forums > اینترنت و شبکه > موضوعات عمومی اینترنت

View Poll Results: من از نت كنتور استفاده مي كنم و آن را به ديگران هم...
توصيه مي كنم 4 66.67%
توصيه نمي كنم 2 33.33%
Voters: 6. You may not vote on this poll

Reply
 
امکانات بيشتر نحوه نمايش
Old 05-04-2007, 02:47 PM   #1
javad2000
Registered User
 
javad2000's Avatar
 

Join Date: Jul 2005
Posts: 1,402
Send a message via Yahoo to javad2000
NetCounter كنتور اينترنتي (نمايشگر مصرف اينترنت كنار ساعت كامپيوتر)

,ويرايش: نسخه جديد اين نرم افزار در پست 6
سلام

از بس دنبال كنتور رايگان جهت نظارت بر مصرف اشتراك هاي اينترنتم گشتم و پيدا نشد، تصميم گرفتم طرز ساختن اونها رو ياد گرفته و شخصاً يكي درست كنم. بالاخره، اين كار امكان پذير شد. شما هم ميتونيد ضمن استفاده از اين برنامه كه ظرف 30 ثانيه نصب ميشه ، امكانات مورد نياز شخصيتون رو ذكر كنيد تا در نسخه هاي بعدي تعبيه كنيم.



نسخه فعلي: NetCounter 1.0
ويژگي ها:
1- نمايش مدت اتصال (بر حسب دقيقه) كنار ساعت كامپيوتر
2- تشخيص خودكار قطع و وصل اينترنت
3- محاسبه كل مصرف هر يك از اشتراك ها
4- محاسبه كل استفاده هر يك از كاربران
5- محاسبه ميانگين مصرف (در هر روز، در هر ماه، در هر بار اتصال)
6- محاسبه ميانگين سرعت هر يك از كانكشن ها
7- ثبت و نمايش ساعت، تاريخ و مدت زمان دقيق تمام اتصال ها
8- و...

جالب اينجاست كه اين برنامه حجم بسيار كمي از رم (فقط 32 KB) و سي پي يو (تقريباً 0%) را به خود اختصاص مي دهد كه به هيچ وجه باعث كاهش سرعت سيستم نخواهد شد. در عين حال، هر زمان بخواهيد مي توانيد آن را Uninstall كنيد.

نكته مهم:
1- پس از دانلود، فايل "Setup.pdf" را به "Setup.exe" تغيير نام داده و نصب كنيد.
2- در آخرين مرحله نصب، گزينه "Launch Program" را فعال نگاه داشته، Finish را بزنيد. چند لحظه بعد صفحه جديدي ظاهر مي شود كه در آن صفحه گزينه Install را بزنيد تا نصب پايان يابد.
3- امكانات كامل برنامه، بعد از اولين ريستارت سيستم فعال خواهند شد.
Attached Files
File Type: pdf Setup.pdf (1.55 MB, 114 views)
__________________
EZ Type 2008 (new)

Vision without action is a daydream. Action without vision is a nightmare.
Japanese Proverb
هدف بي عمل، روياست، عمل بي هدف، كابوس است.

آموزش: Excel, Access, PowerPoint,Word, Touch-Typing، Windows Optimization، Islamic Astronomy، Poem Analyzing
نرم افزار: EZ Player, EZ Type, Net Counter, RuzShomar, EZ Calendar

Last edited by javad2000; 12-16-2007 at 12:12 AM.
javad2000 is offline   Reply With Quote
Old 05-04-2007, 10:25 PM   #2
nsh
Registered User
 
nsh's Avatar
 

Join Date: Jan 2006
Location: i & j : 2 & 3
Posts: 761
Send a message via Yahoo to nsh
ایول به نظر خیلی جالب میاد
__________________
.... So many things I never could see so many choices fallen on me could it be my destiny to be ....






مدتي نيستم
nsh is offline   Reply With Quote
Old 05-10-2007, 06:09 PM   #3
javad2000
Registered User
 
javad2000's Avatar
 

Join Date: Jul 2005
Posts: 1,402
Send a message via Yahoo to javad2000
نسخه جديد

سلام

اين هم NetCounter 1.0.0.6 كه نسبت به نسخه قبلي (1.0) يكي از حفره (Bug) هاي آن كه باعث Error هاي نا بهنگام مي شد، برطرف شده.

روش نصب، مشابه قبلي است. يعني فايل Setup.pdf را به Setup.exe تغيير نام داده و نصب مي كنيد. در مرحله آخر نصب هم گزينه Launch program را فعال بگذاريد.

فراموش نكنيد كه براي اجرا شدن تمام برنامه هاي نوشته شده با زبان هاي زيرمجمعه ويژوال استوديو دات نت بايد نرم افزار dotnet Framework روي سيستم نصب باشد. (اگه خواستيد لينك دانلود بدم)

نكته:
قبل از نصب نسخه جديد، لازم است نسخه قبلي (در صورت وجود) Uninstall شود. (از طريق Control Panel> Add or Remove programs)
Attached Files
File Type: pdf setup.pdf (1.82 MB, 57 views)

Last edited by javad2000; 05-30-2007 at 08:57 PM.
javad2000 is offline   Reply With Quote
Old 05-11-2007, 08:56 PM   #4
tkavosh
Registered User
 
tkavosh's Avatar
 

Join Date: Mar 2005
Posts: 535
با سپاس از برنامه .
این برنامه را با چه زبانی نوشتید؟
__________________
______________________________________
کورش،
آسوده بخواب که فرزندان راستين تو ايران را از تازيان بازپس خواهند گرفت
.
Cyrus,
Sleep peacefully that we are awake
...And The Legend Goes On
ad
tkavosh is offline   Reply With Quote
Old 05-30-2007, 08:58 PM   #5
javad2000
Registered User
 
javad2000's Avatar
 

Join Date: Jul 2005
Posts: 1,402
Send a message via Yahoo to javad2000
Quote:
با سپاس از برنامه .
این برنامه را با چه زبانی نوشتید؟
Visual Basic.net 2005
javad2000 is offline   Reply With Quote
Old 12-15-2007, 08:36 PM   #6
javad2000
Registered User
 
javad2000's Avatar
 

Join Date: Jul 2005
Posts: 1,402
Send a message via Yahoo to javad2000
NetCounter 2007 (فارسي)

تذكر: اين نسخه، هر گونه كانكشن حقيقي يا مجازي شبكه را به عنوان «اينترنت» فرض مي كند.
سلام
به خاطر مشكلاتي كه در نسخه قبلي داشتيم و باعث كمي تاخير در استارتاپ ويندوز مي شد، نسخه جديد رو با امكانات بيشتر و در عين حال بسيار سبك تر و سريع تر طراحي كردم طوري كه:

منابع سيستم:
اشغال رم: 19 MB
‍اشغال سي پي يو: 0%
سرعت لود شدن: كمتر از 1 ثانيه




يك امكان جالب كه اين يكي نسبت به قبلي داره، امكان اتصال از طريق خود برنامه و ديگري محاسبه مدت زمان اتصال ها بر اساس نام كاربري كانكشن به جاي نام كانكشن هست (اگه يه كارت جديد از همون شركت قبلي بخريم، مدت اون جداگانه محاسبه مي شه).

ديگر امكانات:
1- (مثل نسخه قبل) محاسبه متوسط مصرف روزانه، ماهانه و متوسط هر اتصال

2- محاسبه مصرف روزانه و شبانه به طور مجزا طبق تنظيم ساعات نيم بهاي شبانه (با روز و شب تقويمي اشتباه گرفته نشه)


3- نمايش كل كاركرد هر كاربر ويندوز و كل استفاده هر كاربر از هر كارت اينترنت


4- تشخيص خودكار اتصال و قطع شدن اينترنت و نمايش مدت اتصال، كنار ساعت كامپيوتر با دقت زياد


5- در صورتي كه بيش از 1 ويندوز روي سيستم داريد، توي ويندوز دوم، نيازي به نصب مجدد برنامه نيست. كافيه ميانبر فايل اجرايي اون رو به استارتاپ ويندوز دوم اضافه كنيد تا از بانك داده مشترك براي محاسبه كانكشن هاي هر دو ويندزو و جمع كردن اونها با هم براي محاسبه دقيق تر استفاده كنه. (فقط با ويستا سازگار نيست)

6- ثبت و محاسبه سرعت متوسط كانكشن ها و سرعت متوسط دانلود



لينك دانلود (735 كيبوبايت)

پيش نياز:
.Net Framework 2
(در زمان نصب خود به خود چك ميشه)


تذكر مهم:
1- امنيت اين نرم افزارها رو شخصاً تضمين مي كنم. (اينجا، خيلي ها من رو مي شناسند)
2- محاسبه زمان اتصال شبانه، بر اساس تنظيم ساعت نيم بها هست و اگر تنظيم نكنيد، به طور پيشفرض از ساعت 1 شب تا 7 صبح حساب ميشه.
3- محاسبه سرعت دانلود، با دانلود يك فايل بسيار كوچك از اينترنت انجام ميشه. دقت اين محاسبه زياد نيست ولي دانستن اين عدد هم خالي از لطف نيست.

Last edited by javad2000; 02-19-2008 at 02:28 PM.
javad2000 is offline   Reply With Quote
Old 12-15-2007, 08:54 PM   #7
R E Z A
Registered User
 
R E Z A's Avatar
 

Join Date: Feb 2007
Location: TeHrAn
Posts: 1,364
جواد جان ممنون از زحمتی که کشیدی منتها من فایلی رو که دانلود کردم وقتی پسوندش رو به exe. تغییر میدم هیچ تغییری تو فایل PDF ایجاد نمیشه.
__________________


----------------------------------------------------------------------------------------
My Favorites:
Digital Camera : Digital Camera Info | Pro Photo Com | DPReview | Akkasee
Mobile & PDA : GSM Arena | PDA db | Zedge | Mobile 9
----------------------------------------------------------------------------------------
Reza





R E Z A is offline   Reply With Quote
Sponsored links
Old 12-16-2007, 12:49 AM   #8
javad2000
Registered User
 
javad2000's Avatar
 

Join Date: Jul 2005
Posts: 1,402
Send a message via Yahoo to javad2000
Quote:
نوشته ای از R E Z A View Post
جواد جان ممنون از زحمتی که کشیدی منتها من فایلی رو که دانلود کردم وقتی پسوندش رو به exe. تغییر میدم هیچ تغییری تو فایل PDF ایجاد نمیشه.
رضاجان، اون PDF رو كه به exe تبديل كني، وقتي روش دوبار كليك مي كني، بايد اجرا بشه. فكر نمي كنم مشكلي از اين بابت باشه. ولي شما چرا نسخه قديمي رو دانلود مي كني. اين نسخه جديد رو كه تو پست 6 لينك دادم دانلود كن. پسوندش Rar هست. كافيه اون رو Unrar كني و فايل Setup رو اجرا كني.

مشكلي بود بگو.
javad2000 is offline   Reply With Quote
Old 02-10-2008, 07:47 PM   #9
igimax
کاربر فعال سیستم عامل
Trusted Member
 
igimax's Avatar
Icon13 InternetGetConnectionState

سلام جواد جان

. چند روز پيش به خاطر پست جديدي كه در تاپيك "راهنماي تبديل تاريخ هاي شمسي، ..." داديد و به آنجا سري زدم متوجه لينك‌هاي برنامه در امضا‌شما شدم وقتي نگاه كردم ديدم همه كار شماست. ايــــــــــــــول

. يكي از آن برنامه‌ها توجه‌ام را جلب كرد، اونم برنامه‌ اين تاپيك بود. علتش هم اين بود كه برنامه‌اي مشابه اين را خيلي وقت پيش (سال 2000) نوشته بودم. برام جالب بود ببينم همون مشكلاتي كه روزهاي اول من هم با اين برنامه داشتم آيا شما داريد يا آنها را حل نموديد.

. متاسفانه اولين مشكل يعني "تشخيص دسترسي داشتن به اينترنت" و در پي آن "ارتباط از طريق چه كانكشن يا وسيله‌اي" و در پي آن "چه نوع ارتباطي" وجود داشت. دو مورد 2 و 3 شايد مهم نباشد، اما مورد 1 ، اگر به درستي اجرا نشود باعث اختلال در كار برنامه و در نتيجه اشتباه تشخيص دادن "دسترسي به اينترنت" مي‌شود.

. مشكل برنامه در اين است كه اگر يك كانكشن LAN موجود باشد، برنامه شما آن را به عنوان يك كانكشن اينترنتي فرض مي‌كند. به مجرد اينكه برنامه شما را اجرا كردم گفت: "شما از طريق كارت DVB به اينترنت وصل شده‌ايد!!!!" نمي‌دانم از چه روشي براي تشخيص كانكشن استفاده نموديد اما زماني كه آمدم كارت DVB را Disable كنم، با پيغام خطا "اين كار ممكن نيست چون برنامه‌اي به آن دسترسي دارد" مواجه شدم. حتا با خروج از برنامه شما هم اين مشكل حل نشد. مجبور به Reset شدم و اينبار با LAN اين موضوع را تست كردم باز هم همان اشكال ايجاد شد. باز هم امكان Disable كردن نبود!!

. چون در اين زمينه 2 برنامه نوشته بودم و تجربه داشتم گفتم اولين راهنما در زمينه برنامه نويسي را به اين موضوع تخصيص دهم اما چون گرفتار نوشتن 2 راهنما توامن هستم گفتم به شكل خلاصه به شما اين نكته را عرض كنم و چون در برنامه نويسي حرفه‌اي هستيد، زياد نياز به توضيح نخواهد بود:

. اول اين نكته را بگويم اصطلاح "تشخيص دسترسي داشتن به اينترنت" خودش كلي حرف و حديث دارد، به طوري كه زماني كه داشتم در مورد اين موضوع تحقيق مي‌كرم، در يكي از سايت‌هاي انگليسي جمله فوق باعث بوجود آمدن يك بحث فلسفي!!!! شده بود كه اصلن جمله "ارتباط يا دسترسي به اينترنت داشتن" چه معني دارد و درست هست يا نه!! اما روش كد نويسي پيشنهادي من:

يك نكته: (كليه لينك‌ها از MSDN همراه Visual Stedio 2005 هستند. احتمالن داري ديگه!؟ با كپي كرد آنها در آدرس بار MSDN به اصل مطلب مي‌رسيد. پس هيچ لينكي از اينترنت نيست اما در MSDN كه Online هست در سايت مايكروسافت بيابيد. در ضمن توابع API چون در Platform SDK هست بايد آن را نيز در MSDN نصب نموده باشيد.)

. متاسفانه و خوشبختانه!!! در VS.هاهميشه چندين راه براي انجام يك كار موجود است!! اما نتيجه تحقيقات من دو تابع API بود كه از زير خانواده توابع WinINet مي‌باشند و مي‌توانند به ما در اين زمينه كمك كنند. فايل WinINet.dl تقريبن براي انجام تمامي امور شبكه و اينترنت تابع دارد.(ليست اين توابه در لينك فوق كه به MSDN هست موجود است). اما اولين تابع مورد نياز ما به دوشكل موجود است، به نام‌هاي:
1) InternetGetConnectedState ه
2) InternetGetConnectedStateEx ه

. اگر با توابع API آشنايي داشته باشيد مي‌دانيد كه پسوند "Ex" به معني پارامترهاي بيشتر داشتن (امكانات بيشتر داشتن) يك تابع نسبت به هم نام خود و بدون اين پسوند مي‌باشد. پس من هم همان تابع دوم را توضيح مي‌دهم.

. تابع InternetGetConnectedStateEx امكان تشخيص Connection را دارد. مثل كانكشن LAN يا Modem يا Proxy و ... اما امكان تشخيص اينكه "آيا امكان دسترسي به اينترنت از طريق اين كانكشن وجود دارد يا نه؟" را ندارد . براي حل اين مشكل يك كلك مرغابي وجود دارد كه اكثر برنامه‌هاي خفن هم از آن استفاده مي‌كنند، Ping كردن يك سايت يا IP در اينترنت. اگر جواب Ping آمد پس ما به اينترنت دسترسي داريم. اين روش اشكالات خاص خودش را دارد كه در اين مطلب خلاصه آن را فاكتر مي‌گيرم.

. تابع دوم براي تشخيص دسترسي داشتن به اينترنت تابعي از همان فايل WinINet.dll هست با نام:
1) InternetCheckConnection ه

. با مشخص كردن آدرس يك سايت در تابع InternetCheckConnection، اين تابع در صورتي كه امكان دسترسي به سايتي كه آدرس آن را به اين تابع ارسال نموديم، امكان پذير باشد، مقدار True را باز مي‌گرداند. من نمي‌دانم شما از VB استفاده مي‌كنيد يا C اما در زير توضيحات توابع فوق در كد نويسي VB را نوشته‌ام و در انتها كد Classي كه براي يكي از برنامه‌هام نوشته بودم را براي تكميل توضيحات‌ام براي شما قرار داده‌ام.

. Syntax تابع InternetGetConnectedStateEx و تعريف آن در VB به شكل زير است:

Code:
 Syntax=
BOOL InternetGetConnectedStateEx(
  LPDWORD lpdwFlags,
  LPTSTR lpszConnectionName,
  DWORD dwNameLen,
  DWORD dwReserved
);
Code:
VB Define=
    Private Declare Function InternetGetConnectedStateEx Lib "wininet.dll" Alias "InternetGetConnectedStateExA" _
      (ByRef lpdwFlags As Long, _
       ByVal lpszConnectionName As String, _
       ByVal dwNameLen As Long, ByVal dwReserved As Long) As Boolean
. خود تابع اگر Connectionي را بيابد مقدار True را باز مي‌گرداند و پارامتر اول آن Type كاننكشن را باز مي‌گرداند. بقيه پارامترها را خودتان زحمت مطالعه‌شان را بكشيد. اما مقدار تعدادي از كانكشن‌ها را بايد در يك متغيير Enum به شكل زير معرفي نماييد:

Code:
    ''''''''''''CONSTANT's'''''''''''''''
    Private Enum ConFlags
        '  Connection VIA Proxy server.
        Proxy = &H4S
        '  Modem is busy.
        ModemIsBusy = &H8S
        '  Internet connection is currently Offline
        Offline = &H20S
        '  Internet connection is currently configured
        ConnectionIsConfigured = &H40S
        '  Internet connection VIA Modem.
        Modem = &H1S
        '  Remote Access Server is installed.
        RasInstalled = &H10S
        '  Internet connection VIA LAN.
        LAN = &H2S
    End Enum

    Public Enum ConType
        AnyConnection
        Modem
        LAN
        RasInstalled
        Proxy
        InternetOffline
        ConnectionConfigured
    End Enum
. استفاده مستقيم از تابع فوق فقط براي تشخيص اينكه آيا Connectionي وجود دارد يا نه؟ به شكل زير است:

Code:
Dim Status As Boolean    
        Status = InternetGetConnectedStateEx(CntType, CntName, CntNameLen, 0)
. اما براي تشخيص Connection Type مي‌توان از تابع فوق در در دل تابع ديگري استفاده نمود. به طور خلاصه به شكل زير:


Code:
Public Function IsConnected(ByVal ConnectionType As ConType) As Boolean

        Dim Status As Boolean
        Dim CntType As Long
        Dim CntName As String = Space(50)
        Dim CntNameLen As Long = 50
        
        Status = InternetGetConnectedStateEx(CntType, CntName, CntNameLen, 0)

        Select Case ConnectionType

                ' MODEM
            Case Is = ConType.Modem
                Return CBool(CntType And ConFlags.Modem And CLng(Status))

                ' LAN
            Case Is = ConType.LAN
                Return CBool(CntType And ConFlags.LAN And CLng(Status))

                ...
                ...
                ...

        End Select
End Function
. تا اينجا برنامه ما تشخيص وجود يك Connection را داده است. اما آيا دسترسي به اينترنت از طريق اين كانكشن(يا كانكشن‌ها) امكان پذير هست؟ از تابع InternetCheckConnection به شكل مستقيم و يا در درون تابعي مي‌شود از آن استفاده نمود:

Code:
Syntax=
BOOL InternetCheckConnection(
  LPCTSTR lpszUrl,
  DWORD dwFlags,
  DWORD dwReserved
);
. تعريف آن در VB به شكل:

Code:
VD Define=
    Private Declare Function InternetCheckConnection Lib "wininet.dll" Alias "InternetCheckConnectionA" _
       (ByVal lpszUrl As String, _
        ByVal dwFlags As Integer, _
        ByVal dwReserved As Integer) As Boolean

    'If this flag is set, it forces a connection
    Private Const FLAG_ICC_FORCE_CONNECTION As Integer = &H1
. روش استفاده از اين تابع براي تشخيص دسترسي داشتن به اينترنت:

Code:
    ' check an URL to find out it can Access.
    Public Function CheckURL(ByVal TestUrl As String) As Boolean
        Return InternetCheckConnection(TestUrl, FLAG_ICC_FORCE_CONNECTION, 0)
    End Function
. براي اطمينان بهتره آدرس سايتي را چك كني كه سرور خفن و Sub Domain زياد دارد، (اگر اين اصطلاح آخري را درست استفاده كرده‌ باشم!) مانند www.Download.com يا www.google.com و ...

. اميدوارم كه مطالب فوق مفيد واقع شود. احتمالن ازAPI مناسب براي Dialup استفاده نموديد اما كلاس Dialup برنامه خود را در لينك دونلود آورده‌ام.

. نكته آخر:
Quote:
نوشته ای از R E Z A
جواد جان ممنون از زحمتی که کشیدی منتها من فایلی رو که دانلود کردم وقتی پسوندش رو به exe. تغییر میدم هیچ تغییری تو فایل PDF ایجاد نمیشه.
. جواد جان، اي عزيز جان برادر! چرا به جاي به روزرساني پست اول، نكات جديد را در پستهاي وسط تاپيكت مي‌چاپي!!! و همه را سر گردان مي‌كني! اي كاشك من هم پشت كار شما را در نوشتن برنامه‌ها و مطالب در فروم را داشتم، آن وقت تعداد مطالب من هم زايد مي‌شد نه اينقدر كم. كارت درسته ادامه بده ...

توجه: (درون فايل Zip دو كلاس به شكل Text قرار دارد. كلاس CIC كه حاوي توابع WinINet هست و براي تشخيص نوع و نام كانكشن و ارتباط داشتن/نداشتن با اينترنت مفيد است. كلاس Dialup كه براي شماره گيري و قطع ارتباط هست.)

موفق باشيد.

خداحافظ
IgImAx
86/11/21
Attached Files
File Type: zip Two WinINet Functions .zip (1.7 KB, 2 views)
__________________
ياد بديد تا ياد بگيريد. .(Update در 31/01/1387)
قيمت روزانه قطعات كامپيوتر (تهران)
بهترين سايت‌ها: سخت افزار TomsHardware --- تحقيقات Wikipedia
در PT بخوانيد: آموزش Ghost، آموزش ساخت انواع پارتيشن، مشكلات سخت‌افزاري و برنامه‌ها مرتبط، آموزش و دونلود از Web Host و P2P
در PT بخوانيد: قوانين PT، ساخت Bootable CD/DVD، افزايش سرعت هاردديسك، جستجو در Rapidshare، تصحيح حروف كيبورد، معرفي بهترين Anti-Virus، ...

Last edited by igimax; 02-12-2008 at 05:53 PM. دلیل: توضيخات اضافي.
igimax is offline   Reply With Quote
Old 02-11-2008, 02:45 PM   #10
javad2000
Registered User
 
javad2000's Avatar
 

Join Date: Jul 2005
Posts: 1,402
Send a message via Yahoo to javad2000
Quote:
نوشته ای از igimax View Post
سلام جواد جان

. چند روز پيش به خاطر پست جديدي كه در تاپيك "راهنماي تبديل تاريخ هاي شمسي، ..." داديد و به آنجا سري زدم متوجه لينك‌هاي برنامه در امضا‌شما شدم وقتي نگاه كردم ديدم همه كار شماست. ايــــــــــــــول

. يكي از آن برنامه‌ها توجه‌ام را جلب كرد، اونم برنامه‌ اين تاپيك بود. علتش هم اين بود كه برنامه‌اي مشابه اين را خيلي وقت پيش (سال 2000) نوشته بودم. برام جالب بود ببينم همون مشكلاتي كه روزهاي اول من هم با اين برنامه داشتم آيا شما داريد يا آنها را حل نموديد.

. متاسفانه اولين مشكل يعني "تشخيص دسترسي داشتن به اينترنت" و در پي آن "ارتباط از طريق چه كانكشن يا وسيله‌اي" و در پي آن "چه نوع ارتباطي" وجود داشت. دو مورد 2 و 3 شايد مهم نباشد، اما مورد 1 ، اگر به درستي اجرا نشود باعث اختلال در كار برنامه و در نتيجه اشتباه تشخيص دادن "دسترسي به اينترنت" مي‌شود.

. مشكل برنامه در اين است كه اگر يك كانكشن LAN موجود باشد، برنامه شما آن را به عنوان يك كانكشن اينترنتي فرض مي‌كند. به مجرد اينكه برنامه شما را اجرا كردم گفت: "شما از طريق كارت DVB به اينترنت وصل شده‌ايد!!!!" نمي‌دانم از چه روشي براي تشخيص كانكشن استفاده نموديد اما زماني كه آمدم كارت DVB را Disable كنم، با پيغام خطا "اين كار ممكن نيست چون برنامه‌اي به آن دسترسي دارد" مواجه شدم. حتا با خروج از برنامه شما هم اين مشكل حل نشد. مجبور به Reset شدم و اينبار با LAN اين موضوع را تست كردم باز هم همان اشكال ايجاد شد. باز هم امكان Disable كردن نبود!!

. چون در اين زمينه 2 برنامه نوشته بودم و تجربه داشتم گفتم اولين راهنما در زمينه برنامه نويسي را به اين موضوع تخصيص دهم اما چون گرفتار نوشتن 2 راهنما توامن هستم گفتم به شكل خلاصه به شما اين نكته را عرض كنم و چون در برنامه نويسي حرفه‌اي هستيد، زياد نياز به توضيح نخواهد بود:

. اول اين نكته را بگويم اصطلاح "تشخيص دسترسي داشتن به اينترنت" خودش كلي حرف و حديث دارد، به طوري كه زماني كه داشتم در مورد اين موضوع تحقيق مي‌كرم، در يكي از سايت‌هاي انگليسي جمله فوق باعث بوجود آمدن يك بحث فلسفي!!!! شده بود كه اصلن جمله "ارتباط يا دسترسي به اينترنت داشتن" چه معني دارد و درست هست يا نه!! اما روش كد نويسي پيشنهادي من:

يك نكته: (كليه لينك‌ها از MSDN همراه Visual Stedio 2005 هستند. احتمالن داري ديگه!؟ با كپي كرد آنها در آدرس بار MSDN به اصل مطلب مي‌رسيد. پس هيچ لينكي از اينترنت نيست اما در MSDN كه Online هست در سايت مايكروسافت بيابيد. در ضمن توابع API چون در Platform SDK هست بايد آن را نيز در MSDN نصب نموده باشيد.)

. متاسفانه و خوشبختانه!!! در VS.هاهميشه چندين راه براي انجام يك كار موجود است!! اما نتيجه تحقيقات من دو تابع API بود كه از زير خانواده توابع WinINet مي‌باشند و مي‌توانند به ما در اين زمينه كمك كنند. فايل WinINet.dl تقريبن براي انجام تمامي امور شبكه و اينترنت تابع دارد.(ليست اين توابه در لينك فوق كه به MSDN هست موجود است). اما اولين تابع مورد نياز ما به دوشكل موجود است، به نام‌هاي:
1) InternetGetConnectedState ه
2) InternetGetConnectedStateEx ه

. اگر با توابع API آشنايي داشته باشيد مي‌دانيد كه پسوند "Ex" به معني پارامترهاي بيشتر داشتن (امكانات بيشتر داشتن) يك تابع نسبت به هم نام خود و بدون اين پسوند مي‌باشد. پس من هم همان تابع دوم را توضيح مي‌دهم.

. تابع InternetGetConnectedStateEx امكان تشخيص Connection را دارد. مثل كانكشن LAN يا Modem يا Proxy و ... اما امكان تشخيص اينكه "آيا امكان دسترسي به اينترنت از طريق اين كانكشن وجود دارد يا نه؟" را ندارد . براي حل اين مشكل يك كلك مرغابي وجود دارد كه اكثر برنامه‌هاي خفن هم از آن استفاده مي‌كنند، Ping كردن يك سايت يا IP در اينترنت. اگر جواب Ping آمد پس ما به اينترنت دسترسي داريم. اين روش اشكالات خاص خودش را دارد كه در اين مطلب خلاصه آن را فاكتر مي‌گيرم.

. تابع دوم براي تشخيص دسترسي داشتن به اينترنت تابعي از همان فايل WinINet.dll هست با نام:
1) InternetCheckConnection ه

. با مشخص كردن آدرس يك سايت در تابع InternetCheckConnection، اين تابع در صورتي كه امكان دسترسي به سايتي كه آدرس آن را به اين تابع ارسال نموديم، امكان پذير باشد، مقدار True را باز مي‌گرداند. من نمي‌دانم شما از VB استفاده مي‌كنيد يا C اما در زير توضيحات توابع فوق در كد نويسي VB را نوشته‌ام و در انتها كد Classي كه براي يكي از برنامه‌هام نوشته بودم را براي تكميل توضيحات‌ام براي شما قرار داده‌ام.

. Syntax تابع InternetGetConnectedStateEx و تعريف آن در VB به شكل زير است:

Code:
 Syntax=
BOOL InternetGetConnectedStateEx(
  LPDWORD lpdwFlags,
  LPTSTR lpszConnectionName,
  DWORD dwNameLen,
  DWORD dwReserved
);
Code:
VB Define=
    Private Declare Function InternetGetConnectedStateEx Lib "wininet.dll" Alias "InternetGetConnectedStateExA" _
      (ByRef lpdwFlags As Long, _
       ByVal lpszConnectionName As String, _
       ByVal dwNameLen As Long, ByVal dwReserved As Long) As Boolean
. خود تابع اگر Connectionي را بيابد مقدار True را باز مي‌گرداند و پارامتر اول آن Type كاننكشن را باز مي‌گرداند. بقيه پارامترها را خودتان زحمت مطالعه‌شان را بكشيد. اما مقدار تعدادي از كانكشن‌ها را بايد در يك متغيير Enum به شكل زير معرفي نماييد:

Code:
    ''''''''''''CONSTANT's'''''''''''''''
    Private Enum ConFlags
        '  Connection VIA Proxy server.
        Proxy = &H4S
        '  Modem is busy.
        ModemIsBusy = &H8S
        '  Internet connection is currently Offline
        Offline = &H20S
        '  Internet connection is currently configured
        ConnectionIsConfigured = &H40S
        '  Internet connection VIA Modem.
        Modem = &H1S
        '  Remote Access Server is installed.
        RasInstalled = &H10S
        '  Internet connection VIA LAN.
        LAN = &H2S
    End Enum

    Public Enum ConType
        AnyConnection
        Modem
        LAN
        RasInstalled
        Proxy
        InternetOffline
        ConnectionConfigured
    End Enum
. استفاده مستقيم از تابع فوق فقط براي تشخيص اينكه آيا Connectionي وجود دارد يا نه؟ به شكل زير است:

Code:
Dim Status As Boolean    
        Status = InternetGetConnectedStateEx(CntType, CntName, CntNameLen, 0)
. اما براي تشخيص Connection Type مي‌توان از تابع فوق در در دل تابع ديگري استفاده نمود. به طور خلاصه به شكل زير:


Code:
Public Function IsConnected(ByVal ConnectionType As ConType) As Boolean

        Dim Status As Boolean
        Dim CntType As Long
        Dim CntName As String = Space(50)
        Dim CntNameLen As Long = 50
        
        Status = InternetGetConnectedStateEx(CntType, CntName, CntNameLen, 0)

        Select Case ConnectionType

                ' MODEM
            Case Is = ConType.Modem
                Return CBool(CntType And ConFlags.Modem And CLng(Status))

                ' LAN
            Case Is = ConType.LAN
                Return CBool(CntType And ConFlags.LAN And CLng(Status))

                ...
                ...
                ...

        End Select
End Function
. تا اينجا برنامه ما تشخيص وجود يك Connection را داده است. اما آيا دسترسي به اينترنت از طريق اين كانكشن(يا كانكشن‌ها) امكان پذير هست؟ از تابع InternetCheckConnection به شكل مستقيم و يا در درون تابعي مي‌شود از آن استفاده نمود:

Code:
Syntax=
BOOL InternetCheckConnection(
  LPCTSTR lpszUrl,
  DWORD dwFlags,
  DWORD dwReserved
);
. تعريف آن در VB به شكل:

Code:
VD Define=
    Private Declare Function InternetCheckConnection Lib "wininet.dll" Alias "InternetCheckConnectionA" _
       (ByVal lpszUrl As String, _
        ByVal dwFlags As Integer, _
        ByVal dwReserved As Integer) As Boolean

    'If this flag is set, it forces a connection
    Private Const FLAG_ICC_FORCE_CONNECTION As Integer = &H1
. روش استفاده از اين تابع براي تشخيص دسترسي داشتن به اينترنت:

Code:
    ' check an URL to find out it can Access.
    Public Function CheckURL(ByVal TestUrl As String) As Boolean
        Return InternetCheckConnection(TestUrl, FLAG_ICC_FORCE_CONNECTION, 0)
    End Function
. براي اطمينان بهتره آدرس سايتي را چك كني كه سرور خفن و Sub Domain زياد دارد، (اگر اين اصطلاح آخري را درست استفاده كرده‌ باشم!) مانند www.Download.com يا www.google.com و ...

. اميدوارم كه مطالب فوق مفيد واقع شود. احتمالن ازAPI مناسب براي Dialup استفاده نموديد اما كلاس Dialup برنامه خود را در لينك دونلود آورده‌ام.

. نكته آخر:
. جواد جان، اي عزيز جان برادر! چرا به جاي به روزرساني پست اول، نكات جديد را در پستهاي وسط تاپيكت مي‌چاپي!!! و همه را سر گردان مي‌كني! اي كاشك من هم پشت كار شما را در نوشتن برنامه‌ها و مطالب در فروم را داشتم، آن وقت تعداد مطالب من هم زايد مي‌شد نه اينقدر كم. كارت درسته ادامه بده ...
موفق باشيد.

خداحافظ
IgImAx
86/11/21
igi عزيز
مثل هميشه توضيحات، كامل و عالي بود.
در توضيحات برنامه، اضافه كردم كه فقط براي كانكشن هاي دايال آپ
من سه ماهه كه از اين برنامه استفاده مي كنم و مشكل خاصي هم ندارم. اما با ADSL تست نكردم.
متشكرم
javad2000 is offline   Reply With Quote
Old 02-12-2008, 05:43 PM   #11
igimax
کاربر فعال سیستم عامل
Trusted Member
 
igimax's Avatar
سلام جواد جان

Quote:
در توضيحات برنامه، اضافه كردم كه فقط براي كانكشن هاي دايال آپ
. من هم منظورم از مطالب فوق همين بود، يكي از اهداف برنامه شما تشخيص صحيح كانكشن‌هاي DialUP بوده، اما به اشتباه كانكشن LAN و ... را نيز كه در آنها هيچ ارتباط اينترنتي وجود ندارد را نيز به عنوان كانكشن اينترنتي فرض مي‌كند.
Quote:
اما با ADSL تست نكردم.
. اتفاقن من هم مثل شما هنوز Dialup دارم! اين كانكشن LAN من هم يك ارتباط شبكه‌اي بين دو كامپيوتر من هست (به شكل Cross Link) و كانكشن دوم من هم كارت DVB هست كه يك رسيور كانل‌هاي ماهواره‌اي هست. كه هيچ يك از دو كانكشن فوق ارتباط اينترنتي را ندارد.

. مطمئنن خواسته يا ناخواسته هدف بالاتر و اصلي شما تشخيص دسترسي به اينترنت بوده و هست. كه از دو تابعي كه معرفي نموده‌ام اين هدف به شكل بهتري قابل دسترسي مي‌باشد. لطفن به عكسي كه در زير گذاشته ام توجه نماييد:


. همانطور كه در شكل مشاهده مي‌نماييد، هر دو كانكشن Network من را هم به عنوان كانكشن اينترنتي فرض كرده. اما از كار با Dialup حرف ندارد. فقط يك نكته ديگر: چرا با اينكه كانكشن من در روز صورت گرفته (يكي در 12:54PM و ديگري در 01:09PM) ولي آنها را درليست در قسمت شبانه گذاشته؟
. يك پيشنهاد هم داشتم، بهتره در پنجره تنظيم ساعت شبانه يك چك مارك اضافه شود با عنوان "بدون ساعت شبانه" (يا چيزي شبيه به اين) كه با انتخاب نام كانكشن‌ها و روشن كردن تيك اين گزينه ساعت شبانه براي آن كانكشن در نظر گرفته نشود. (فكر كنم الان بايد هر دو پارامتر را روي 0 تنظيم كنيم تا اين اتفلق بيافتد)
. يك برنامه كوچك كه آن را با استفاده از Class اولي كه در پست قبلي قرار دادم، نوشته‌ام و در انتهاي اين برنامه قرار داده‌ام. (در پست قبلي يادم رفت بگويم كه دو كلاس در دل آن فايل Text هست. كلاس CIC كه حاوي توابع WinINet هست و كلاس Dialup كه براي شماره گيري هست. اين توضيحات را به پست قبلي اضافه نمودم) برنامه را كه اجرا نماييد 3 كار مي‌كند:
1) نمايش نام وسيله‌اي كه كانكشن شبكه‌اي دارد. (در Frame با نام تابع InternetGetConnectionEx)ه
2) نمايش دسترسي داشتن/نداشتن به اينترنت. (در Frame با نام تابع InternetCheckConnection)ه
3) نمايش نام كانكشن و كد كانكشن. هر دو پارمتر اول و سوم از تابع InternetGetConnectionEx يعني:

Quote:
Syntax=
BOOL InternetGetConnectedStateEx(
LPDWORD lpdwFlags,
LPTSTR lpszConnectionName,
DWORD dwNameLen,
DWORD dwReserved
);
. براي مثال به شكل زير نگاه فرماييد. در هر دو كامپيوتر شماره يك و دوم من برنامه فوق اجرا شده و چون دو كامپيوتر من با كابل شبكه و از طريق LAN به هم متصل هستند، نام LAN به شكل True تغيير كرده و چون دسترسي اينترنت وجود ندارد پارامتر آن False هست. (برنامه در هردو كامپيوتر همين شكل است):

محيط برنامه در كامپيوتر اول - ارتباط شبكه LAN بين دو كامپيوتر - بدون اينترنت

. اما در شكل‌ بعدي كامپيوتر اول از طريق مودم و به شكل DIALUP به اينترنت وصل شده و كامپيوتر دوم از طريق كابل LAN و كامپيوتر اول به اينترنت وصل مي‌شود:
ه
كامپيوتر اول - اتصال مستقيم به اينتر نت از طريق مودم Dialup ه كامپيوتر دوم - اتصال به اينترنت از طريق كابل LAN و كامپيوتر دوم

. البته براي تست‌ها شبكه حتمن نيازي به داشتن دو يا ... كامپيوتر به شكل فيزيكي نيست! شما مي‌توانيد با نصب برنامه‌هاي شبيه ساز PC همانند VMWare يا Microsoft Virtual PC ، برنامه‌هاي خود را با شبكه‌هاي اين نوع برنامه‌ها تست نماييد. در كل برنامه بسيار خوبي نوشتيد و با كمي تغييرات فوق العاده مي‌شود. به بخشيد اگر جسارتي پيش آمد...

نكته: (بزرگي حجم برنامه به خاطر آيكنش هست!!!)


موفق باشيد.

خداحافظ
IgImAx
86/11/23
Attached Files
File Type: zip ConnectionInfo.zip (240.2 KB, 10 views)
igimax is offline   Reply With Quote
Old 02-12-2008, 11:18 PM   #12
javad2000
Registered User
 
javad2000's Avatar
 

Join Date: Jul 2005
Posts: 1,402
Send a message via Yahoo to javad2000
Quote:
نوشته ای از igimax View Post
سلام جواد جان

. من هم منظورم از مطالب فوق همين بود، يكي از اهداف برنامه شما تشخيص صحيح كانكشن‌هاي DialUP بوده، اما به اشتباه كانكشن LAN و ... را نيز كه در آنها هيچ ارتباط اينترنتي وجود ندارد را نيز به عنوان كانكشن اينترنتي فرض مي‌كند.
. اتفاقن من هم مثل شما هنوز Dialup دارم! اين كانكشن LAN من هم يك ارتباط شبكه‌اي بين دو كامپيوتر من هست (به شكل Cross Link) و كانكشن دوم من هم كارت DVB هست كه يك رسيور كانل‌هاي ماهواره‌اي هست. كه هيچ يك از دو كانكشن فوق ارتباط اينترنتي را ندارد.

. مطمئنن خواسته يا ناخواسته هدف بالاتر و اصلي شما تشخيص دسترسي به اينترنت بوده و هست. كه از دو تابعي كه معرفي نموده‌ام اين هدف به شكل بهتري قابل دسترسي مي‌باشد. لطفن به عكسي كه در زير گذاشته ام توجه نماييد:


. همانطور كه در شكل مشاهده مي‌نماييد، هر دو كانكشن Network من را هم به عنوان كانكشن اينترنتي فرض كرده. اما از كار با Dialup حرف ندارد. فقط يك نكته ديگر: چرا با اينكه كانكشن من در روز صورت گرفته (يكي در 12:54PM و ديگري در 01:09PM) ولي آنها را درليست در قسمت شبانه گذاشته؟
. يك پيشنهاد هم داشتم، بهتره در پنجره تنظيم ساعت شبانه يك چك مارك اضافه شود با عنوان "بدون ساعت شبانه" (يا چيزي شبيه به اين) كه با انتخاب نام كانكشن‌ها و روشن كردن تيك اين گزينه ساعت شبانه براي آن كانكشن در نظر گرفته نشود. (فكر كنم الان بايد هر دو پارامتر را روي 0 تنظيم كنيم تا اين اتفلق بيافتد)
. يك برنامه كوچك كه آن را با استفاده از Class اولي كه در پست قبلي قرار دادم، نوشته‌ام و در انتهاي اين برنامه قرار داده‌ام. (در پست قبلي يادم رفت بگويم كه دو كلاس در دل آن فايل Text هست. كلاس CIC كه حاوي توابع WinINet هست و كلاس Dialup كه براي شماره گيري هست. اين توضيحات را به پست قبلي اضافه نمودم) برنامه را كه اجرا نماييد 3 كار مي‌كند:
1) نمايش نام وسيله‌اي كه كانكشن شبكه‌اي دارد. (در Frame با نام تابع InternetGetConnectionEx)ه
2) نمايش دسترسي داشتن/نداشتن به اينترنت. (در Frame با نام تابع InternetCheckConnection)ه
3) نمايش نام كانكشن و كد كانكشن. هر دو پارمتر اول و سوم از تابع InternetGetConnectionEx يعني:

. براي مثال به شكل زير نگاه فرماييد. در هر دو كامپيوتر شماره يك و دوم من برنامه فوق اجرا شده و چون دو كامپيوتر من با كابل شبكه و از طريق LAN به هم متصل هستند، نام LAN به شكل True تغيير كرده و چون دسترسي اينترنت وجود ندارد پارامتر آن False هست. (برنامه در هردو كامپيوتر همين شكل است):