在AI的全力帮助下,完成的一个局域网远程控制息屏功能程序。

纯编程小白 ,通过论坛边学边试验,感谢这个论坛。
程序代码如下:
import win.ui;
import console;
import wsock.tcp.simpleHttpServer;
import inet.adapter;
import process;
/*DSG{{*/
var winform = win.form(text="远程屏幕控制服务器";right=500;bottom=320)
winform.add(
edit={cls="edit";left=20;top=20;right=480;bottom=280;edge=1;multiline=1;readonly=1;vscroll=1;z=1}
)
/*}}*/
// 获取本机局域网IP地址
var localIp = "";
for adptInfo in inet.adapter.each() {
// 获取有效的非回环IP地址
if(adptInfo.currentIpAddress
and adptInfo.currentIpAddress != "127.0.0.1"
and adptInfo.currentIpAddress != ""
and string.find(adptInfo.description, "Virtual") == null
and string.find(adptInfo.description, "VMware") == null
and string.find(adptInfo.description, "VirtualBox") == null) {
localIp = adptInfo.currentIpAddress;
break;
}
}
if(localIp == "") localIp = "127.0.0.1";
// 屏幕控制函数
var screenControl = {
// 关闭显示器(息屏)
turnOff = function() {
try {
::User32.SendMessage(0xFFFF, 0x0112, 0xF170, 2); // WM_SYSCOMMAND, SC_MONITORPOWER
return true;
} catch(e) {
return false;
}
};
// 低功耗模式(睡眠)
sleep = function() {
try {
::User32.SendMessage(0xFFFF, 0x0112, 0xF140, 2); // SC_MONITORPOWER 低功耗
return true;
} catch(e) {
return false;
}
};
}
// 启动 HTTP 服务端
var server = wsock.tcp.simpleHttpServer("0.0.0.0", 8081);
console.open();
//winform.show();
console.log("========================================");
console.log("🖥️ 远程屏幕控制服务器已启动");
console.log("========================================");
console.log("本地访问地址: http://127.0.0.1:8081");
console.log("局域网访问地址: http://", localIp, ":8081");
console.log("========================================");
console.log("关闭此窗口即服务停止");
// 在界面上显示服务器信息
winform.edit.print("========================================");
winform.edit.print("🖥️ 远程屏幕控制服务器已启动");
winform.edit.print("========================================");
winform.edit.print("");
winform.edit.print("📱 访问地址:");
winform.edit.print(" 本地访问: http://127.0.0.1:8081");
winform.edit.print(" 局域网访问: http://" + localIp + ":8081");
winform.edit.print("");
winform.edit.print("📋 功能说明:");
winform.edit.print(" 🔴 息屏 - 关闭显示器");
winform.edit.print("");
winform.edit.print("💡 提示:");
winform.edit.print(" - 息屏后可通过亮屏按钮唤醒");
winform.edit.print(" - 部分电脑可能需要移动鼠标唤醒");
winform.edit.print(" - 关闭此窗口即可停止服务");
winform.edit.print("");
winform.edit.print("========================================");
// 在后台线程中运行服务器
server.run(
function(response, request){
// 屏幕控制函数(在线程内重新定义)
var screenCtrl = {
turnOff = function() {
try {
::User32.SendMessage(0xFFFF, 0x0112, 0xF170, 2);
return true;
} catch(e) {
return false;
};
};
};
// 处理API请求
if( request.path == "/api/turnOff" ){
var result = screenCtrl.turnOff();
response.write('{"success":' + tostring(result) + ',"action":"turnOff"}');
return;
}
// 响应网页内容
response.write(`
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>局域网远程屏幕息屏</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
background: linear-gradient(135deg, #1e3c72 0%, #2a5298 100%);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
}
.container {
background: white;
border-radius: 30px;
padding: 40px;
box-shadow: 0 25px 50px rgba(0,0,0,0.3);
text-align: center;
max-width: 500px;
width: 100%;
animation: fadeIn 0.5s ease-out;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
h1 {
color: #1e3c72;
margin-bottom: 10px;
font-size: 28px;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
}
.subtitle {
color: #666;
margin-bottom: 30px;
font-size: 14px;
border-bottom: 2px solid #e0e0e0;
padding-bottom: 20px;
}
.screen-icon {
font-size: 120px;
margin: 20px 0;
transition: transform 0.3s;
}
.control-buttons {
display: flex;
gap: 15px;
margin: 30px 0;
justify-content: center;
flex-wrap: wrap;
}
button {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border: none;
padding: 14px 28px;
border-radius: 50px;
cursor: pointer;
font-size: 16px;
font-weight: 600;
transition: all 0.3s;
display: inline-flex;
align-items: center;
gap: 8px;
box-shadow: 0 4px 15px rgba(0,0,0,0.2);
}
button:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(0,0,0,0.3);
}
button:active {
transform: translateY(0);
}
.turn-off-btn {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
}
.turn-off-btn:hover {
background: linear-gradient(135deg, #e07ae9 0%, #e4455a 100%);
}
.turn-on-btn {
background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
}
.info-card {
background: #f8f9fa;
border-radius: 15px;
padding: 15px;
margin-top: 20px;
text-align: left;
}
.info-item {
display: flex;
justify-content: space-between;
padding: 8px 0;
border-bottom: 1px solid #e0e0e0;
font-size: 14px;
}
.info-item:last-child {
border-bottom: none;
}
.info-label {
color: #666;
font-weight: 500;
}
.info-value {
color: #1e3c72;
font-weight: 600;
font-family: monospace;
}
.status-message {
margin-top: 20px;
padding: 12px;
border-radius: 10px;
font-size: 14px;
transition: all 0.3s;
}
.status-success {
background: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.status-error {
background: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.status-warning {
background: #fff3cd;
color: #856404;
border: 1px solid #ffeeba;
}
.warning-text {
font-size: 12px;
color: #f5576c;
margin-top: 15px;
padding: 10px;
background: #fff3cd;
border-radius: 8px;
}
@media (max-width: 600px) {
.container {
padding: 30px 20px;
}
button {
padding: 12px 20px;
font-size: 14px;
}
.screen-icon {
font-size: 80px;
}
}
</style>
</head>
<body>
<div class="container">
<h1>
🖥️ 远程屏幕息屏
</h1>
<div class="subtitle">
通过局域网控制服务器显示器
</div>
<div class="screen-icon" id="screenIcon">
💻
</div>
<div class="control-buttons">
<button class="turn-off-btn" onclick="turnOff()">
🔴 息屏
</button>
</div>
<div class="info-card">
<div class="info-item">
<span class="info-label">🔌 连接状态</span>
<span class="info-value" id="connectionStatus">✅ 已连接</span>
</div>
</div>
<div id="statusMessage" class="status-message" style="display:none;"></div>
<div class="warning-text">
⚠️ 提示:息屏后需要移动鼠标或点击亮屏按钮才能唤醒屏幕<br>
部分笔记本电脑可能需要按键盘任意键唤醒
</div>
</div>
<script>
let currentAction = null;
let actionTimeout = null;
function showMessage(message, type) {
const msgDiv = document.getElementById('statusMessage');
msgDiv.textContent = message;
msgDiv.className = 'status-message status-' + type;
msgDiv.style.display = 'block';
if (actionTimeout) clearTimeout(actionTimeout);
actionTimeout = setTimeout(() => {
msgDiv.style.display = 'none';
}, 3000);
}
function updateLastAction(action) {
const now = new Date();
const timeStr = now.toLocaleTimeString();
document.getElementById('lastAction').innerHTML = action + ' (' + timeStr + ')';
// 更新图标动画
const icon = document.getElementById('screenIcon');
icon.style.transform = 'scale(1.1)';
setTimeout(() => {
icon.style.transform = 'scale(1)';
}, 300);
}
async function turnOff() {
if (currentAction) return;
currentAction = 'turnOff';
try {
showMessage('正在发送息屏指令...', 'warning');
const response = await fetch('/api/turnOff');
const data = await response.json();
if (data.success) {
showMessage('✅ 屏幕已关闭(息屏)', 'success');
updateLastAction('息屏');
document.getElementById('screenIcon').innerHTML = '🔴';
} else {
showMessage('❌ 息屏指令执行失败', 'error');
}
} catch (error) {
console.error('Error:', error);
showMessage('❌ 网络连接失败,请检查服务器状态', 'error');
} finally {
currentAction = null;
}
}
// 定期检查服务器状态
async function checkServerStatus() {
try {
const response = await fetch('/api/status');
if (response.ok) {
document.getElementById('connectionStatus').innerHTML = '✅ 已连接';
document.getElementById('connectionStatus').style.color = '#28a745';
} else {
throw new Error('Server error');
}
} catch (error) {
document.getElementById('connectionStatus').innerHTML = '❌ 连接断开';
document.getElementById('connectionStatus').style.color = '#dc3545';
}
}
// 每10秒检查一次服务器状态
setInterval(checkServerStatus, 10000);
checkServerStatus();
// 防重复提交
let isSubmitting = false;
const originalTurnOff = turnOff;
const originalTurnOn = turnOn;
window.turnOff = async function() {
if (isSubmitting) return;
isSubmitting = true;
await originalTurnOff();
isSubmitting = false;
};
</script>
</body>
</html>
`);
}
);
// 自动打开默认浏览器
//process.execute("http://127.0.0.1:8081");
// 窗口关闭时停止服务器
winform.onClose = function(hwnd) {
server.stop();
winform.close();
}
win.loopMessage();