JS操作剪切板

Python与JS剪切板与URL操作实战:自动化开发核心技能 在软件开发中,数据交换与资源定位是基础且关键的技术环节。其核心原理在于操作系统与浏览器提供的标准接口,允许程序与系统环境进行安全可控的交互。掌握这些技术,对于提升自动化脚本、数据采集工具及Web应用的交互效率具有重要价值。典型的应用场景包括自动化测试中的数据填充、网络爬虫的链接处理、Web应用的一键复制功能以及API请求的动态构建。本文将聚焦于两大高频需求:系统剪切板的程序化读写与URL的解析验证,通过对比Python的pyperclip、urllib.parse库与JavaScript的Clipboard 阅读详情

FF--IE (兼容)  数据直接添加到剪切板

function CopyContent(copy)  {   
    if (window.clipboardData) {   
      window.clipboardData.setData("Text", copy);   
    }   
    else if (window.netscape) {   
      netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');   
      var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);   
      if (!clip) return;   
         var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);   
         if (!trans) return;   
         trans.addDataFlavor('text/unicode');   
         var str = new Object();   
         var len = new Object();   
         var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);   
         var copytext=copy;   
         str.data=copytext;   
         trans.setTransferData("text/unicode",str,copytext.length*2);   
         var clipid=Components.interfaces.nsIClipboard;   
         if (!clip) return false;   
         clip.setData(trans,null,clipid.kGlobalClipboard);   
     }   
     alert("复制成功!!");   
     return false;      
}  


 

 

