Tag: winapi

在控制台应用程序中的主线程上调用委托

在Windows应用程序中,当使用多个线程时,我知道有必要调用主线程来更新GUI组件。 如何在控制台应用程序中完成? 例如,我有两个线程,一个主线程和一个辅助线程。 辅助线程始终在监听全局热键; 当它被按下时,辅助线程执行一个事件,该事件触及win32 api方法AnimateWindow。 我收到错误,因为只允许主线程执行所述函数。 当“调用”不可用时,如何有效地告诉主线程执行该方法? 更新:如果有帮助,这是代码。 要查看HotKeyManager内容(其他线程正在发挥作用),请查看此问题的答案 class Hud { bool isHidden = false; int keyId; private static IntPtr windowHandle; public void Init(string[] args) { windowHandle = Process.GetCurrentProcess().MainWindowHandle; SetupHotkey(); InitPowershell(args); Cleanup(); } private void Cleanup() { HotKeyManager.UnregisterHotKey(keyId); } private void SetupHotkey() { keyId = HotKeyManager.RegisterHotKey(Keys.Oemtilde, KeyModifiers.Control); HotKeyManager.HotKeyPressed += new EventHandler(HotKeyManager_HotKeyPressed); } void […]

使用.NET设置注册表项写入权限

我正在尝试在安装过程中向我的应用程序的注册表设置授予对计算机的每个人或所有用户的写访问权限。 我的应用程序在安装后没有直接具有适当的权限,而不需要管理员授予它们,即使密钥和值存在,它们也无法更新? 我有下面的代码段,但是由于未经授权的访问/访问被拒绝,安装程序失败了。 我想我走在正确的轨道上…… 如何在不需要手动注意的情况下解决权限问题? 有更好的方法吗? 我正在尝试通过添加此function来替换Visual Studio设置中的其他安装程序。 protected void GrantAllAccessPermission(String key) { try { SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null); NTAccount account = sid.Translate(typeof(NTAccount)) as NTAccount; // Get ACL from Windows, allow writing to the registry key using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(key, true)) { RegistrySecurity rs = new RegistrySecurity(); // Creating registry access rule […]

避免在.NET(C#)项目中重复的图标资源

我正在使用Visual C#2008 Express。 我想为应用程序使用相同的图标(即.exe显示的图标),以及主窗体。 不幸的是,VC#似乎并不是很聪明,并且坚持要复制图标数据。 似乎没有办法选择“已嵌入”的图标用于表单或项目图标(仅选择文件),并且对两个图标使用相同的文件只是将文件嵌入两次尽可能远看到。 这不是什么大不了的事(现在硬盘空间很便宜,对吧?),但这让我很烦恼。 知道怎么避免这个吗? 有没有办法以编程方式加载可执行文件的图标,以便在构建表单时使用,比如说? 一些关于类似事情的论坛post似乎暗示.NET资源不使用普通的旧Windows资源系统 – 在获取旧式资源的框架内有没有办法? 或者我是否必须绑定Win32 API函数才能执行此操作?

SwitchToThread与睡眠(1)

我想知道调用Thread.Sleep(1)和调用SwitchToThread之间的实际区别是什么(如果我们忽略它当前没有被BCL暴露)。 Joe Duffy在他的post中提到: “kernel32!SwitchToThread API没有出现Sleep(0)和Sleep(1)的问题。” (关于调度程序的行为) 为什么Sleep不会像SwitchToThread一样? 为什么存在这种差异,以及它有什么用呢? (如果有的话……)

如何在不打开另一个窗口的情况下将PowerPoint演示文稿嵌入到WPF应用程序中?

目前我在C#中有一个WPF应用程序,但我发现找到任何有用的方法将PowerPoint演示文稿嵌入到我的窗口中是非常困难的。 我在这里找到了一个解决方案: 将Powerpoint节目嵌入到C#应用程序中 此解决方案产生了在另一个窗口中运行PowerPoint的问题,但只是在WPF应用程序中显示其UI。 这意味着当WPF窗口被聚焦时,PowerPoint演示文稿没有,并且停止播放。 当窗口关闭时,还存在PowerPoint崩溃的问题。 我找到的另一个解决方案是: http : //www.codeproject.com/Articles/118676/Embedding-PowerPoint-presentation-player-into-a-WP 解决方案很受欢迎,但我发现它很难处理。 我不知道任何Win32编程,或者C ++,所以我发现它很难修改。 我设法让它停止显示PowerPoint的第二个副本(原始项目中的预期function),但我还没有找到一种方法来自动打开PowerPoint演示文稿。 所以我需要的是一种自动和在后台干净地打开PowerPoint演示文稿的方法(我不希望在任何时候显示PowerPoint UI),并允许它自动运行(而不是响应输入)应用程序正在运行。 如果我能将它保存在C#和WPF中,并且不必处理Win32和C ++,那将是非常好的。 这可能吗? 在这一点上,我真的后悔这个项目只是因为PowerPoint集成的麻烦。

获取活动窗口文本(并向其发送更多文本)

我在C#中创建一个小实用程序,当按下全局热键时,它会向活动文本框添加一些文本,这是一种自动完成function。 我有我的全局热键,但现在我不知道如何在活动文本框中获取当前文本(如果活动窗口是一个文本框)。到目前为止我尝试过的是使用 一个。 GetForegroundWindow然后使用该句柄调用GetWindowText。 这给了我活动窗口的窗口标题,而不是文本框内容。 湾 GetActiveWindow并使用该句柄调用GetWindowText。 这根本不给我任何文字。 这是我所做的一个例子 [DllImport(“user32.dll”)] private static extern bool UnregisterHotKey(IntPtr hWnd, int id); [ DllImport(“user32.dll”) ] static extern int GetForegroundWindow(); [ DllImport(“user32.dll”) ] static extern int GetWindowText(int hWnd, StringBuilder text, int count); [DllImport(“user32.dll”)] static extern int GetActiveWindow(); public static void TestA() { int h = GetForegroundWindow(); StringBuilder b = new […]

将键击发送到程序,即使它在后台使用c#

我想将关键笔划发送到程序,即使它在后台运行。 但我只能这样做NOTEPAD, [DllImport(“user32.dll”)] protected static extern byte VkKeyScan(char ch); [DllImport(“user32.dll”, SetLastError = true)] protected static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport(“User32.Dll”, EntryPoint = “PostMessageA”)] protected static extern bool PostMessage(IntPtr hWnd, uint msg, int wParam, int lParam); char Key = // key value to send IntPtr hWnd = FindWindowEx(_handle, IntPtr.Zero, “edit”, […]

从不使用标签控件的对话框中获取文本?

这是我之前的问题的延续如何压缩Inproc COM服务器显示的对话框 。 背景: 回顾一下我的情况:我有一个从第三方用Delphi编写的Inproc COM服务器。 如果它捕获特定类型的错误,我调用的函数之一将显示错误消息对话框。 问题是我正在尝试批量处理数据,而我正在使用的数据源导致错误对话框弹出很多(感谢我之前的问题的答案,它现在自动关闭,我能够运行它到完成后,它会显示对话框并要求有人按OK 9923次)。 进程将阻塞,直到消息框关闭。 题: 我想更好地记录错误对话框所说的内容。 但是,任何获取对话框正文的尝试都失败了。 //Snip private void StartWindowListener() { //Queue the watcher on the message pump if we are not watching. if (_watcherRunning == false) { _watcherRunning = true; _dummyForm.BeginInvoke(new Action(() => { _watcherRunning = false; //If we are not inside the com object don’t enumerate. […]

C#:如何唤醒已关机的系统?

是否有任何Win32 API用于唤醒在特定时间关闭的系统? 我见过一个名为Autopower On的程序,可以在指定的时间启动系统。

为什么通过timeBeginPeriod增加定时器分辨率会影响功耗?

我目前正在C#中编写一个应用程序,我需要大约启动一个计时器。 每5毫秒。 从一些研究看来,最好的方法是p /调用timeBeginPeriod(…)来改变系统计时器的分辨率。 它在我的示例代码中运行良好。 我在这篇文章中发现了一个关于在Larry Osterman的MSDN博客上使用这个function的有趣警告: Adam:调用timeBeginPeriod也可以提高GetTickCount的准确性。 一般来说,使用timeBeginPeriod是一个非常糟糕的想法 – 我们一直在积极地删除它在Windows中的所有用途,因为使用它会带来功耗的后果。 有更好的方法可以确保您的线程及时运行。 有没有人确切知道为什么会发生这种情况,或者那些“更好的方法”(在线程中未指明)可能是什么? 我们谈论了多少额外的功耗?