vbscript에서 클립 보드를 사용하십시오
-
02-07-2019 - |
문제
클립 보드에 텍스트를 배치하는 메소드를 찾고 있습니다. vbscript. 해당 VBScript는 로그인 스크립트의 일부로 배포됩니다. 깨끗한 Windows XP 시스템에서 사용할 수없는 것을 사용하지 않으려 고합니다.
편집하다:이것이 무엇인지에 대한 질문에 대한 답변으로.
우리는 조직 내부의 사용자가 이메일로 첨부 파일을 지속적으로 전송하는 대신 파일 서버를 사용하여 문서를 전송하도록 권장하고 싶었습니다. 이것에 대한 가장 큰 장벽 중 하나는 사람들에게 올바른 네트워크 경로가 파일/폴더에 대한 것이 무엇인지 항상 분명하지 않다는 것입니다. 빠른 스크립트를 개발하고 사용자가 파일/폴더를 마우스 오른쪽 버튼으로 클릭하고 조직 내 사람에게 이메일을 보내는 URL을 얻을 수 있도록 Windows 상황에 맞는 메뉴에 첨부했습니다.
대화 상자에 표시된 URL이 클립 보드에 배치되기를 원합니다.
해결책
Microsoft는 VBScript가 클립 보드에 직접 액세스 할 수있는 방법을 제공하지 않습니다. 검색을하는 경우 'clipboard'
~에 이것 당신이 볼 수있는 사이트 :
Applications for Applications의 Visual Basic은 화면, 프린터, 앱, 디버그, ERR 및 클립 보드 개체를 지원하지만 vbscript는 ERR 객체 만 지원합니다. 따라서 VBScript를 사용하면 마우스 포인터 또는 클립 보드와 같은 유용한 객체에 액세스 할 수 없습니다. 그러나 ERR 개체를 사용하여 응용 프로그램에 런타임 오류 처리를 제공 할 수 있습니다.
따라서 Notepad를 간접적으로 사용하는 것은 아마도 VBScript만으로 할 수있는 최선 일 것입니다.
다른 팁
내 의견으로는 완벽하지는 않지만 성가신 보안 경고는 W2K3 서버에서 Clip.exe를 사용하는 것입니다.
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c echo hello world | clip", 0, TRUE
http://www.petri.co.il/quickly_copy_error_and_display_messages.htm
아래 질문에 따라 다중 문자열이있는 예
Dim string
String = "text here" &chr(13)& "more text here"
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c echo " & String & " | clip", 0, TRUE
내가 지금까지 찾은 가장 가까운 솔루션은 IE를 사용하여 클립 보드에서 물건을 얻고 설정하는 방법입니다. 이 솔루션의 문제점은 사용자가 보안 경고를 받는다는 것입니다. 나는 로컬 컴퓨터 보안 구역으로 'About : blank'를 이동하려는 유혹을 받으므로 경고를 얻지 못하지만 보안의 영향이 무엇인지 확실하지 않습니다.
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentwindow.clipboardData.SetData "text", "Hello This Is A Test"
objIE.Quit
http://www.microsoft.com/technet/scriptcenter/resources/qanda/dec04/hey1215.mspx
Microsoft의 Clip.exe를 사용하는 것은 깨끗한 Windows XP 시스템 솔루션에 가장 가깝습니다. 그러나 CMD.exe에 전화하여 사용하려면 호스팅 할 필요가 없습니다. 직접 호출하여 스크립트 코드에서 입력 스트림에 쓸 수 있습니다. 입력 스트림 Clip.exe가 컨텐츠를 클립 보드에 바로 쓰게됩니다.
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("clip")
Set oIn = oExec.stdIn
oIn.WriteLine "Something One"
oIn.WriteLine "Something Two"
oIn.WriteLine "Something Three"
oIn.Close
스크립트가 계속 처리되기 전에 클립이 완료 될 때까지 기다려야하는 경우 추가하십시오.
' loop until we're finished working.
Do While oExec.Status = 0
WScript.Sleep 100
Loop
그리고 객체를 풀어주는 것을 잊지 마십시오
Set oIn = Nothing
Set oExec = Nothing
Internet Explorer 및 Clipboard 액세스와 관련된 보안 경고를 피하려면 Application 객체와 해당 방법을 사용하여 데이터를 클립 보드에 넣는 것이 좋습니다. 물론 MS 워드가 설치된 컴퓨터에서만 사용할 수 있지만 요즘에는 대부분의 것입니다. ( *'깨끗한'시스템에 물건을 요청했다는 사실에도 불구하고 :) *)
' Set what you want to put in the clipboard '
strMessage = "Imagine that, it works!"
' Declare an object for the word application '
Set objWord = CreateObject("Word.Application")
' Using the object '
With objWord
.Visible = False ' Don't show word '
.Documents.Add ' Create a document '
.Selection.TypeText strMessage ' Put text into it '
.Selection.WholeStory ' Select everything in the doc '
.Selection.Copy ' Copy contents to clipboard '
.Quit False ' Close Word, don't save '
End With
MS Word 응용 프로그램 객체와 그 방법에 대한 세부 사항을 여기에서 찾을 수 있습니다. http://msdn.microsoft.com/en-us/library/aa221371(Office.11).aspx
다음은 "클립"명령을 사용하는 또 다른 버전입니다.이 버전은 문자열 끝에 캐리지 리턴, 선 피드를 추가하지 않습니다.
strA= "some character string"
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "cmd /C echo . | set /p x=" & strA & "| c:\clip.exe", 2
s = "String: """ & strA & """ is on the clipboard."
Wscript.Echo s
나는 이것을 XP에서만 테스트했습니다. Clip.exe가 다운로드되었습니다 http://www.petri.co.il/downloads/clip.zip 그리고 C : 에 배치되었습니다.
보안 경고가없고, 완전하고 액세스 할 수 있습니다 :
'create a clipboard thing
Dim ClipBoard
Set Clipboard = New cClipBoard
ClipBoard.Clear
ClipBoard.Data = "Test"
Class cClipBoard
Private objHTML
Private Sub Class_Initialize
Set objHTML = CreateObject("htmlfile")
End Sub
Public Sub Clear()
objHTML.ParentWindow.ClipboardData.ClearData()
End Sub
Public Property Let Data(Value)
objHTML.ParentWindow.ClipboardData.SetData "Text" , Value
End Property
Public Property Get Data()
Data = objHTML.ParentWindow.ClipboardData.GetData("Text")
End Property
Private Sub Class_Terminate
Set objHTML = Nothing
End Sub
End Class
예제 사용.
' Create scripting object
Dim WShell, lRunUninstall
Set WShell = CreateObject("WScript.Shell")
WShell.sendkeys "^c"
WScript.Sleep 250
bWindowFound = WShell.AppActivate("Microsoft Excel")
WShell.sendkeys ClipBoard.Data
VBScript/CMD의 멀티 라인 정보를 클립 보드에 복사하는 방법을 찾았습니다.
순서:
- VBS를 사용하면 클립 보드에 복사 해야하는 최종 "서식 문자열"을 생성합니다.
- "형식화 된 문자열"으로 (txt) 파일을 생성합니다.
- CMD에서 유형 명령을 사용하여 파이프로 클립에 정보를 붙여 넣습니다.
예제 스크립트 :
Function CopyToClipboard( sInputString )
Dim oShell: Set oShell = CreateObject("WScript.Shell")
Dim sTempFolder: sTempFolder = oShell.ExpandEnvironmentStrings("%TEMP%")
Dim sFullFilePath: sFullFilePath = sTempFolder & "\" & "temp_file.txt"
Const iForWriting = 2, bCreateFile = True
Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject")
With oFSO.OpenTextFile(sFullFilePath, iForWriting, bCreateFile)
.Write sInputString
.Close
End With
Const iHideWindow = 0, bWaitOnReturnTrue = True
Dim sCommand: sCommand = "CMD /C TYPE " & sFullFilePath & "|CLIP"
oShell.Run sCommand, iHideWindow, bWaitOnReturnTrue
Set oShell = Nothing
Set oFSO = Nothing
End Function
Sub Main
Call CopyToClipboard( "Text1" & vbNewLine & "Text2" )
End Sub
Call Main
IE를 사용하는 또 다른 방법을 고안했지만 보안 경고를 피했습니다 ...
그건 그렇고 ..이 기능은 JavaScript입니다 .. 그러나 U는 쉽게 vbscript로 변환 할 수 있습니다 ..
function CopyText(sTxt) {
var oIe = WScript.CreateObject('InternetExplorer.Application');
oIe.silent = true;
oIe.Navigate('about:blank');
while(oIe.ReadyState!=4) WScript.Sleep(20);
while(oIe.document.readyState!='complete') WSript.Sleep(20);
oIe.document.body.innerHTML = "<textarea id=txtArea wrap=off></textarea>";
var oTb = oIe.document.getElementById('txtArea');
oTb.value = sTxt;
oTb.select();
oTb = null;
oIe.ExecWB(12,0);
oIe.Quit();
oIe = null;
}
다음은 VBS로 번역 된 Srikanth의 방법입니다
function SetClipBoard(sTxt)
Set oIe = WScript.CreateObject("InternetExplorer.Application")
oIe.silent = true
oIe.Navigate("about:blank")
do while oIe.ReadyState <> 4
WScript.Sleep 20
loop
do while oIe.document.readyState <> "complete"
WScript.Sleep 20
loop
oIe.document.body.innerHTML = "<textarea id=txtArea wrap=off></textarea>"
set oTb = oIe.document.getElementById("txtArea")
oTb.value = sTxt
oTb.select
set oTb = nothing
oIe.ExecWB 12,0
oIe.Quit
Set oIe = nothing
End function
function GetClipBoard()
set oIe = WScript.CreateObject("InternetExplorer.Application")
oIe.silent = true
oIe.Navigate("about:blank")
do while oIe.ReadyState <> 4
WScript.Sleep 20
loop
do while oIe.document.readyState <> "complete"
WScript.Sleep 20
loop
oIe.document.body.innerHTML = "<textarea id=txtArea wrap=off></textarea>"
set oTb = oIe.document.getElementById("txtArea")
oTb.focus
oIe.ExecWB 13,0
GetClipBoard = oTb.value
oTb.select
set oTb = nothing
oIe.Quit
Set oIe = nothing
End function
가장 쉬운 방법은 내장을 사용하는 것입니다 mshta.exe
기능 :
sText = "Text Content"
CreateObject("WScript.Shell").Run "mshta.exe ""javascript:clipboardData.setData('text','" & Replace(Replace(sText, "\", "\\"), "'", "\'") & "');close();""", 0, True
클립 보드에 이중 견적 숯이 들어있는 문자열을 넣으려면 "
, 아래 코드를 사용하십시오.
sText = "Text Content and double quote "" char"
CreateObject("WScript.Shell").Run "mshta.exe ""javascript:clipboardData.setData('text','" & Replace(Replace(Replace(sText, "\", "\\"), """", """"""), "'", "\'") & "'.replace('""""',String.fromCharCode(34)));close();""", 0, True
보세요 이 게시물. 그것은 해킹 된 접근법을 설명합니다 읽다 클립 보드에서 CTRL+V를 CTRL+A로 변경 한 다음 Ctrl+C로 변경하는 등 클립 보드에도 적응할 수 있다고 생각합니다.
당신의 수업에서 ClipBoard
, Clear Sub 또는 LET Data Sub Work도 아닙니다. 나는 그들이 창에 영향을 미치지 않는다는 것을 의미합니다 Clipboard
. 실제로, 아이러니하게도, 작동하는 유일한 서브는 예제에 포함되지 않은 것입니다. 즉, 데이터를 얻는 것입니다! (이 코드를 꽤 많이 테스트했습니다.)
그러나 그것은 당신의 잘못이 아닙니다. ClipboardData.setData를 사용하여 클립 보드에 데이터를 복사하려고했는데 불가능합니다. 적어도 "htmlfile"객체를 만들어서는 아닙니다. 어쩌면 몇 가지 경우에서 보았 듯이 "internetexplorer.application"인스턴스를 만들어서 작동하지만 시도하지 않았습니다. 나는 그런 간단한 작업에 대한 응용 프로그램 인스턴스를 만드는 것을 싫어합니다!
알키
단지 텍스트라면 텍스트 파일을 만들고 필요할 때 내용을 읽을 수 없습니까?
또 다른 대안이자 명확하게 kludge는 SendKeys()
방법.
라인 끝에서 보안 경고와 캐리지 리턴 없음
' value to put in Clipboard
mavaleur = "YEAH"
' current Dir
path = WScript.ScriptFullName
GetPath = Left(path, InStrRev(path, "\"))
' Put the value in a file
Set objFSO=CreateObject("Scripting.FileSystemObject")
outFile=GetPath & "fichier.valeur"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write mavaleur
objFile.Close
' Put the file in the Clipboard
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c clip < " & outFile, 0, TRUE
' Erase the file
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile outFile