小编Sep*_*hrM的帖子

如何刷新/重新加载桌面

我有一个WPF C#项目,我正在实现Windows文件夹选项的设置.其中之一是"单击以打开项目"(而不是双击).当我更改注册表项时,我需要刷新我找到解决方案的Windows资源管理器.但桌面不刷新,甚至手动刷新它不会应用更改.我使用过IActiveDesktop :: ApplyChanges方法,但没有用(或者我犯了一个错误).我也使用过这段代码片段,但它仍然没有应用我所做的更改:

SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)

这里是我用来刷新Win Explorer的完整代码片段(女巫来自这个网站):

[System.Runtime.InteropServices.DllImport("Shell32.dll")]
    private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);

    public static void RefreshWindowsExplorer()
    {
        // Refresh the desktop
        SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);

        // Refresh any open explorer windows
        // based on http://stackoverflow.com/questions/2488727/refresh-windows-explorer-in-win7
        Guid CLSID_ShellApplication = new Guid("13709620-C279-11CE-A49E-444553540000");
        Type shellApplicationType = Type.GetTypeFromCLSID(CLSID_ShellApplication, true);

        object shellApplication = Activator.CreateInstance(shellApplicationType);
        object windows = shellApplicationType.InvokeMember("Windows", System.Reflection.BindingFlags.InvokeMethod, null, shellApplication, new object[] { });

        Type windowsType = windows.GetType();
        object count = windowsType.InvokeMember("Count", System.Reflection.BindingFlags.GetProperty, …
Run Code Online (Sandbox Code Playgroud)

c# wpf desktop

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

切换 增强指针精度

我们基本上是在创建一个控制面板小程序。我们需要在鼠标属性中切换“增强指针精度”。
为此,我们需要SystemParametersInfo调用SPI_GETMOUSE. 它有一个包含 3 个元素的数组作为其第三个参数。我是 PInvoke 的新手,我尝试过很多签名,但到目前为止还没有成功。这是我为签名所做的尝试:

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, [MarshalAs(UnmanagedType.LPArray)] ref long[] vparam, SPIF fWinIni);  

static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref long[] vparam, SPIF fWinIni);
Run Code Online (Sandbox Code Playgroud)

上述方法都不适合我,这是我遇到的异常::
System.AccessViolationException尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
在搜索时我想出了这个用VB编写的。

解决方案:感谢GWLlosa 的回答,我想出了解决方案

[DllImport("user32.dll", EntryPoint = "SystemParametersInfo", SetLastError = true)]
public static extern bool SystemParametersInfoGet(uint action, uint param, IntPtr vparam, SPIF fWinIni);
public const UInt32 SPI_GETMOUSE = 0x0003;
[DllImport("user32.dll", …
Run Code Online (Sandbox Code Playgroud)

c# pinvoke marshalling mouse-cursor

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

使用索引从dll获取文本

如何使用索引从msvp.dll和themeui.dll等Windows dll中获取字符串?在注册表或主题文件中,有一些字符串(如主题中的DisplayName)指向dll和索引号而不是真实文本.例如,我在Windows主题文件中有:DisplayName = @%SystemRoot%\ System32\themeui.dll,-2106.那么如何使用C#和.Net 4.0从这些dll中检索真正的字符串呢?

c# string dll

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

仅使用加法和乘法来实现除法

我正在用C#编写一个BigDecimal类.我已经成功实现了+, - 和*运算符.但我无法想出一种计算2 BigDecimals除法的方法.使用这3个运营商实施部门的最快捷方式是什么?或者有更好的方法吗?(考虑开发时间和算法速度)

目标1:我希望结果是具有固定精度的另一个BigDecimal(应该是可更改的)

目标2:正如您所提到的,BigDecimal的目的不是固定的精度.那么我怎样才能实现无限精度呢?

另一个问题:使用Microsoft BCL的BigRational类进行任意精度算术然后在此线程中使用Christopher Currens的扩展方法更好(关于速度和灵活性):C#中是否有BigFloat类?得到十进制表示而不是写一个新类?

c# math division

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

静音时 CSCore 环回录音

CSCore.WasapiLoopbackCapture用来录制系统声音。但是当系统没有声音时,它根本不录音!例如,在播放音乐和录制音乐时,输出文件的持续时间小于曲目的持续时间。我希望它即使在系统中没有声音的情况下也能继续录制,但我没有找到任何属性来控制这种行为。这是我的代码片段:

WasapiCapture waveLoop = new WasapiLoopbackCapture();
waveLoop.Initialize();
waveLoop.DataAvailable += waveLoop_DataAvailable;
waveLoop.Stopped += waveLoop_Stopped;
waveLoop.Start();
Run Code Online (Sandbox Code Playgroud)

c# audio-recording cscore

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

如何将 System.Windows.Input.Cursor 转换为 ImageSource?

我有一个 .cur 文件路径 ( "%SystemRoot%\cursors\aero_arrow.cur"),我想在图像控件中显示。所以我需要将 Cursor 转换为 ImageSource。我尝试了 CursorConverter 和 ImageSourceConverter 但没有运气。我还尝试从光标创建图形,然后将其转换为位图,但这也不起作用。

该线程说:

直接将 Cursor 转换为 Icon 很复杂,因为 Cursor 不公开它使用的图像源。

如果您确实想将图像绑定到光标,您可能想尝试一种方法。

由于WindowForm能够绘制光标,因此我们可以使用WindowForm在位图上绘制光标。之后我们可以找到一种方法将该位图复制到 WPF 支持的位置。

现在有趣的是,我无法创建System.Windows.Forms.Cursor既没有文件路径也没有流的新实例,因为它抛出以下异常:

System.Runtime.InteropServices.COMException (0x800A01E1): 
Exception from HRESULT: 0x800A01E1 (CTL_E_INVALIDPICTURE)    
at System.Windows.Forms.UnsafeNativeMethods.IPersistStream.Load(IStream pstm)   
at System.Windows.Forms.Cursor.LoadPicture(IStream stream)
Run Code Online (Sandbox Code Playgroud)

System.Windows.Input.Cursor那么有人可以告诉我转换为的最佳方法吗ImageSource

.ani 光标又如何呢?如果我没记错的话System.Windows.Input.Cursor不支持动画光标,那么我该如何向用户显示它们呢?将它们转换为 gif 然后使用 3d party gif 库?

.net c# wpf cursor imagesource

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

在流中保存和加载 Ink Canvas StrokeCollection

我正在尝试在 WPF 中序列化墨水画布。所以我使用StrokeCollection.Save将笔画保存到MemoryStream. 但是当我尝试将流加载到InkCanvas我得到一个ArgumentException声明“ISF 数据的长度必须大于零”。
这是代码示例:

using (MemoryStream ms = new MemoryStream())
{
    inkcanvas.Strokes.Save(ms);
    inkcanvas.Strokes = new System.Windows.Ink.StrokeCollection(ms);
}
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

c# wpf serialization inkcanvas

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