手头的问题:拦截打印请求并修改作业中的数据以添加内容。
到目前为止的解决方案:这是适用于 windows xp 机器的解决方案 1. 将默认打印机重定向到原始 TCP/IP 端口,比如 9100。 2. 编写一个基本的套接字服务器,它在端口 9100 上侦听并在连接发生时接受连接. 3. 在写入虚拟打印机之前从套接字读取并修改内容,虚拟打印机重定向到默认打印机所在的实际端口。
问题:步骤 1 和 2 似乎不适用于 Windows 7 .. 有人可以帮忙..吗?
这是套接字服务器代码(非常基本)...
<?php
// set some variables
$host = "127.0.0.1";
$port = 9100;
// don't timeout!
set_time_limit(0);
if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0)
{
echo "failed to create socket: ".socket_strerror($sock)."\n";
exit();
}
if(($ret = socket_bind($sock, $host, $port)) < 0)
{
echo "failed to bind socket: ".socket_strerror($ret)."\n";
exit();
}
if( ( $ret = socket_listen( $sock, 0 ) ) < 0 )
{
echo "failed to listen to socket: ".socket_strerror($ret)."\n";
exit();
}
socket_set_nonblock($sock);
echo "waiting for clients to connect\n";
while (true)
{
$connection = @socket_accept($sock);
if ($connection === false)
{
usleep(100);
}elseif ($connection > 0)
{
//handle_client($sock, $connection);
}else
{
echo "error: ".socket_strerror($connection);
die;
}
}
因此,此时,当默认打印机发生打印作业时,服务器应该接受连接,但事实并非如此。执行 socket_create、socket_connect 和发送 socket_write 的基本套接字客户端工作正常。但是当发送到同一端口的打印作业时,不会发生同样的事情。它在 Windows XP 上运行良好。有人可以帮忙吗?