דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. איך לקבל בקוד רפרנס של קובץ שנמצא בקליפבורד דרך RDP?

איך לקבל בקוד רפרנס של קובץ שנמצא בקליפבורד דרך RDP?

מתוזמן נעוץ נעול הועבר ארכיון code613m
6 פוסטים 2 כותבים 410 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • clickoneC מנותק
    clickoneC מנותק
    clickone
    כתב ב נערך לאחרונה על ידי
    #1

    כולנו מכירים את "העתק-הדבק" של קבצים.
    אם בקוד אני רוצה לדעת את שם הקובץ להעתקה (אחרי פעולת "העתק") אני יכול להשתמש בקוד הבא:

    Clipboard.GetFileDropList(0)
    

    ואז אני יכול להעתיק אותו בקוד, כי יש לי את הנתיב.

    הבעייה שלי:
    אני רוצה להעתיק על המחשב שלי, ולהדביק בקוד בשרת RDP (במקרה שלי: WIN SERVER 2008 R2).
    אז להדביק רגיל הוא נותן, אבל לא לקבל את הנתיב באמצעות הקוד הנ"ל.

    בעבר (WIN XP), בהעתקה לRDP ווינדוס היה מעביר את הקובץ לקליפבורד של המחשב השני, ואז הייתה אפשרות להדביק [מהתיקייה הזמנית של המחשב המקומי], היום מייקרוסופט שינו את זה (לטובה!) והקובץ לא מועתק לשום מקום עד שלא עושים "הדבק" והווינדוס שומר את הרפרנס בלבד.

    נסיתי לחפש בגוגל איך מוצאים את הרפרנס להעתקה, אני דיי בטוח שזה כתובת בסיגנון של:

    \\tcpclient\c\bla.doc
    

    אבל לא ממש מוצא איפה נמצאת הכתובת 😢 😢

    רעיונות?

    פורסם במקור בפורום CODE613 ב11/06/2014 00:53 (+03:00)

    אין טסט כמו פרודקשן.

    המייל שלי urivpn@gmail.com

    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      אצלי עובד, אבל עם באג חמור...
      הרצתי קוד VB.NET, ע"ג מחשב מרוחק (SERVER 2003) והוא הציג כתובת שהועתקה במחשב המקומי (WIN7). פורמט הכתובת בדיוק כמו שציינת.
      הנה הקוד:

      Dim IsContains = My.Computer.Clipboard.ContainsFileDropList
      Console.WriteLine(IsContains)
      
      If IsContains Then Console.WriteLine(My.Computer.Clipboard.GetFileDropList(0))
      

      הפלט:

      True
      \\tsclient\C\Users\shmuel\Desktop\PC07.pptx
      

      אבל! אחרי הרצת הקוד, ההדבקה ננעלת על הכתובת הזו!
      כל ההעתקות מכאן ואיך במחשב המקומי מדביקים בשרת את הקובץ ההוא...
      מוזר, ומעניין שלא מצאתי שום אזכור לבאג ברחבי הרשת.

      פורסם במקור בפורום CODE613 ב11/06/2014 13:23 (+03:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      1
      • clickoneC מנותק
        clickoneC מנותק
        clickone
        כתב ב נערך לאחרונה על ידי
        #3

        @דוד ל.ט.

        אצלי עובד, אבל עם באג חמור...
        הרצתי קוד VB.NET, ע"ג מחשב מרוחק (SERVER 2003) והוא הציג כתובת שהועתקה במחשב המקומי (WIN7). פורמט הכתובת בדיוק כמו שציינת.
        הנה הקוד:

        Dim IsContains = My.Computer.Clipboard.ContainsFileDropList
        Console.WriteLine(IsContains)
        
        If IsContains Then Console.WriteLine(My.Computer.Clipboard.GetFileDropList(0))
        

        הפלט:

        True
        \\tsclient\C\Users\shmuel\Desktop\PC07.pptx
        

        אבל! אחרי הרצת הקוד, ההדבקה ננעלת על הכתובת הזו!
        כל ההעתקות מכאן ואיך במחשב המקומי מדביקים בשרת את הקובץ ההוא...
        מוזר, ומעניין שלא מצאתי שום אזכור לבאג ברחבי הרשת.

        כי הוא שומר את ההעתקה בבאפר שלו. (זה גם מה שהיה בXP)
        אח"כ הם תיקנו את זה....
        אבל! הקוד הנ"ל פשוט לא עובד בWIN7 מול SERVER 2008 R2.....

        לא מבין למה... - נראה לי שהם רצו לתקן משהו אחד, ונמצאו מקלקלים דבר אחר....

        פורסם במקור בפורום CODE613 ב11/06/2014 22:06 (+03:00)

        אין טסט כמו פרודקשן.

        המייל שלי urivpn@gmail.com

        תגובה 1 תגובה אחרונה
        0
        • clickoneC מנותק
          clickoneC מנותק
          clickone
          כתב ב נערך לאחרונה על ידי
          #4

          אני פשוט משתגע מזה.
          שרפתי ע"ז כבר הרבה שעות, ובחיפוש בגוגל נראה שהרבה מדברים ע"ז, אבל ללא פיתרון.

          נכון לעכשיו מה שאני מבין זה:
          לקליפבורד יש זיכרון חי.
          לכל מה שנשמר שם יש פורמט מסויים.
          יש רשימה סגורה של פורמטים ידועים מראש, אבל כל מתכנת יכול ליצור לעצמו פורמט משלו.


          ועכשיו לקובץ.

          הפורמט של קובץ הוא FileDrop, אבל כשמעתיקים מRDP אז מה שנשמר בזיכרון זה לא FileDrop אלא משהו אחר.
          נסיונות לאתר איזה פורמטים יכולים להיות "מומרים" לפורמט תיקני מחזירים 3 תוצאות:
          ע"י הפונקצייה:

          data.GetFormats( True)
          
          
          -		data.GetFormats( True)	{Length=3}	String()
          		(0)	"FileGroupDescriptorW"	String
          		(1)	"FileContents"	String
          		(2)	"Preferred DropEffect"	String
          

          3 התוצאות הם בעצם פרטים על שם הקובץ והפעולה (העתקה, העברה וכו') אבל לא איפה הקובץ.
          ההשערה שלי היא שכנראה הקובץ עצמו יושב בפורמט פנימי של מייקרוסופט (כמו שכל מתכנת יכול להגדיר לעצמו פורמט) ולכן הפונקצייה הנ"ל לא מוצאת אותו - (כי כנראה היא מכירה רק את הפורמטים ה"סגורים")

          חיפוש באינטרנט מה שמו של הפורמט הזה לא הניב תוצאות מספקות לעת עתה.

          רעיונות?

          פורסם במקור בפורום CODE613 ב10/08/2014 00:56 (+03:00)

          אין טסט כמו פרודקשן.

          המייל שלי urivpn@gmail.com

          תגובה 1 תגובה אחרונה
          1
          • clickoneC מנותק
            clickoneC מנותק
            clickone
            כתב ב נערך לאחרונה על ידי
            #5

            כמובן, בסוף זה היה FileContents, למרות שזה לא עבד לי בהתחלה ואני לא מבין למה 😞

            הנה הקוד להדבקת קובץ מRDP (שימו לב שזה לא עובד בהדבקה מקומית, וצריך לבדוק אם יש קבצים בFileDrop) :

            Dim data As IDataObject = Clipboard.GetDataObject
                 
                    If data.GetDataPresent("FileContents", True) Then
            
            
                        Dim newFile As String = Path.Combine("c:\", "a.Pdf")
                        Dim memoryStream As MemoryStream = data.GetData("FileContents")
                        ' Create a FileStream object to write a stream to a file
                        Using fileStream As FileStream = System.IO.File.Create(newFile, CInt(memoryStream.Length))
                            ' Fill the bytes[] array with the stream data
                            Dim bytesInStream As Byte() = New Byte(memoryStream.Length - 1) {}
                            memoryStream.Read(bytesInStream, 0, CInt(bytesInStream.Length))
                            ' Use FileStream object to write to the specified file
                            fileStream.Write(bytesInStream, 0, bytesInStream.Length)
                        End Using
                    End If
            

            עכשיו נשאר לראות אם אפשר להמיר לVBA, או שצריך להשתמש בInterop

            פורסם במקור בפורום CODE613 ב10/08/2014 01:32 (+03:00)

            אין טסט כמו פרודקשן.

            המייל שלי urivpn@gmail.com

            תגובה 1 תגובה אחרונה
            2
            • clickoneC מנותק
              clickoneC מנותק
              clickone
              כתב ב נערך לאחרונה על ידי
              #6

              @ClickOne

              כמובן, בסוף זה היה FileContents, למרות שזה לא עבד לי בהתחלה ואני לא מבין למה 😞

              הנה הקוד להדבקת קובץ מRDP (שימו לב שזה לא עובד בהדבקה מקומית, וצריך לבדוק אם יש קבצים בFileDrop) :

              Dim data As IDataObject = Clipboard.GetDataObject
                   
                      If data.GetDataPresent("FileContents", True) Then
              
              
                          Dim newFile As String = Path.Combine("c:\", "a.Pdf")
                          Dim memoryStream As MemoryStream = data.GetData("FileContents")
                          ' Create a FileStream object to write a stream to a file
                          Using fileStream As FileStream = System.IO.File.Create(newFile, CInt(memoryStream.Length))
                              ' Fill the bytes[] array with the stream data
                              Dim bytesInStream As Byte() = New Byte(memoryStream.Length - 1) {}
                              memoryStream.Read(bytesInStream, 0, CInt(bytesInStream.Length))
                              ' Use FileStream object to write to the specified file
                              fileStream.Write(bytesInStream, 0, bytesInStream.Length)
                          End Using
                      End If
              

              עכשיו נשאר לראות אם אפשר להמיר לVBA, או שצריך להשתמש בInterop

              נאלצתי להסיר את הV שמסמן שהנושא נפתר.

              1. כמו שדוד התלונן, הוא נתקע לפעמים בזיכרון על הקובץ המסויים שהעתקתי.
              2. יש פעמים שהוא בכלל לא מזהה שיש משהו בקליפבורד, כאשר יש בבירור, (הראייה שלי שיש זה שהאקספלורר כן נדביק את הקובץ הנכון)

              אני מחפש בינתיים אפשרות להדביק את הקובץ ע"י פקודת הדבק בCMD (בלינוקס אני זוכר שיש פקודה דומה - אבל בווינדוס לא מצאתי עדיין.)

              פורסם במקור בפורום CODE613 ב10/08/2014 23:32 (+03:00)

              אין טסט כמו פרודקשן.

              המייל שלי urivpn@gmail.com

              תגובה 1 תגובה אחרונה
              0

              בא תתחבר לדף היומי!
              • התחברות

              • אין לך חשבון עדיין? הרשמה

              • התחברו או הירשמו כדי לחפש.
              • פוסט ראשון
                פוסט אחרון
              0
              • דף הבית
              • קטגוריות
              • פוסטים אחרונים
              • משתמשים
              • חיפוש
              • חוקי הפורום