通过System.Windows.Clipboard获取原始数据源?

问题描述 投票:0回答:1

我正在使用

System.Windows.Clipboard
复制一些文本,我想知道是否有机会获得原始来源, 例如a 我从中复制的文件,或者网站、文件夹...?

谢谢

c# .net console clipboard
1个回答
5
投票

Win32 GetClipboardOwner() 函数可用于获取最后将数据放入剪贴板的窗口的句柄。

然后您可以将返回的句柄传递给GetWindowThreadProcessId()以获取该窗口的进程ID和线程ID。

回到.NET领域,您可以使用进程ID作为参数传递给

System.Diagnostics.Process.GetProcessById()
方法,以检索所需的信息。

请注意,您必须构建 64 位应用程序才能全面检查 64 位 过程。如果您的项目设置了Prefer 32-bit选项,则某些 信息将不可用。

另请参阅:
如何获取更新剪贴板的应用程序的进程ID或名称?


Windows API 声明。重载的

GetClipboardOwnerProcessID()
包装器方法返回 ClipBoard 所有者的
ProcessID
以及(可选)其线程 ID。

public class WinApi
{
    [DllImport("user32.dll")]
    private static extern IntPtr GetClipboardOwner();

    //The return value is the identifier of the thread that created the window. 
    [DllImport("user32.dll", SetLastError = true)]
    private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

    //Wrapper used to return the Window processId
    public static uint GetClipboardOwnerProcessID()
    {
        GetWindowThreadProcessId(GetClipboardOwner(), out uint processId);
        return processId;
    }

    //Overload that returns a reference to the Thread ID
    public static uint GetClipboardOwnerProcessID(out uint threadId)
    {
        threadId = GetWindowThreadProcessId(GetClipboardOwner(), out uint processId);
        return processId;
    }
}

如果您只需要进程 ID,则可以像这样调用包装器:

uint clipBoardOwnerProcessId = WinApi.GetClipboardOwnerProcessID();

或者这样,如果您还需要线程 ID:

uint clipBoardOwnerProcessId = WinApi.GetClipboardOwnerProcessID(out uint clipBoardOwnerThreadId);

将返回值传递给

Process.GetProcessById()
方法:

Process clipBoardOwnerProcess = Process.GetProcessById((int)WinApi.GetClipboardOwnerProcessID());
    
string ProcessName = clipBoardOwnerProcess.ProcessName;
string ProcessWindowTitle = clipBoardOwnerProcess.MainWindowTitle;
string ProcessFileName = clipBoardOwnerProcess.MainModule.FileName;
//(...)

如果您从浏览器复制一些文本,

ProcessName
将是您的浏览器的名称,
ProcessFileName
将是其可执行文件的路径。

© www.soinside.com 2019 - 2024. All rights reserved.