<html> 
 <head> 
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
 <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> 
 <meta name="ProgId" content="FrontPage.Editor.Document"> 
 <title>光标位置-www.0097.org</title> 
 <style> 
  INPUT{border: 1 solid #000000} 
  BODY,TABLE{font-size: 10pt} 
 </style> 
 </head> 
 <body> 
 <table border="0" width="700" cellspacing="0" cellpadding="0"> 
 <tr> 
 <td width="479" rowspan="7"> 
 点击 TextArea 实现光标定位 
 <p> 
 <textarea rows="7" cols="49" id="box" onclick=tellPoint()>我怕来不及我要抱着你,直到感觉你的绉纹有了岁月的痕迹,直到视线变得模糊直到不能呼吸 
 为了你我愿意 
 动也不能动也要看着你,直到感觉你的发线有了白雪的痕迹,直到肯定你是真的直到失去力气让我们形影不离 
 如果全世界我也可以放弃,至少还有你值得我去珍惜而你在这里就是生命的奇迹 
 也许全世界我也可以忘记,就是不愿意失去你的消息你掌心的痣我总记得在哪里 
 我们好不容易我们身不由已,我怕时间太快不够将你看仔细,我怕时间太慢日夜担心失去你恨不得一夜之间白头永不分离 
 </textarea> 
 
 <script> 
 function movePoint() { 
 	var pn = parseInt(pnum.value); 
 	if(isNaN(pn)) return; 
 	var rng = box.createTextRange(); 
   	/ /rng.findText("你");	//下面有解释
 	rng.moveStart("character",pn); 
 	rng.collapse(true);		//ture为光标指示到起点,false光标指示到终点
 	rng.select();			//同样可以用rng.move("character",pn)来实现无需上一步
 	returnCase(rng) 
 } 
 
 function tellPoint() { 
 	var rng = event.srcElement.createTextRange(); 
 	rng.moveToPoint(event.x,event.y); 
 	rng.moveStart("character",-event.srcElement.value.length) 
 	pnum.value = rng.text.length 
 	returnCase(rng) 
 } 
 
 function returnCase(rng) { 
 	bh.innerText = rng.boundingHeight; 
 	bl.innerText = rng.boundingLeft; 
 	bt.innerText = rng.boundingTop; 
 	bw.innerText = rng.boundingWidth; 
 	ot.innerText = rng.offsetTop; 
 	ol.innerText = rng.offsetLeft; 
 	t.innerText = rng.text; 
 } 
 
 function selectText(sp,ep) { 
 	sp = parseInt(sp) 
 	ep = parseInt(ep) 
 	if(isNaN(sp)||isNaN(ep))  return; 
 	var rng = box.createTextRange(); 
 	rng.moveEnd("character",-box.value.length)   //这里要注意-length是让光标的起始点和终止点都回到起始处
 	rng.moveStart("character",-box.value.length) 
 	rng.collapse(true); 
 	rng.moveEnd("character",ep)                            //注意的是先后顺序
 	rng.moveStart("character",sp) 
 	rng.select(); 
 	returnCase(rng); 
 } 
 
 var rg = box.createTextRange(); 
 
 function findText(tw) { 
 	if(tw=="") return; 
 	var sw = 0; 
 	if(document.selection) { 
 		sw = document.selection.createRange().text.length; 
 	} 
 	rg.moveEnd("character",box.value.length);  
 	rg.moveStart("character",sw); 
 	if(rg.findText(tw)) { 
 		rg.select(); 
 		returnCase(rg); 
 	} 
 	if(rg.text!=tw) { 
 		alert("已经搜索完了") 
 		rg = box.createTextRange() 
 	} 
 } 
 </script> 
 </p> 
 <p></p> 
 光标位置:<input type="text" value="0" id="pnum" size="8"> <input type="button" onclick="movePoint()" value="移动光标到指定位置"> 
 <p></p> 
 选择指定范围:<input type="text" size="9" id="sbox"> -- <input type="text" size="9" id="ebox"> <input type="button" onclick="selectText(sbox.value,ebox.value)" value="选择"> 
 <p></p> 
 选择查找字符 :<input type="text" value="" id="cbox" size="8"> <input type="button" onclick="findText(cbox.value)" value="查找下一个并选择"> 
 </td> 
 <td width="217">boundingHeight: <span id="bh"></span></td> 
 </tr> 
 <tr> 
 <td width="217">boundingWidth: <span id="bw"></span></td> 
 </tr> 
 <tr> 
 <td width="217">boundingTop: <span id="bt"></span></td> 
 </tr> 
 <tr> 
 <td width="217">boundingLeft: <span id="bl"></span></td> 
 </tr> 
 <tr> 
 <td width="217">offsetLeft: <span id="ol"></span> </td> 
 </tr> 
 <tr> 
 <td width="217">offsetTop: <span id="ot"></span> </td> 
 </tr> 
 <tr> 
 <td width="217">text: <span style="position: absolute; z-index: 10" id="t"></span> </td> 
 </tr> 
 </table> 
 </body> 
 
 </html> 


 

经过多次调试才弄明白,当光标move时,它的开始和结束点是重合的,
所以如果move的话那它的头和尾的光标在一起,如果要选择区域的话就要两者都设,比如
rng.move("character",2);
rng.moveEnd("character",2);
rng.select()
显示高亮,
如果我们没有将光标移动也就是(var rng = box.createTextRange())状态,
那它的光标起始在头部,结束在尾部(可以负移动moveEnd),所以你moveStart就可以选择到文本最后的高亮,
而如果我们已经将光标有所移动比如:rng.findText("你");这样光标的起始和终点其实也是已经重合在了一起,
这个时候你moveStart不动的话那就必须要通过移动moveEnd来显示高亮,

 

<!-- 欢迎转载,请保留作者和出处,谢谢 -->---------------我注明是摘自LxcJie的专栏:)
<HTML>
<STYLE>
.notChangePartValue...{
    input:expression(regInput(this));
}
</STYLE>
<SCRIPT language="javascript">
function regInput(obj)...{

obj.ondrop = function()...{return false;}

obj.oncontextmenu = function()...{return false;}

obj.onkeydown = function() ...{
        restrictInputValue(obj)
    }
}

