Articles of winapi

使用系统托盘图标创build一个后台进程

我试图做一个Windows应用程序,在后台检查一些事情,并通过系统托盘图标通知用户。 该应用程序使用Not managed C ++制作,没有选项切换到.net或Java。 如果用户想要停止应用程序,他将使用托盘图标。 该应用程序不能是一个服务,因为系统侧,因为它必须运行,而无需在用户计算机上安装任何东西(这是一个单一的.exe) 使用典型的Win32程序结构(RegisterClass,WndProc等)我不知道如何放置一些代码来运行窗口消息循环。 也许我必须使用CreateProcess()或CreateThread()? 这是处理multithreading环境的正确方法吗? 如果我必须使用CreateProcess()/ CreateThread(),我怎么可以在两个线程之间交stream? 谢谢 ;)

如何调用shell的“文件复制对话框”来报告在Win32中复制的进度?

我怎样才能通过调用Windows“复制文件”对话框来复制文件呢? SHFileOperation看起来像一个选项,但它在我们的过程中。 顺便说一下, SHFileOperation是否有GUI界面? 它是否与Windows复制对话框完全相同?

EnumDisplayMonitorscallback

我正在尝试使用EnumDisplayMonitors来创build每个监视器的dynamic数组,并存储DISPLAY_DEVICE结构。 为什么下面的代码不正确? BOOL CALLBACK MyInfoEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) { MONITORINFOEX iMonitor; iMonitor.cbSize = sizeof(MONITORINFOEX); GetMonitorInfo(hMonitor, &iMonitor); if (iMonitor.dwFlags == DISPLAY_DEVICE_MIRRORING_DRIVER) { return true; } else { *reinterpret_cast<ScreenArray*>(dwData) = ScreenArray(&iMonitor); return true; }; } 调用使用 ScreenArray monitorArray[15]; int i = 0; EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, reinterpret_cast<LPARAM>(&monitorArray[i++])); 数组(monitorArray [0])中的第一个返回第二个监视器的正确信息,但monitorArray [1]是最大值。 编辑:解决我使用的方法只是实现我创build的function: MonitorArray *mA = […]

WinApi中的GetClientRect和GetWindowRect有什么区别?

我应该在InvalidateRect中使用哪些来刷新我的窗口? 为什么?

通过Win32 API从服务创buildWindows会话

我有一个Windows服务,可以在用户的​​Windows会话中创build一个可执行文件,通过调用“CreateProcessAsUser”函​​数。 这工作正常,只要有一个Windows会话已经在那里。 在没有人的情况下,我希望能够以编程方式创build一个。 这是可能的吗? 似乎无法find一个function来做到这一点。

截取使用createdesktop API创build的桌面

我正在使用createdesktop api来创build一个桌面,我想要截图或发送input鼠标/键盘不显示桌面的user.any ideeas如何实现这?

如何屏幕捕捉,除了一些窗口

情况 :我有一个通过互联网进行屏幕共享的软件,其中一个用户充当演讲者,其他用户充当观众/参与者。 除演示窗外,演讲者还有一组屏幕上出现的非共享窗口(用于开始共享/停止共享等的button栏,Skype窗口等)。 演示者可以从屏幕共享软件的设置中进行configuration,使这些非共享窗口不可见(即,它们不会出现在正在发送给与会者的屏幕共享中,但它们后面的窗口内容将显示在屏幕截图中)。 屏幕截图以大约每秒10帧或更快的速度发送。 问题 :如何以编程方式捕获屏幕,除了这些非共享-Windows窗口? 备注 : 由于较高的帧每秒值,我不能最小化/最大化/设置这些窗口的alpha,因为那么窗口将闪烁。 该应用程序是用Win32 C ++编写的。 我会使用分层的窗口,但由于Windows 7桌面组合function,这是不可用的现成的(在Windows 8中,您不能使用DwmEnableComposition暂时和编程方式禁用组成) 我可以对Windows XP / 2000/7等使用分层窗口方法,对Windows 8使用不同的方法(如果有的话),尽pipe我更喜欢一个适用于所有系统的单个进程 我还可以尝试通过捕获单个图像(桌面,需要捕获的窗口)和使用它们的z-index来创build最终图像来“撰写”屏幕截图,但是由于所需的每秒帧数,这个过程会太慢。

如何在由CreateProcess实例化的命令中使用或扩展环境variables?

以下代码利用CreateProcess运行带有环境variables的命令。 在这里,它试图运行notepad %APPDATA%\test.txt 。 如果我在notepad %APPDATA%\test.txt直接运行notepad %APPDATA%\test.txt ,%APPDATA%将被展开。 但是,由CreateProcess执行时,环境variables不能被扩展。 你能帮忙评论一下原因和解决办法吗? 任何评论将不胜感激! program TestConsole2; {$APPTYPE CONSOLE} uses Windows, SysUtils; var I: Integer; ProgramName: String; StartInfo : TStartupInfo; ProcInfo : TProcessInformation; CreateOK : Boolean; begin try FillChar(StartInfo, SizeOf(StartInfo), #0); FillChar(ProcInfo, SizeOf(ProcInfo), #0); StartInfo.cb := SizeOf(StartInfo); ProgramName := 'NOTEPAD %APPDATA%\test.txt'; CreateOK := CreateProcess( nil, PChar(ProgramName), nil, nil, True, […]

如何知道我们是在一个控制台或窗口的应用程序?

上下文:编程ac / c ++ win32-mfc库 如何知道我们是在一个控制台或窗口的应用程序?

特定networking接口IPv4可用性 – 无连接,本地,Internet

如何识别特定NetworkInterface连接状态? NetworkInterface[] nets = NetworkInterface.GetAllNetworkInterfaces(); foreach (var n in nets) { // TODO: determine connectivity status of each network interface // ( mainly interested in IPv4 connectivity ) } 这个问题不是关于一般的互联网连接 ,因此使用GetIsNetworkAvailable()不是一个解决scheme OperationalStatus.Up可以用来过滤一些不活动的networking接口,但不是全部 – OperationalStatus.Up在一些显示“无networking访问”的IPv4和IPv6接口 我也知道如何获得IPv4 UnicastAddresses ,但那么有用的是什么? 在WMI的这些部分我找不到任何相关的东西 即提取每个接口状态为互联网,本地,有限或无