Tag: winapi

在Windows XP登录屏幕(.NET / Pinvoke)上运行进程(使用GUI)

我需要在登录屏幕上编写一个运行应用程序(使用gui,例如calc.exe )的小服务 。 我已经找到了这个问题(和答案): 在Windows 7欢迎屏幕上运行一个进程 如果您不理解这是如何工作的,请阅读代码注释: // grab the winlogon process Process winLogon = null; foreach (Process p in Process.GetProcesses()) { if (p.ProcessName.Contains(“winlogon”)) { winLogon = p; break; } } // grab the winlogon’s token IntPtr userToken = IntPtr.Zero; if (!OpenProcessToken(winLogon.Handle, TOKEN_QUERY | TOKEN_IMPERSONATE | TOKEN_DUPLICATE, out userToken)) { log(“ERROR: OpenProcessToken returned false – […]

将Ctrl + Up发送到窗口

我正在尝试将消息发送到一个窗口,显示已按下Ctrl和向上箭头。 我已经掌握了基础知识,我可以发送记录空间键的印刷机。 但我似乎无法让ctrl + ↑工作。 选择的代码片段: [DllImport(“user32.dll”, CharSet = CharSet.Auto, SetLastError = false)] static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); 现在这适用于发送空间: public static void SendKeyPress(IntPtr handle, VKeys key) { SendMessage(handle, (int) WMessages.WM_KEYDOWN, (int) key, 0); SendMessage(handle, (int)WMessages.WM_KEYUP, (int)key, 0); } 但这不适用于将Ctrl + ↑发送到VLC以增加音量: public static void SendKeyPress(IntPtr handle, VKeys key, bool […]

在Windows XP中使用SetWindowsHookEx时出错,但在Windows 7中没有

我开发了一个使用全局键盘/鼠标钩子的应用程序。 它在Windows 7中运行良好,但在Windows XP中运行不佳。 当我在Windows XP中调用SetWindowsHookEx时,收到错误代码1428 int MouseLowLevel = 14 int code = SetWindowsHookEx(MouseLowLevel, MouseHookProc, IntPtr.Zero, 0); private IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) {}

Windows.Automation中的LegacyIAccessible

如何使用C#获取LegacyIAccessible.State和其他LegacyIAccessibles of AutomationElement? 就像工具中的Inspect.exe一样。

是否有可能杀死WaitForSingleObject(句柄,INFINITE)?

我在关闭使用带有INFINITE组合的WaitForSingleObject()的应用程序时遇到问题。 全貌是这样的。 我正在执行以下操作以允许我的应用程序处理设备唤醒事件: 注册活动: CeRunAppAtEvent(“\\\\.\\Notifications\\NamedEvents\\WakeupEvent”, NOTIFICATION_EVENT_WAKEUP); 启动一个新线程等待: Thread waitForWakeThread = new Thread(new ThreadStart(WaitForWakeup)); waitForWakeThread.Start(); 然后在目标方法中执行以下操作: private void WaitForWakeup() { IntPtr handle = CreateEvent(IntPtr.Zero, 0, 0, “WakeupEvent”); while (true) { WaitForSingleObject(handle, INFINITE); MessageBox.Show(“Wakey wakey”); } } 这一切都正常,直到我尝试关闭应用程序时,可预见的是,WaitForSingleObject继续等待并且不允许应用程序正常关闭。 我们只允许我们的应用程序的一个实例一次运行,我们在启动时检查这个。 它似乎继续运行,直到设备软复位。 有没有办法杀死WaitForSingleObject正在等待的句柄,强制它返回? 非常感谢。

更换IFilter

我目前正在使用IFilters从各种文件中提取文本(word,excel,tiff,pdf等)。 我知道IFilters已经停止使用Windows 8.有没有人提出如何在没有安装本机应用程序的情况下提取文本的建议? 如果它有用,我正在使用C#和.Net 4

获取当前的笔记本电脑盖状

我正在写一个C#应用程序(专门用于笔记本电脑),我想知道盖子的状态,即何时打开以及何时关闭。 我已经在这个SO答案的帮助下使用了pInvoke和Microsoft的RegisterPowerSettingNotification函数 。 所以,有了上面我知道盖子关闭或打开时知道它的状态,但我想在其他任何事情继续之前得到盖子的状态。 我注意到即使盖子没有变化,也会调用回调函数,我可以检查它的参数以了解盖子的状态,但这对我来说不好,因为它是一个事件,我不能简单地等待为了它发生(也许有另一种方法来解决这个问题?)。 我也尝试过PowerEnumeratefunction但是无法从中得到一些东西(可能有一些我不知道的东西可以提供帮助) 编辑1:我不能等待或延迟应用程序,并且有2个问题要求我获得没有CB的状态,第一个是在笔记本电脑连接到显示器时可以关闭盖子从而允许用户使用笔记本电脑。 如果用户在这种情况下启动应用程序,则无法启动。 第二个原因是我希望应用程序对用户友好并通知启动或停止时会发生什么,如果我在错误的时间得到cb,可能会被忽略,因为应用程序的内部逻辑,然后将不得不等到下一次我得到一个cb,我一点都没有。 所以,(没有双关语意)有没有办法立即得到这些信息? 编辑2:从评论看来,我不清楚我需要什么。 我需要一种方法来查询盖子的状态。 即 – 调用一些API或其他东西,返回值是状态。 谢谢! 关键字:GUID_LIDSWITCH_STATE_CHANGE,WM_POWERBROADCAST,电源设置

从64位的SysListView32获取文本

这是我的代码: public static string ReadListViewItem(IntPtr lstview, int item) { const int dwBufferSize = 1024; int dwProcessID; LV_ITEM lvItem; string retval; bool bSuccess; IntPtr hProcess = IntPtr.Zero; IntPtr lpRemoteBuffer = IntPtr.Zero; IntPtr lpLocalBuffer = IntPtr.Zero; IntPtr threadId = IntPtr.Zero; try { lvItem = new LV_ITEM(); lpLocalBuffer = Marshal.AllocHGlobal(dwBufferSize); // Get the process id owning the window […]

将参数发送到驻留在另一个进程中的app-instance

我有一个单实例应用程序(c#,WPF,.net3.51)。 检查应用程序是否已实例化是通过互斥锁完成的。 如果应用程序已在运行,我将从已打开的应用程序实例中打开一个新窗口。 这到目前为止工作正常。 但是由于应用程序扩展,我现在必须将e.Args(或至少它的第一个字符串)发送到驻留在另一个进程中的已经运行的实例。 这怎么做得最好? 附加信息 目前我使用全球注册的Window消息,我通过PostMessage(HWND_BROADCAST)发送给所有打开的应用程序。 如果收到此消息,我的应用程序将查找此消息并打开一个新窗口。 一个想法是设置PostMessage的参数。 然而,我发现了很多关于这个话题的令人眼花缭乱的信息,因此我没有勇气走这条路。 除此之外,我想通过另一个激活逻辑替换全局PostMessage调用,因为全局调用似乎有一些不可思议的副作用。

C#列出当前打开的文件和程序

有没有办法可以获得所有打开的应用程序列表和所有打开文件的列表? 对于文件我只需要打开的文件(文档等)而不是OS的开放系统文件。 应用程序也是如此(仅限浏览器,文档处理器等)。 我已经尝试过像EnumWindows这样的Windows API中的各种function,但我无法得到我想要的function。 我最终目标的一个例子是拥有这样的列表: 应用 Microsoft Word,记事本,Mozilla Firefox 档 foo.txt,foo.mp3,foo.doc 我需要的只是名字,我不需要句柄等(即使我确定我必须使用它们来得到我想要的)