C++ ile Wi-Fi ismi öğrenmek

RTX2080

Centipat
Katılım
16 Ağustos 2020
Mesajlar
15
C++ kullanarak bilgisayarın şu anda bağlı olduğu Wi-Fi'ın ismini nasıl öğrenebilirim?
Sadece Wi-Fi ismi olacak başka hiçbir bilgi değil.
Mesela "TURK_TELEKOM_5234" gibi.
Teşekkür ederim.
 


stackoverflow'da bunun için en iyi çözümün kullandığınız işletim sistemine bağlı olarak netsh benzeri bir komut ile çıktıdan bu ismi çekmek olduğunu söylemiş. Windows için bu komutun "netsh wlan show int" olduğunu da eklemiş. Yöntem bu, shell komutu çalıştırıp çıktıları alma işlemini de sana bırakıyorum c++ bilgim yok maalesef.

 
Onu gördüm de benim de bilgim yetersiz olduğu için pek yapamadım onu. Yine de teşekkür ederim deneyeceğim.
 
Fonksiyonu çaldım. Çok az değiştirmek gerekti, kendisi de aşağıda değiştirilecek kısmı söylemiş.

Kütüphaneler kısmı sıkıntı. Sanırım visual studio içeriği kullanılan kütüphaneleri direkt kendisi ekliyor. Ayrı tuttuğum iki kütüphane olmadan da çalışıyor ama mesela _popen() stdio.h kütüphanesinde tanımlı. Onları o yüzden ekledim. Mesela try catch kullanmış ama exception yazdırmadığı için benim görebildiğim kadarıyla stdexcept kütüphanesine gerek yok.

Mainde ayırma kısmı string kullanımı şeklindeydi. Pek bir şey yok. Hata yapmadıysam genel kullanıma uygun olmalı.

Kod:
#include <iostream>
#include <string>

#include <xmemory>
#include <stdio.h>

#define SSID_LEN 5

using namespace std;

string exec(const char* cmd) {
    char buffer[128];
    string result = "";
    FILE* pipe = _popen(cmd, "r");
    if (!pipe) throw runtime_error("popen() failed!");
    try {
        while (fgets(buffer, sizeof buffer, pipe) != NULL) {
            result += buffer;
        }
    }
    catch (...) {
        _pclose(pipe);
        throw;
    }
    _pclose(pipe);
    return result;
}

int main() {
    string a = exec("netsh wlan show int");
    string b = "SSID";
    string c = "BSSID";

    string d = a.substr(a.find(b), a.find(c) - a.find(b));

    string::iterator end_pos = remove(d.begin(), d.end(), ' ');
    d.erase(end_pos, d.end());

    string e = d.substr(SSID_LEN);

    cout << "Wi-Fi adi: " << e << endl;

    return 0;
}
 
C++ kullanarak bilgisayarın şu anda bağlı olduğu Wi-Fi'ın ismini nasıl öğrenebilirim?
Sadece Wi-Fi ismi olacak başka hiçbir bilgi değil.
Mesela "TURK_TELEKOM_5234" gibi.
Teşekkür ederim.
C++:
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>

using namespace std;


int main()
{
    string a;
    system("netsh wlan show int > C:\\users\\omerk\\desktop\\wifi.txt");
    
    ifstream file("C:\\users\\omerk\\desktop\\wifi.txt", ios::in);
    if (!file)
        cout << "\nerror";
    else {
        while (a != "SSID") {
            file >> a;
        }
        getline(file, a);
        cout << "SSID = " << a;
        file.close();
    }

    return 0;
}

Directory olarak kendi bilgisayarınızda istediğiniz yeri seçebilrsiniz ancak aynı formatta olmalı.
 
İkinize de çok teşekkür ederim ancak msvcp140d.dll vcruntime140d.dll ve ucrtbased.dll hataları alıyorum. Diyelim ki ben bunları kendi bilgisayarımda çözdüm. Peki programı yükleyen diğer kullanıcıların bu sorunu yaşamaması için neler yapabiliriz? Teşekkür ederim.

 
Son düzenleme:
Benim bilgisayarımda Wi-Fi kullanılamıyor. Diğer 2 bilgisayarda deneyince bu DLL hatalarını alıyorum. Visual Studio 2019 kullanıyorum. \source\repos\ konumundaki projeye ait klasörü attım diğer bilgisayarlara ve onun içerisindeki Debug klasöründeki .exe dosyasını çalıştırdım.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…