function restrictInputValue(obj)...{
    var range = obj.createTextRange();

    if(typeof(obj.initWidth) == "undefined")...{
        obj.initWidth = range.boundingWidth;
    }
    var selRange = document.selection.createRange();

    if(selRange.text.length == 0)...{
        selRange.setEndPoint("StartToStart",range);
        var currentWidth = selRange.boundingWidth;
        if(currentWidth < obj.initWidth)...{
            if(event.keyCode < 33 || event.keyCode > 40
                || event.keyCode == 46 || event.keyCode == 8)
                event.returnValue = false;
        }
        if(currentWidth == obj.initWidth)...{
            if(event.keyCode == 8)
                event.returnValue = false;
        }
    }
    else...{
        selRange.moveEnd("character",-selRange.text.length);            //据我测试利用selRange.collapse(true)即可
        selRange.setEndPoint("StartToStart",range);
        var currentWidth = selRange.boundingWidth;
        if(currentWidth <= obj.initWidth-1)...{
            if(event.keyCode < 33 || event.keyCode > 40)
               event.returnValue = false;
        }
    }
}
</SCRIPT>
<BODY>
<INPUT type="text" value="Soft" class="notChangePartValue">
</BODY>
</HTML>

 

 

今天仔细研究了一下setEndPoint的用法:给它的定义是t根据其它范围的结束点设置某范围的结束点

<SCRIPT language="javascript">
function aaa(){
 var rng = document.getElementById("aa").createTextRange(); 
 var rng1 = document.getElementById("aa").createTextRange(); 
 var selRange = document.selection.createRange();
 selRange.setEndPoint("StartToStart",rng);
 selRange.setEndPoint("EndToEnd",rng);
 alert(selRange.text.length)
 selRange.select()
 }
 </SCRIPT>
 <html>
 <BODY>
 <INPUT type="text" value="Softasdfasdfasfdaf" id="aa"  onclick="aaa()">
 <form name="form1" method="post" action="">
   <input type="button" name="Button" value="Button" onClick="aaa()">
 </form>
 </BODY>
 </HTML>


 

上面是文本框的例子, selRange.setEndPoint("StartToStart",rng);的意思就是我们光标点开始往后的文本,selRange.setEndPoint("EndToEnd",rng);是光标点往前的文本,我们可以通过rng.move("character",4)来设置光标点,测试这个例子就明白了,

<SCRIPT language="javascript">
function aaa(){
 var rng = document.getElementById("aa").createTextRange(); 
 var rng1 = document.getElementById("aa").createTextRange(); 
 var selRange = document.selection.createRange();
 rng.move("character",4)
 //rng1.setEndPoint("StartToStart",rng);
 selRange.setEndPoint("EndToEnd",rng);
 alert(rng1.text)
 }
 </SCRIPT>
 <html>
 <BODY>
 <INPUT type="text" value="Softasdfasdfasfdaf" id="aa"  onclick="aaa()">
 <form name="form1" method="post" action="">
   <input type="button" name="Button" value="Button" onClick="aaa()">
 </form>
 </BODY>
 </HTML>


 

