C# 是否使用System.Windows.Clipboard获取原始数据源?

C# 是否使用System.Windows.Clipboard获取原始数据源?,c#,console,clipboard,C#,Console,Clipboard,我正在使用System.Windows.Clipboard复制一些文本,我想知道是否有机会获得源代码, e、 g.a我复制它的文件,或者网站,文件夹 感谢可用于获取上次将数据放入剪贴板的窗口句柄。 然后将返回的句柄传递给,以获取该窗口的进程ID和线程ID。 进程ID是传递给.NetSystem.Diagnostics.Process.GetProcessById()方法以检索所需信息的参数。 请注意,您必须构建64位应用程序才能完全检查64位应用程序 过程如果您的项目具有首选32位选项集,则 信

我正在使用
System.Windows.Clipboard
复制一些文本,我想知道是否有机会获得源代码, e、 g.a我复制它的文件,或者网站,文件夹

感谢

可用于获取上次将数据放入剪贴板的窗口句柄。

然后将返回的句柄传递给,以获取该窗口的进程ID和线程ID。

进程ID是传递给.Net
System.Diagnostics.Process.GetProcessById()方法以检索所需信息的参数。

请注意,您必须构建64位应用程序才能完全检查64位应用程序 过程如果您的项目具有首选32位选项集,则 信息将不可用。

Windows API声明。重载的
GetClipboardOwnerProcessID()
wrapper方法返回剪贴板所有者的ProcessID,还可以选择返回其线程ID。

public class WinApi
{
    [SuppressUnmanagedCodeSecurityAttribute]
    internal static class SafeNativeMethods
    {
        [DllImport("user32.dll")]
        public static extern IntPtr GetClipboardOwner();
    }

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

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

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

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

uint ClipBoadrOwnerProcessId = WinApi.GetClipboardOwnerProcessID();
或者,如果您还需要线程Id,也可以使用这种方式:

uint ClipBoadrOwnerThreadId = 0;
uint ClipBoadrOwnerProcessId = WinApi.GetClipboardOwnerProcessID(ref ClipBoadrOwnerThreadId);
将返回的值传递给
进程。GetProcessById()
方法:

Process ClipBoardOwnerProcess = Process.GetProcessById((int)WinApi.GetClipboardOwnerProcessID());

string ProcessName = ClipBoardOwnerProcess.ProcessName;
string ProcessWindowTitle = ClipBoardOwnerProcess.MainWindowTitle;
string ProcessFileName = ClipBoardOwnerProcess.MainModule.FileName;
//(...)

如果从浏览器中复制一些文本,则
ProcessName
将是浏览器的名称,
ProcessFileName
是其可执行文件的路径。

可用于获取上次将数据放入剪贴板的窗口句柄。

然后将返回的句柄传递给,以获取该窗口的进程ID和线程ID。

进程ID是传递给.Net
System.Diagnostics.Process.GetProcessById()方法以检索所需信息的参数。

请注意,您必须构建64位应用程序才能完全检查64位应用程序 过程如果您的项目具有首选32位选项集,则 信息将不可用。

Windows API声明。重载的
GetClipboardOwnerProcessID()
wrapper方法返回剪贴板所有者的ProcessID,还可以选择返回其线程ID。

public class WinApi
{
    [SuppressUnmanagedCodeSecurityAttribute]
    internal static class SafeNativeMethods
    {
        [DllImport("user32.dll")]
        public static extern IntPtr GetClipboardOwner();
    }

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

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

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

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

uint ClipBoadrOwnerProcessId = WinApi.GetClipboardOwnerProcessID();
或者,如果您还需要线程Id,也可以使用这种方式:

uint ClipBoadrOwnerThreadId = 0;
uint ClipBoadrOwnerProcessId = WinApi.GetClipboardOwnerProcessID(ref ClipBoadrOwnerThreadId);
将返回的值传递给
进程。GetProcessById()
方法:

Process ClipBoardOwnerProcess = Process.GetProcessById((int)WinApi.GetClipboardOwnerProcessID());

string ProcessName = ClipBoardOwnerProcess.ProcessName;
string ProcessWindowTitle = ClipBoardOwnerProcess.MainWindowTitle;
string ProcessFileName = ClipBoardOwnerProcess.MainModule.FileName;
//(...)


如果从浏览器复制某些文本,则
ProcessName
将是浏览器的名称,
ProcessFileName
将是其可执行文件的路径。

否,剪贴板不提供该信息。否,剪贴板不提供该信息。