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是传递给.NetSystem.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
将是其可执行文件的路径。
否,剪贴板不提供该信息。否,剪贴板不提供该信息。