javascript中createTextRange用法
返回createTextRange的text和htmlText
<script language="javascript">
function test(){
var rng=document.body.createTextRange();
alert(rng.text)
}
function test1(){
var rng=document.body.createTextRange();
alert(rng.htmlText)
}
</script>
<input type="button" onclick="test()" value="text">
<input type="button" onclick="test1()" value="htmlText">
获取指定文本框中的选中的文字:只响应第一个文本框
<input id="inp1" type="text" value="1234567890">
<input id="inp2" type="text" value="9876543210">
<input type="button" onclick="test()" value="确定">
<script language="javascript">
function test(){
var o=document.getElementById("inp1")
var r = document.selection.createRange();
if(o.createTextRange().inRange(r))
alert(r.text);
}
</script>
页面文本倒序查找
abababababababa
<input value="倒序查找a" onclick=myfindtext("a") type="button">
<script language ='javascript'>
var rng = document.body.createTextRange();
function myfindtext(text){
rng.collapse(false);
if(rng.findText(text,-1,1)){
rng.select();
rng.collapse(true);
}else{alert("end");}
}
</script>
聚焦控件后把光标放到最后
<script language="javascript"> 
function setFocus() { 
var obj = event.srcElement; 
var txt =obj.createTextRange(); 
txt.moveStart('character',obj.value.length); 
txt.collapse(true); 
txt.select(); 
} 
</script> 
<input type="text" value="http://toto369.net" onfocus="setFocus()">
得到文本框内光标位置
<script language="javascript">
function getPos(obj){
obj.focus();
var s=document.selection.createRange();
s.setEndPoint("StartToStart",obj.createTextRange())
alert(s.text.length);
}
</script>
<input type="text" id="txt1" value="1234567890">
<input type="button" value="得到光标位置" onclick=getPos(txt1)>
控制input框内光标位置
<script language="javascript">
function setPos(num){
text1.focus();
var e =document.getElementById("text1");
var r =e.createTextRange();
r.moveStart('character',num);
r.collapse(true);
r.select();
}
</script>
<input type="text" id="text1" value="1234567890">
<select onchange="setPos(this.selectedIndex)">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select>
选中文本框中的一段文字
<script language=javascript>
function sel(obj,num){
var rng=obj.createTextRange()
var sel = rng.duplicate();
sel.moveStart("character", num);
sel.setEndPoint("EndToStart", rng);
sel.select();
}
</script>
<input type="text" id="text1" value="1234567890">
<select onchange="sel(text1,this.value)">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select>
控制文本框内光标的移动
<input type="button" value="<" onclick=go(-1)> 
<input id="demo" value="这里是文字">
<input type="button" value=">" onclick=go(1)> 
<script language="javascript">
function go(n){
demo.focus();
with(document.selection.createRange()){
moveStart("character",n);
collapse();
select();
}
}
</script>


原始出处找不到了。

Python与JavaScript跨平台剪切板与URL操作实战指南 剪切板操作和URL处理是软件开发中实现数据流转与应用间通信的基础技术。剪切板本质上是操作系统提供的进程间通信机制,允许不同应用共享文本、图像等数据,但其API在不同平台(如Windows、macOS、Linux)和浏览器环境中存在显著差异。URL(统一资源定位符)则通过自定义Scheme或通用链接,实现了应用间的深层链接与唤醒功能。掌握这些技术的核心价值在于能够构建高效的工具链和流畅的用户体验,例如开发自动化脚本、实现“一键复制”功能或处理应用跳转逻辑。在实际应用中,开发者常面临跨平台兼容性、浏览器安全策略 阅读详情

相关推荐

JavaScript 读写剪贴板之方式汇总

JavaScript操作剪贴板虽然存在安全问题,但在某些应用场景下还是很方便的,比如复制一个link 等,JavaScript操作剪贴板的方式有: 方式1. 使用navigator 的Clipboard 对象 方式2. 使用 document.execCommand 方式3. window.clipboardData 对象 方式4. 使用一些封装的第三方库

oscar999的专栏 1万+

js 剪切板应用clipboardData详细解析

