Tag: winapi

设置静态文本颜色Win32

我正在制作一个控制对话框的dll。 我喜欢让某个区域有红色文字。 这段代码确实编译,但没有看到效果。 这是dialogProc完成的区域: LRESULT CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: CheckDlgButton(hDlg, IDC_CHECK, FALSE); EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_CHECK: if (IsDlgButtonChecked(hDlg, IDC_CHECK)) { EnableWindow(GetDlgItem(hDlg, IDOK), TRUE); EnableWindow(GetDlgItem(hDlg, IDCANCEL), FALSE); } else { EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); EnableWindow(GetDlgItem(hDlg, IDCANCEL), TRUE); } break; […]

使用Win32 API监控电池电量

我正在尝试编写一个小应用程序来监控笔记本电池剩余的电量,我想知道我可以使用哪种Win32function来实现这一目标。

等待文件可用于使用Win32进行读取

我正在通过同步调用ReadDirectoryChangesW观看目录。 当一个新文件可用时,我尝试使用GENERIC_READ和FILE_SHARE_READ CreateFile立即访问它,但这给了我ERROR_SHARING_VIOLATION 。 将文件放入监视目录的过程在我尝试读取它时没有完成写入。 有没有办法可靠地等到文件可供阅读? 我可以将方法放入如下所示的循环中,但我希望有更好的方法。 while ((hFile = CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) { if (GetLastError() == ERROR_SHARING_VIOLATION) Sleep (500); else break; // some other error occurred } if (hFile == INVALID_HANDLE_VALUE) { // deal with other error return 0; } ReadFile (…);

检查是否存在注册表项

我正在寻找一种干净的方法来检查是否存在注册表项。 我曾假设如果我试图打开一个不存在的密钥, RegOpenKey会失败,但事实并非如此。 我可以使用字符串处理来查找并打开我正在寻找的那个的父键,然后枚举该键的子键以查明我感兴趣的那个是否存在,但这感觉就像一个性能猪和一种奇怪的方式来实现这样一个简单的function。 我猜你可以用某种方式使用RegQueryInfoKey ,但MSDN并没有提供太多关于如何使用的细节,即使它是可能的。 更新 :我需要Win32 api中的解决方案,而不是托管代码,.NET或任何其他库。 MSDN中的文档似乎表明您应该能够打开一个读取权限的密钥,如果它不存在则会收到错误,如下所示: lResult = RegOpenKeyEx (hKeyRoot, lpSubKey, 0, KEY_READ, &hKey); if (lResult != ERROR_SUCCESS) { if (lResult == ERROR_FILE_NOT_FOUND) { 但是,当我尝试这个时,我得到了ERROR_SUCCESS 。 更新2 :我的确切代码是这样的: HKEY subKey = nullptr; LONG result = RegOpenKeyEx(key, subPath.c_str(), 0, KEY_READ, &subKey); if (result != ERROR_SUCCESS) { …但result是ERROR_SUCCESS ,即使我正在尝试打开一个不存在的密钥。 更新3 :看起来你们是对的。 这在一个特定的测试示例(神秘地)上失败了。 如果我在任何其他键上尝试它,它将返回正确的结果。 […]

WM_USER与WM_APP

我希望工作线程将用户定义的消息发送到UI线程消息队列,但我不确定是否应该使用WM_USER或WM_APP 。 WM_APP的文档说: WM_APP到0xBFFF 可供应用程序使用的消息。 我应该使用WM_APP吗?

C / C ++使用自动递归文件夹/目录创建复制文件

在Win32 API中,有一个字面复制文件的CopyFile 。 但是,此API不会创建文件夹。 例如,我想将C:\Data\output.txt复制到D:\Temp\Data\output.txt 。 但是,目标文件夹D:\Temp和D:\Temp\Data ‘不存在。 在这种情况下,此API失败。 是否有一个方便的API可以自动和递归地在副本上创建目录结构? 当然,我可以做这样的function,但我希望有人已经完成了这个function。

正确的方法来获得Windows控件的首选大小

我需要弄清楚Windows API中控件的首选大小 – 宽度和高度。 据我所知,关于这个问题的唯一官方消息是Windows桌面程序指南的布局页面,这是一个似乎在Windows Vista中引入的文档,以及与Microsoft管理控制台等效的文档 ,前者似乎是基于该文档 。 前一页给出了对话框单元和像素中的示例尺寸(不在后一页中的内容!)表面上是96 dpi的9点Segoe UI。 我不知道对话单元计算是否从未更新过这个新的DPI值,但无论如何,我尝试了三种不同的方法,没有任何完全相加。 该程序以两种方式计算,均基于此处和此处的信息。 第一个使用TEXTMETRICS结构的tmAveCharWidth字段; 第二个在第一个链接中使用GetTextExtentPoint32()函数。 然后,它重复该过程,考虑古老的System字体(参见第一个链接)。 在Windows 7上运行此程序 BUTTON_SIZE_X保持在50(列出的几个东西的宽度) BUTTON_SIZE_Y更改为25(具有一行文本的Vista-and-up-only命令链接的列出高度) 这样我们基于布局页面的预期大小将是75×41的收益率 GetTextExtentPoint32: Segoe UI 9 | baseX 7 baseY 15 | button 50 x 25 -> 88 x 47 tm.tmAveCharWidth: Segoe UI 9 | baseX 6 baseY 15 | button 50 x 25 -> 75 […]

如何在openCV中以全屏无边框窗口显示图像

我想在全屏无边框窗口中在OpenCV中显示图像。 换句话说,只显示图像像素,没有菜单,工具栏或窗口背景。 使用imshow()或cvShowImage()不启用它: 窗口的宽度增加到全屏但不是高度。 它错过了几个像素。 即使通过更改窗口处理程序的设置,我也无法使其无边界。 我认为问题根源于cvNamedWindow()方法,它创建了主WS_OVERLAPPED窗口,然后创建了一个子imshow() ,所有函数如imshow()或cvGetWindowHandle()在子cvGetWindowHandle()运行。 因此即使是windows命令: SetWindowLong((HWND)cvGetWindowHandle(winName), GWL_STYLE, WS_VISIBLE | WS_EX_TOPMOST | WS_POPUP); 没有帮助,因为孩子不能成为无边界的WS_POPUP 。 有人得到了解决方法吗? 也许,在没有使用opencv内置方法的情况下向窗口显示opencv mat 或某种窗口技巧 PS我尝试了以下代码: cvMoveWindow(“AAA”,0,0); cvSetWindowProperty(“AAA”, CV_WINDOW_FULLSCREEN, CV_WINDOW_FULLSCREEN); // Also I tried this: HWND hwnd = (HWND)cvGetWindowHandle(“AAA”); RECT windowRect; windowRect.left = 0; windowRect.top = 0; windowRect.right = cxScreen; //Display resolution windowRect.bottom = cyScreen; //Display resolution AdjustWindowRect(&windowRect,WS_VISIBLE,false); […]

确定窗口消息的优先级

有没有办法以编程方式检查其消息队列中窗口消息的优先级? 例如:已知某些窗口消息WM_PAINT和WM_TIMER具有最低优先级,并且位于具有最高优先级的消息之后。 我正在寻找一些可以确认两条消息中哪一条具有最低优先级或最高优先级或哪条消息将首先发送还是最后发送的消息?

MSVC中的“interface”关键字是什么?

我正在浏览Windows 8.1 SDK和UnknownBase.h中的内容 typedef interface IUnknown IUnknown; 我之前从未见过这个interface关键字。 请注意,这绝对是一个.h标头,由cl.exe处理。 它不是IDL文件,并且它不由midl.exe处理。 我在网上找到了这个: http : //msdn.microsoft.com/en-us/library/50h7kwtb.aspx 但__interface与interface 谁能在这里提醒我?