Articles of winapi

如何使用SetWindowsHookEx和WH_KEYBOARD钩住外部进程

我想挂钩例如记事本没有成功。 做一个全局钩子似乎工作正常。 在XP SP2上testing。 编辑:修正的代码现在工作。 MyDLL代码 #include <windows.h> #include <iostream> #include <stdio.h> HINSTANCE hinst; #pragma data_seg(".shared") HHOOK hhk; #pragma data_seg() //#pragma comment(linker, "/SECTION:.shared,RWS") compiler error in VC++ 2008 express LRESULT CALLBACK wireKeyboardProc(int code, WPARAM wParam,LPARAM lParam) { if (code < 0) { return CallNextHookEx(0, code, wParam, lParam); } Beep(1000, 20); return CallNextHookEx(hhk, code, wParam, lParam); […]

目录的大小

有没有办法获得目录大小/文件夹的大小,而不实际遍历此目录,并增加每个文件的大小? 理想的情况是想使用一些类似boost的库,但win api也可以。

从c#注册一个自定义的win32窗口类

我有一个用WPF编写的新应用程序需要支持一个旧的API,它允许它接收一个已经发布到隐藏窗口的消息。 通常,另一个应用程序使用FindWindow来使用自定义窗口类的名称来标识隐藏窗口。 1)我假设实现一个自定义的窗口类,我需要使用老派的win32调用? 我的旧的c + +应用程序使用RegisterClass和CreateWindow使最简单的可能不可见的窗口。 我相信我应该能够在c#中完成相同的工作。 我不希望我的项目必须编译任何非托pipe代码。 我已经尝试从System.Windows.Interop.HwndHostinheritance并使用System.Runtime.InteropServices.DllImport来引入上述API方法。 这样做,我可以成功地举办一个标准的Win32窗口,如WPF内的“列表框”。 但是,当我为我的自定义窗口调用CreateWindowEx时,它总是返回null。 我的RegisterClass调用成功,但我不知道我应该设置WNDCLASS.lpfnWndProc成员。 2)有谁知道如何成功地做到这一点?

使用python通过windows服务打开另一个程序

我试图通过使用Python代码的Windows服务来打开/执行另一个程序。 当Windows服务开始时,另一个程序,即记事本将被执行。 代码很好没有错误,但它不打开程序。 代码如下。 码: import win32serviceutil import win32service import win32event import win32com.shell.shell as w32shell import os import sys import win32process as process class SmallestPythonService(win32serviceutil.ServiceFramework): _svc_name_ = "BSmallestPythonService" _svc_display_name_ = "BSmallest possible Python Service" def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) # Create an event which we will use to wait on. # The "service stop" request […]

区别布尔和布尔?

在VC ++中,我们有数据types“BOOL”,它可以取值为TRUE或FALSE,而我们有数据types“bool”,可以假设值为true或false。 他们之间和每个数据types的使用时间有什么区别?

如何在WinXP下获得精确的1ms定时器刻度

我试图每1毫秒调用一个函数。 问题是,我喜欢用windows做这个。 所以我尝试了multimediatimer API。 Multimediatimer API 资源 idTimer = timeSetEvent( 1, 0, TimerProc, 0, TIME_PERIODIC|TIME_CALLBACK_FUNCTION ); 我的结果是,大部分时间1毫秒是好的,但有时我得到了双倍的时间。 看到1.95ms左右的小颠簸multimediatimerHistogram http://img.zgserver.com/c%2B%2B/www.freeimagehosting.net 我的第一个想法是,也许我的方法运行时间太长。 但是我已经测量过了,事实并非如此。 排队计时器API 我的下一个尝试是使用queud定时器API hTimerQueue = CreateTimerQueue(); if(hTimerQueue == NULL) { printf("Error creating queue: 0x%x\n", GetLastError()); } BOOL res = CreateTimerQueueTimer( &hTimer, hTimerQueue, TimerProc, NULL, 0, 1, // 1ms WT_EXECUTEDEFAULT); 但结果并不如预期。 现在我大部分时间都是2 ms周期。 queuedTimer http://img.zgserver.com/c%2B%2B/www.freeimagehosting.net 测量 […]

