PDA

View Full Version : مبتدی: گرفتن میزان قدرت سیگنال wifi به صورت درصد



kolibri
سه شنبه 03 شهریور 1394, 12:51 عصر
سلام؛
می خواهم میزان قدرت شبکه وای فایی رو که دستگاه به اون متصل هست رو به صورت درصد و پیوسته در یک تکست باکس نمایش دهم.
(یونیورسال ویندوز 10)
چگونه این کار رو انجام بدهم؟
با احترام.

ahmadreza.s
سه شنبه 03 شهریور 1394, 13:15 عصر
سلام اين دو تا لينك رو ببين

لينك اول (https://social.msdn.microsoft.com/Forums/en-US/34a66ee5-34f8-473d-b6f2-830a14e2300b/get-signal-strength-in-c)
لينك دوم (http://stackoverflow.com/questions/18758097/getting-wifi-signal-strength)

لينك اولي بهتره !

kolibri
سه شنبه 03 شهریور 1394, 13:43 عصر
سلام اين دو تا لينك رو ببين

لينك اول (https://social.msdn.microsoft.com/Forums/en-US/34a66ee5-34f8-473d-b6f2-830a14e2300b/get-signal-strength-in-c)
لينك دوم (http://stackoverflow.com/questions/18758097/getting-wifi-signal-strength)

لينك اولي بهتره !

تشکر.
از کد زیر استفاده کردم، ولی فقط عدد 0 رو بهم میده:
private double RetrieveSignalString()
{
double theSignalStrength = 0;
ConnectionOptions theConnectionOptions = new ConnectionOptions();
ManagementScope theManagementScope = new ManagementScope("root\\wmi");
ObjectQuery theObjectQuery = new ObjectQuery("SELECT * FROM MSNdis_80211_ReceivedSignalStrength WHERE active=true");
ManagementObjectSearcher theQuery = new ManagementObjectSearcher(theManagementScope, theObjectQuery);
try
{
//ManagementObjectCollection theResults = theQuery.Get();
foreach(ManagementObject currentObject in theQuery.Get())
{
theSignalStrength = theSignalStrength + Convert.ToDouble(currentObject["Ndis80211ReceivedSignalStrength"]);
}
}
catch (Exception e)
{
//handle
}

return Convert.ToDouble(theSignalStrength);
}

ahmadreza.s
سه شنبه 03 شهریور 1394, 14:49 عصر
سلام دوباره !

من اين كدي كه شما دادي استفاده نكردم ولي اينو امتحان كردم(توي cmd) جواب داد براي من

با اين كد ميشه خط هايي كه تو cmd نشونمون داده رو بگيريم و اونارو جدا جدا كنيم !

ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "netsh wlan show interfaces");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));

الان ميتوني دنبال اون خطي كه signal نوشته بگردي !

ببخشيد من vs ام مشكل داشت نتونستم برنامه اي كه ميخواي رو كامل برات بنويسم !

kolibri
سه شنبه 03 شهریور 1394, 15:28 عصر
سلام دوباره !

من اين كدي كه شما دادي استفاده نكردم ولي اينو امتحان كردم(توي cmd) جواب داد براي من
با اين كد ميشه خط هايي كه تو cmd نشونمون داده رو بگيريم و اونارو جدا جدا كنيم !
الان ميتوني دنبال اون خطي كه signal نوشته بگردي !
ببخشيد من vs ام مشكل داشت نتونستم برنامه اي كه ميخواي رو كامل برات بنويسم !

سلام مهربان؛
من از این کد استفاده کردم:
var ConnectionProfiles = NetworkInformation.GetConnectionProfiles();
string str = "";
foreach (var connectionProfile in ConnectionProfiles)
{
str += "Profile Name : " + connectionProfile.ProfileName + "\n";
str += "Signal: " + connectionProfile.GetSignalBars() + "\n";
str += "--------------------------------------------------------------------\n";
}
OutputText.Text = str;

اما بدی که داره به صورت اعداد 1 تا 5 نمایش میده قدرت سیگنال رو. ولی من به صورت 1 تا 100 می خوام.
راه حلی هست؟!

ahmadreza.s
سه شنبه 03 شهریور 1394, 18:42 عصر
سلام بفرماييد اين كد كاملش هست :

ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "netsh wlan show interfaces");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str;
int darsad;
String Name;
while (true) {
line = r.readLine();
if(line.contains("Signal"))
{
line=line.substring(30);
darsad=int.Parse(line.Remove(line.Length()-1,1));// vase ine ke character '%' ro remove kone !
break;
} //end If
}// end while



-------------------------------------------------------

اگه سيستم به واي فاي وصل نباشه اين حلقه استثنا پرتاب میکنه :لبخند: خودت يه شرط بزار كه اگه به واي فاي وصل نباشه ، درصد رو صفر در نظر بگيره !

kolibri
چهارشنبه 04 شهریور 1394, 11:52 صبح
متاسفانه در یونیورسال این کد جواب نمیده!

kolibri
پنج شنبه 05 شهریور 1394, 07:31 صبح
کسی نیست راهنمایی کند؟!