Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何锁定剪贴板?_C#_Clipboard - Fatal编程技术网

C# 如何锁定剪贴板?

C# 如何锁定剪贴板?,c#,clipboard,C#,Clipboard,我想知道是否还有其他方法可以从C#锁定和解锁剪贴板。基本上,我会在里面写一些东西,我不希望别人在我拿东西之前给我写东西 我该怎么做呢?不,剪贴板不是那样工作的。如果用户想在另一个应用程序中复制某些内容,但由于您的应用程序以某种方式锁定了它而无法复制,该怎么办 如果您正试图让两个进程进行通信,请研究为进程间通信设计的替代方案,如远程处理、命名管道、套接字或共享内存。远程处理可能是查找用C#编写的应用程序的第一个地方。OpenClipboard()API函数,然后是EmptyClipboard()锁

我想知道是否还有其他方法可以从C#锁定和解锁剪贴板。基本上,我会在里面写一些东西,我不希望别人在我拿东西之前给我写东西


我该怎么做呢?

不,剪贴板不是那样工作的。如果用户想在另一个应用程序中复制某些内容,但由于您的应用程序以某种方式锁定了它而无法复制,该怎么办

如果您正试图让两个进程进行通信,请研究为进程间通信设计的替代方案,如远程处理、命名管道、套接字或共享内存。远程处理可能是查找用C#编写的应用程序的第一个地方。

OpenClipboard()API函数,然后是EmptyClipboard()锁定剪贴板,直到调用CloseClipboard。您可能应该在目标进程中传递窗口的窗口句柄,但是零可以工作

这是一个C#控制台应用程序,当我想测试我的应用程序是否能够优雅地处理锁定剪贴板的恶意应用程序时,它对我起到了作用

class Program
{
    [DllImport("user32.dll", EntryPoint = "OpenClipboard", SetLastError = true)]
    private static extern bool OpenClipboard(IntPtr hWndNewOwner);

    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool CloseClipboard();

    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool EmptyClipboard();

    static void Main(string[] args)
    {
        OpenClipboard(new IntPtr(0));
        EmptyClipboard();
        Console.WriteLine("Clipboard locked. Press enter to unlock and exit.");
        Console.ReadLine();
        CloseClipboard();
    }
}

这些声明来自pinvoke.net。

正如@shambulator所说,这不是剪贴板的设计目的。也许你应该试试另一种方法。与遗留系统的集成可以通过多种方式解决(唉,大多数都很糟糕!)


只能向其发送击键的系统:它是Windows应用程序吗?你能深入研究它的窗口结构来明确设置文本框中的文本吗?系统是否有您可以使用的任何类型的文件I/O?也许你可以查一下它的数据库

不要这样做。剪贴板是为了方便用户,而不是程序员! 您将导致尝试(正确)使用剪贴板的其他程序出错和崩溃,包括监视更新的程序

“程序不应传输数据 进入我们的剪贴板,而不是 一个明确的指示从 用户。“
-Charles Petzold,《编程Windows 3.1》,微软出版社,1992年


那是个坏主意,伊姆霍,而且可能是不可能的。也许如果你给出了你真正想要实现的更多细节,有人会有更好的解决方案,因为据我所知,你不能锁定剪贴板。这是一个共享资源。这不是一个坏主意,这将是可怕的!这会让用户很容易丢失数据,他甚至不知道为什么,他会复制东西,大部分时间都可以,但有时不行。知道如何锁定剪贴板很有用,特别是当你测试你的代码是否能够优雅地处理其他锁定剪贴板的恶意应用程序时。这在技术上是可行的,但正如在座的每个人所意识到的,这会给所有其他应用程序带来可怕的问题。嗯,他正试图加速他的程序。当他的程序有焦点时,一秒钟左右的时间并不是一个可怕的问题。