本篇文章主要介绍了js剪切板应用clipboardData。需要的朋友可以过来参考下,希望对大家有所帮助 注意:ie7,与ie8 对网页有个复制的权限,需在“安全”中的“自定义级别”的脚本中设置 clipboardData 对象 提供了对剪贴板的访问。 三个方法 1.clearData(sDataFormat) 删除剪贴板中指定格式的数据。 2.getData(sDat

1513

浅谈IC测试向量(pattern)及其转换

随着集成电路的飞速发展,其规模越来越大,对电路的质量与可靠性要求进一步提高,集成电路的测试方法也变得越来越困难,为了实现芯片的快速测试和筛选,ATE设备为其提供了强有力的支撑。ATE运用芯片设计仿真文件,将其作为芯片输入激励,通过ATE测试平台提供芯片测试环境,将芯片的输出和测试结果进行比较,以此来判定芯片的好坏。 说起IC测试,不得不说一下Pattern这个词,它中文的意思是模式。在图像处理中,这个词意思为图像的纹理特征,而在IC也即芯片测试行业,这个词实际上代表了需要测试芯片的时序特征。简单的说,在测

flomingo1的专栏 1万+

JavaScript实现点击复制(JS访问剪贴板相关)

document.execCommand()方法用来操作当前聚焦的可编辑元素(`input`、`textarea`)中的内容,例如复制、剪贴、粘贴、删除、文本加粗、插入图片等等效果。 Clipboard API 提供了响应剪贴板命令和异步读写系统剪贴板的能力,该API是用来取代document.execCommand() 这种剪贴板访问方式的。

weixin_45092437的博客 1万+

DIY等离子环:从Class-E电路到七彩辉光,手把手教你打造炫酷科学玩具

本文手把手教你DIY一个炫酷的等离子环科学玩具。从解析等离子体辉光放电原理入手,详细介绍了核心的Class-E自激振荡电路设计、关键元件选型与参数计算,并提供了从物料准备、电路搭建、腔体密封到上电调试的全流程指南。通过调制电路或填充不同气体,还能实现七彩变换与交互效果,是学习高频电路与电磁场知识的绝佳实践项目。

weixin_29305337的博客 635

告别手动打点计时:用Lauterbach TRACE32的RunTime功能,5分钟搞定嵌入式代码段性能分析

本文深入解析了Lauterbach TRACE32的RunTime功能在嵌入式代码性能分析中的革命性应用。通过硬件级计时原理和非侵入式设计,该功能能快速精确测量代码执行时间,显著提升开发效率,特别适用于汽车电子和工业控制领域。文章还提供了从基础设置到高级分析的完整实战指南,帮助工程师轻松掌握这一强大工具。

weixin_30615767的博客 280

js中使用Clipboard API获取剪贴板内容

首先,单纯的 JavaScript 没有一个很完美的访问剪贴板(Clipboard)的方案 W3C 标准下的做法(webkit/opera): 使用:Clipboard API and events clipboardData.getData('text/plain') IE 下的做法: IE支持的时候 W3C 标准还没有,所以只能用 Text 参数: clipboardData.getData...

逸尘的专栏 1万+

第 1 章 Prometheus 监控 | Prometheus 入门

了解 Prometheus 监控系统,学会安装及了解页面功能。

甘蓝的专栏 486

js window clipboardData剪切板

剪切板可以实现内容的全局拷贝粘贴,目前只有IE支持剪切板功能 function setClipboard(){ window.clipboardData.setData("test","goooooooood"); } function ouputClipboardData(){ alert(window.clipboardData.getDa

clh604的专栏 4923

零差云控 ZeroErr eRob 电机 CAN、CANopen、EtherCAT、ROS2 机器人开发详细教程

TwinCAT 3(Windows 控制与自动化技术)是 Beckhoff 提供的开发平台,可将任何兼容 PC 转变为实时控制系统,用于管理各种类型的工业自动化系统,如 PLC(可编程逻辑控制器)、运动控制、机器人等。

机器人控制与仿真应用 1万+

GEE:连续变化检测 CCDC 提取断点信息(干扰时间、干扰幅度、干扰次数)

本文将介绍在 Google Earth Engine (GEE) 平台上连续变化检测与分类(Continuous Change Detection and Classification, CCDC)提取扰动时间、干扰幅度、干扰次数信息,并下载到本地的代码。

养乐多的博客 1946

js操作剪切板的内容,兼容ie、chrome、firefox

一、复制粘贴和剪切事件 IE,firefox,chrome浏览器都有剪切板事件(ClipboardEvent):oncopy复制,onpaste粘贴,oncut剪切. 当需要禁止这些行为时,只需要在这些绑定事件中return false;即 <input oncopy = "return false;"/> <input onpaste = "return fals...

yovven的博客 6561

全网最详细的UAVCAN/DroneCAN链路开发(官方DroneCAN消息+自定义DroneCAN消息)附DroneCAN项目源码

全网最详细的UAVCAN/DroneCAN链路移植开发(官方DroneCAN消息+自定义DroneCAN消息)附工程移植源码

Bit_Dong的博客 3248

js操作剪切板

1.向剪切板写入 图片等任意的数据到剪贴板。 这个方法可以用于实现剪切和复制的功能,是异步的 const copy = navigator.clipboard.write(参数为要写入剪切版的数据) copy.then(()=>{},()=>{}) 2.Clipboard.read()用于读取剪切板的数据,也是异步的成功返回数据 const promise = navigator.clipboard.read(); promise.then(()=>{},()=>{}) ...

weixin_46787337的博客 2813

AutoSAR系列讲解(实践篇)9.5-通信的数据映射

讲解了AppL中的数据与通信中的Signal的一个映射操作

雪云飞星的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JS使用 navigator.clipboard 操作剪切板

3、如果出现失败的情况可以尝试在操作之前加上。

★匆匆★的专栏 1357

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

js 在ajax中不能执行剪切板操作,document.execCommand("Copy");返回值为false

正好项目中需要用到剪切板获取返回值,思路本来是想在后台将返回值放入剪切板中,一直没有成功,查了好多资料,问了不少人,都没有解决问题,具体代码如下:在项目中获取系统剪切板时Clipboard返回值一直为空,有知道的朋友可以帮我解答一下。         StringSelection stringSelection = new StringSelection("++++++");         /...

Z_dasheku的博客 5058

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JS操作剪切板中的信息代码

在IE8下测试正常通过     function readClipboard(){ alert(window.clipboardData.getData('Text')); } function setClipboard(){ var t = document.getElementById("someData").innerText; a

java_dotar_01的专栏 460

Javascript操作剪切板数据(支持IE、Chrome、360、搜狗)

近日,项目上需要在WEB页面上操作剪切板中的数据,经过一顿搜索,终于找到了一个比较完美的解决办法。 当然,在实际应用时还要自行修改一下。经过测试,目前支持IE、Chrome、360、搜狗等浏览器,其它浏览器还未验证。 Untitled var EventUtil = { addHandler: function (element, type, handler) {

乔峰的专栏 1万+

如何通过js复制文本 js操作剪切板

一、原理: 利用 input 框的 .select() 事件选中需要复制的文本。 利用 document.execCommand("copy") 来将文字复制到剪切板中。【MDN已废弃,部分浏览器可使用】 3. 2. 替代方案:https://developer.mozilla.org/zh-CN/docs/Web/API/Clipboard_API 二、查阅资料 const copyText = document.getElementById('copyText') copyT

Xpy 的博客 1万+

Javascript操作剪切板数据(支持IE、Chrome、360、搜狗),亲测!

clipboarddata只能在IE浏览器中使用,在chrome下会提示对象未定义!以下的方法支持IE、Chrome、360、搜狗等浏览器,其它浏览器还未验证。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-C...

weixin_30430169的博客 261

js 操作剪切板

1.IE浏览器 window.clipboardData: setData() //设置值 getData()//获取值 clearData()//删除值 /******* ** IE 浏览器下支持window.clipboardData (兼容IE7+) ** 对于URL类型的数据失效 ...

weixin_30622181的博客 76

Js操作剪切板

由于要在页面实现一个点击复制的功能,总结一下实现方法 方法一:原生js实现 Var text = document.getElementById("text") window.clipboardDate.setData("Text",text); 缺点:只支持IE.不支持ff,chrome,edge 优点:原生js,如果能实现兼容所有的浏览器的方法,那就...

weixin_30551947的博客 2448

js防止从网页复制数据,追加版权信息的剪切板操作

<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript"...

BowenXu11的博客 251

浏览器操作剪切板

在工作中,有时候会有需求操作剪切板内容(复制、粘贴),看了很多种方法,js高程中推荐以下写法: 1 var EventUtil = { 2 getClipboardText:function(event){ 3 var clipboardData = (event.clipboardData |...

weixin_30825199的博客 254
上一篇: 深入掌握JMS
下一篇: Windows XP下安装SQL Server 2000企业版
良才2015
博客等级 码龄19年 25粉丝 13原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值