0

「私の wp8 から印刷できますか?」など、同様の質問が多く寄せられていることは承知しています。ほとんどの人は、単純な「いいえ」の応答に満足しているようです。この機能を自分のアプリに追加しようとしていますが、現時点では最小限のプリンター セットしかサポートできない場合でも、ある程度のレベルで実現できることはわかっています。

アプリPrintHandを見てきましたが、必要な機能を備えているようです: ワイヤレスおよび Bluetooth プリンターへの印刷。

Bluetoothシナリオのドキュメントを少し調べてみましたが、Bluetooth プリンターを見つけるのに役立つと思います。それが始まりです。おそらく、ワイヤレス プリンターの識別にも役立つでしょう。

私はこのプロジェクトを非常に小さく始める必要があることを認識しており、最初に現在のネットワークで利用可能なワイヤレスプリンター (まだ Bluetooth プリンターを持っていません)を列挙してみたいと思います。始める方法、またはさらに良い方法、関連するサンプルコードについて正しい方向へのポインタを持っている人はいますか?

本当にありがとう!

4

2 に答える 2

1

Simple Service Discovery Protocol を使用して近くのワイヤレス プリンターを検出できました。

ここに私のサンプル関数があります:

private const string SSDP_IP = "239.255.255.250";
private const string SSDP_PORT = "1900";

public async static void DiscoverAsync2()
{       
    var multicastIP = new HostName(SSDP_IP);
    var found = false;

    using (var socket = new DatagramSocket())
    {
        socket.MessageReceived += (sender, e) =>
        {
            var reader = e.GetDataReader();
            var bytesRemaining = reader.UnconsumedBufferLength;
            var receivedString = reader.ReadString(bytesRemaining);

            // TODO: something useful with this new info

            found = true;
        };

        await socket.BindEndpointAsync(null, string.Empty);
        socket.JoinMulticastGroup(multicastIP);

        while (true)
        { 
            found = false;

            using (var stream = await socket.GetOutputStreamAsync(multicastIP, SSDP_PORT))
            {
                var request = new StringBuilder();
                request.AppendLine("M-SEARCH * HTTP/1.1");
                request.AppendLine("HOST: " + SSDP_IP + ":" + SSDP_PORT);
                request.AppendLine("MAN: \"ssdp:discover\"");
                request.AppendLine("MX: 3");
                request.AppendLine("ST: urn:schemas-upnp-org:device:Printer:1"); // use ssdp:all to get everything
                request.AppendLine(); // without this extra blank line, query won't run properly
                var buff = Encoding.UTF8.GetBytes(request.ToString());

                await stream.WriteAsync(buff.AsBuffer());

                await Task.Delay(5000);

                if (!found)
                    break;
            }
        }
    }
于 2013-09-18T19:38:20.740 に答える