相关疑难解决方法(0)

IntPtr.Zero相当于null吗?

我试图设置ReadFile为异步运行,根据MSDN,我需要设置lpNumberOfBytesReadnull:

"如果这是一个异步操作,请为此参数使用NULL,以避免可能出现的错误结果."

例如,如果我有以下内容:

  [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
  public static extern bool ReadFile(
     IntPtr hFile,
     out byte[] aBuffer,
     int cbToRead,
     IntPtr cbThatWereRead,
     ref OVERLAPPED pOverlapped
  );
Run Code Online (Sandbox Code Playgroud)

我这样称呼它(意图使第4个参数为null):

Win32API.ReadFile(readHandle, out data_read, Win32API.BUFFER_SIZE, IntPtr.Zero, ref over_lapped);
Run Code Online (Sandbox Code Playgroud)

是否与使用null调用它相同?如果没有,我应该在声明或函数调用本身中更改什么?

我也好奇,如果我应该使用SafeHandleHandleRef代替IntPtrhFile参考?我知道CloseHandle(IntPtr)当我完成它时确保关闭手柄,只是不确定是否有任何其他理由使用其他两个选项IntPtr.我也在努力避免使用不安全的代码.

编辑:事实证明,我不应该设置第四个参数IntPtr.Zero,因为即使我异步运行,它仍然可以立即返回.见异步磁盘I/O.啊,我喜欢自相矛盾的故事.

c# file-io asynchronous

58
推荐指数
3
解决办法
4万
查看次数

如何监控C#中的剪贴板内容更改?

我想在我的C#程序中使用此功能:当用户在任何地方执行Ctrl+ C或复制时(即当剪贴板内容发生更改时),我的程序将收到通知,并检查内容是否符合某些条件,如果是,则成为活动程序,处理内容等

我可以从中获取内容System.Windows.Forms.Clipboard,但是,我不知道如何从剪贴板监视内容更改.

如果使用Windows Vista或更高版本,请使用AddClipboardFormatListenerJohn Knoeller的答案,对于Windows XP,我必须使用较旧的,更脆弱的SetClipboardViewerAPI,如接受的答案.

.net c# clipboard

41
推荐指数
3
解决办法
3万
查看次数

剪贴板更改通知?

我知道如何将内容放入剪贴板并从剪贴板中检索内容.

但是,在这两个操作之间,另一个操作可能会更改剪贴板的内容.

有没有办法在任何应用程序修改剪贴板时收到通知?

windows wpf clipboard winforms

15
推荐指数
2
解决办法
7054
查看次数

如何在WPF中运行我的应用程序时禁用"PRINT SCREEN"按钮?

如何在WPF应用程序运行时禁用"打印屏幕"功能?

用例是我的客户希望避免不必要地复制来自外部世界的有价值的以患者为中心的数据,并且它们提供物理安全性以防止人们通过非数字手段获取数据.

c# wpf printscreen

8
推荐指数
2
解决办法
7763
查看次数

SendKeys Ctrl + C到外部应用程序(文本到剪贴板)

我有一个应用程序,作为托盘图标坐在系统托盘中.我已经注册了一个热键,当按下它时将捕获任何应用程序中的当前文本选择,即使在Web浏览器中也是如此.

我的方法是发送密钥组合{Ctlr + C}来复制文本.然后访问剪贴板并使用我自己的应用程序中的文本.

我在VB.NET中编程,但是在C#中的任何帮助,甚至是使用Win32_Api的C++都会受到高度赞赏.

我使用AutoHotkey,在那里,我有一个访问剪贴板文本的脚本,工作正常.

Pause::
clipboard =  ; Start off empty to allow ClipWait to detect when the text has arrived.
Send ^c
ClipWait, 2  ; Wait for the clipboard to contain text.
if ErrorLevel
{
    ;Do nothing after 2 seconds timeout
    return
}
Run https://translate.google.com/#auto/es/%clipboard%
return
Run Code Online (Sandbox Code Playgroud)

由于AutoHotkey是开源的,我下载了代码并尝试尽可能多地复制ClipWait的行为.

我的代码大多数时间都在工作,但有时会有一个重要的延迟.我无法访问剪贴板和win32函数IsClipboardFormatAvailable()为While保持返回False.当我尝试从可编辑的TextBox中专门从Google Chrome复制时,会发生这种情况.

我尝试了很多不同的东西,包括使用.Net Framework剪贴板类.我读到的问题可能是运行命令的线程没有设置为STA,所以我做到了.在我的绝望中,我也放了一个计时器,但没有完全解决问题.

我也读了一个钩子监视剪贴板的选项,但我想避免这种情况,除非它是唯一的方法.

这是我的VB.NET代码:

Imports System.Runtime.InteropServices
Imports System.Text
Imports System.Threading
Imports Hotkeys
Public Class Form1
    Public m_HotKey As Keys = Keys.F6

    Private Sub RegisterHotkeys() …
Run Code Online (Sandbox Code Playgroud)

c# c++ vb.net clipboard sendkeys

7
推荐指数
1
解决办法
2621
查看次数

c#抓住剪贴板更改,如果窗体最小化到托盘,将无法工作

我在使用此链接上的"Catch Clipboard Events代码"时遇到问题:

剪贴板事件C#

只有当表单停留在前台时,代码才能生效,而不是最小化到托盘但是:如果你添加一个notifyicon并将表单最小化到托盘并将showintaskbar变为false(这样你在托盘中只有一个图标),程序不会再抓住任何剪贴板更改...即使你最大化表单,它也不会再工作...你必须重新启动程序..

关于如何解决这个问题的任何想法!即使表格最小化到托盘中,我怎样才能捕捉到剪贴板的变化!

任何帮助真的很感激......

谢谢

c# clipboard notifyicon

6
推荐指数
1
解决办法
1375
查看次数

使用C#winforms自定义复制/粘贴行为,同时允许文本编辑复制/粘贴

我目前有一个C#winforms应用程序,Ctrl + C和Ctrl + V绑定为编辑主菜单上的键盘快捷键.代码中有一些自定义复制/粘贴行为,它们响应这些菜单项,例如复制和粘贴listviews中的行.

但是,我的问题是您可以编辑行内的文本,当您这样做时,我希望Ctrl + C和Ctrl + V不会触发编辑菜单命令,而应该默认为基于正常文本的复制/粘贴.

我尝试过的一件事是触发BeforeLabelEdit和AfterLabelEdit事件,并从那里手动禁用/重新启用菜单项.不幸的是,似乎禁用的菜单项上的键盘快捷键仍会触发menu_Popup事件,该事件当前用于决定应启用/禁用哪些菜单项.(例如,"粘贴"仅在剪贴板上有文本时才有效).因此,即使禁用菜单项,键盘快捷键仍将激活Popup事件,这将重新启用菜单项.(这是一个错误吗?)

我找不到任何临时禁用菜单项键盘快捷方式的方法,无需手动存储旧快捷方式,将快捷方式设置为null,然后在需要重新启用时感觉脏(但感觉很脏).

当然要覆盖复制/粘贴行为或添加它,这是常见的事情吗?这里有更好的模式吗?

c# events copy-paste winforms

5
推荐指数
1
解决办法
1826
查看次数

是否可以编写一个Windows应用程序,在另一个Windows应用程序中选择文本时获取通知?

我很好奇是否可以编写一个程序来监控我的文本选择.一种可能的用法是编写编辑器/ IDE不可知代码格式化程序:

  1. 应用程序/服务P启动并以某种方式挂钩到窗口中,以便在任何窗口中选择文本时得到通知.
  2. 其他一些应用程序A已启动.
  3. 用户选择A中的文本.
  4. 通过选择的文本通知P.

- >我很乐意这么做...

c# c++ windows winapi

4
推荐指数
1
解决办法
1095
查看次数

C#:如何不断检查剪贴板中的复制文本

我需要帮助在循环中不断检查剪贴板或复制文本.基本上我有一个粘贴按钮,但我只想在我将文本复制到剪贴板时启用它,并在我没有复制任何文本时禁用它.我知道我必须使用:

Clipboard.ContainsText
Run Code Online (Sandbox Code Playgroud)

检查我是否有文本复制到我的剪贴板,但我需要帮助制作循环或东西总是检查.

谢谢.

c# clipboard loops copy button

3
推荐指数
1
解决办法
822
查看次数

ClipBoard Monitor C#

可能重复:
剪贴板事件C#

嗨,

我是否可以连续监控剪贴板以进行任何复制操作?我正在使用C#

谢谢

c# clipboard

1
推荐指数
1
解决办法
1万
查看次数

Try-Catch循环直到成功

bool hasCopiedArtikelnum = false;

while (hasCopiedArtikelnum == false)
{
    try
    {
        artikelnum = Clipboard.GetText();
        hasCopiedArtikelnum = true;
    }
    catch {}
}
Run Code Online (Sandbox Code Playgroud)

我希望程序保持循环,直到他成功复制.将其他东西放入"尝试"工作吗?或者程序还会>>尝试<<将hasCopiedArtikelnum设置为true?

c#

0
推荐指数
1
解决办法
586
查看次数