运行WPF程序时防止Windows工作站(桌面)locking

问题: 我有一个WPF 全屏应用程序,它充当仪表板。 计算机处于域和域策略,强制计算机在最后一次用户活动后10分钟内被locking。 我想防止工作站(或桌面)自动locking。 这种行为的例子:Windows Media Player,在电影运行时阻止这种行为。 已知的解决scheme(有点解决方法): 有可能发送一个Win32鼠标移动事件每隔一段时间(例如,每分钟) 每隔一定的时间间隔(例如,每分钟)可以向程序发送一个键(例如“左移”键) 题: 如何防止Windows工作站locking而不使用这些解决方法? 免责声明: 我很确定,应该有一个类似的问题在StackOverflow的某个地方回答,但我没有find任何。 如果你能把我指向正确的方向,我将不胜感激。

registry拦截的替代方法

我正在寻找一种方法来截取并将读取redirect到某个registry项。 当然,Detours可以做到这一点。 但我需要一个商业应用程序和MS $ 10K许可证费太陡。 有没有其他的select?

如何在Windows中获取当前的交互式用户会话数量?

我正在编写一个Windows服务,需要知道当前是否有任何用户在机器上login。 到目前为止,我已经尝试过Win32_LogonSession (WMI)和LsaEnumerateLogonSessions / LsaGetLogonSessionData (secur32.dll)。 这两个工作,似乎都返回相同的数据,但它们太慢,无法更新时,用户注销: 系统启动时,返回“0个交互式用户”。 (好) 当我login时,他们返回“1交互式用户”。 (好) 但是,当我注销时,用户数保持为1.新login后,数为2,依此类推。 因此Win32_LogonSession和LsaEnumerateLogonSessions都不够好。 在最后一个交互式用户离开后的5分钟内,该服务需要知道。 SysInternals的LogonSessions.exe甚至没有提供最新的答案。 此外,答案不能是“监视login和注销事件,并有一个计数器variables”,因为服务可以在任何时候启动。

在重叠Win32结构hEvent成员

当使用asynchronousI / O(或Win32行话中的“重叠”I / O)时,我们需要处理OVERLAPPED结构和他的hEvent成员。 如果I / O函数会延迟读取或写入操作,我们将得到一个ERROR_IO_PENDING错误代码,然后我们将等待asynchronous操作完成一个WaitForXxxEvent函数,然后调用GetOverlappedResult 。 但是,如果I / O操作立即完成,我们将不会获得ERROR_IO_PENDING ,并且在读取操作中,我们的读取缓冲区将立即被填充。 但是OVERLAPPED::hEvent成员呢? 它会被设置为信号状态? 我还没有find明确的说法。 这个问题似乎毫无意义(为什么处理事件,如果我知道该操作已经完成?),但是我有一个模仿重叠模式库,我需要有相同的确切行为。 正如edgar.holleis在他的评论中所指出的, Raymond Chen在他的博客中解释了这一点: http : //blogs.msdn.com/b/oldnewthing/archive/2014/02/06/10497096.aspx 如果一个asynchronousI / O同步完成,那么OVERLAPPED结构中的hEvent是否仍然有信号? 是。 当I / O完成时(无论是同步的还是asynchronous的),事件被发信号并且完成状态通知被排队。 GetOverlappedResult/Ex函数可用于等待已完成的I / O; 它只会立即返回。 如果你询问HasOverlappedIoCompleted I / O是否已经完成,并且I / O同步完成,它会正确地报告“是的,当然它已经完成了,哎呀,很久以前就完成了! 换句话说,您可以在逻辑上将asynchronousI / O请求的情况同步完成,就像它asynchronous完成一样。 它只是在你眨眼之前asynchronous完成。