문제

클립 보드에 텍스트를 배치하는 메소드를 찾고 있습니다. vbscript. 해당 VBScript는 로그인 스크립트의 일부로 배포됩니다. 깨끗한 Windows XP 시스템에서 사용할 수없는 것을 사용하지 않으려 고합니다.

편집하다:이것이 무엇인지에 대한 질문에 대한 답변으로.

우리는 조직 내부의 사용자가 이메일로 첨부 파일을 지속적으로 전송하는 대신 파일 서버를 사용하여 문서를 전송하도록 권장하고 싶었습니다. 이것에 대한 가장 큰 장벽 중 하나는 사람들에게 올바른 네트워크 경로가 파일/폴더에 대한 것이 무엇인지 항상 분명하지 않다는 것입니다. 빠른 스크립트를 개발하고 사용자가 파일/폴더를 마우스 오른쪽 버튼으로 클릭하고 조직 내 사람에게 이메일을 보내는 URL을 얻을 수 있도록 Windows 상황에 맞는 메뉴에 첨부했습니다.

대화 상자에 표시된 URL이 클립 보드에 배치되기를 원합니다.

GetNetworkPath

도움이 되었습니까?

해결책

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top