Articles of winapi

在Windows 7/8/10 Win32 C ++中检测/识别显示器连接的端口(HDMI,其他)

我能够检测到所有连接到我的系统的显示器。 我能够使用以下Windows API调用获取大量的相关信息: EnumDisplayMonitors GetMonitorInfo EnumDisplayDevices 我正在开发的系统是带2个显示器的AIO(一体机)。 它有一个外部HDMI输出,我可以连接和外部显示器。 然后,通过端口复制器,我可以连接第四台显示器。 所有的显示器扩展我的桌面,他们都工作正常。 我的任务是检测通过HDMI端口连接的显示器。 我能够使用上述API提取的监视器信息不会提供任何特定的信息,通过它我将能够检测端口types(例如HDMI或USB)。 有谁知道使用什么API? 谢谢!

如何从CreateWindowEx()窗口获取宽度和高度? C ++

我用CreateWindowEx()函数创build了一个窗口,现在我如何从创build的窗口获取宽度和高度? 这听起来很基本,但我找不到任何答案; _; 这是必要的,因为窗口高度是根据Windows如何创build窗口自动创build的。 语言C或C ++

CreateIoCompletionPort中的并发线程数

在CreateIoCompletionPort的MSDN页面上,这个函数的最后一个参数有一个非常简短的描述: NumberOfConcurrentThreads [in] 操作系统可以允许并发处理I / O完成端口的I / O完成数据包的最大线程数… 究竟是什么意思? 我混淆了“同时”这个词 – 这听起来像不同的线程处理相同的I / O数据包? 而且,如果我从比允许的更多的线程调用GetQueuedCompletionStatus会发生什么?

命名pipe道名称是否有反斜杠?

根据MSDN , [pipe道名称]必须具有以下forms: \\.\pipe\pipename 名称的pipe道名部分可以包含除反斜杠以外的任何字符,包括数字和特殊字符。 整个pipe道名称string最多可以有256个字符。 pipe道名称不区分大小写。 但有很多例子,我已经看到命名pipe道名称与反斜杠在其中。 例如,SQL Server的标准pipe道名称是\\.\pipe\sql\query 。 从SysInternals运行PipeList显示我的机器上的名字包含一个反斜杠的pipe道很多。 那么,pipe道名称是否可以带有反斜杠呢? 我问,因为我正在用几个这样的名字创build一个服务: \\.\pipe\MyApp \\.\pipe\MyApp\0 \\.\pipe\MyApp\1 \\.\pipe\MyApp\2 在创build第一个pipe道之后,创build其他pipe道将失败,并显示Windows错误123(ERROR_INVALID_NAME)。 如果我跳过创build第一个pipe道,所有其他的,在名称中的反斜杠字符,将工作得很好。 看起来,pipe道是像文件系统一样的层次结构,如果你有一个具有特定名称的pipe道,那么这个名称就不能再用作其他pipe道的“文件夹”或容器。 当试图弄清楚这一点,我遇到了MSDN文章,现在质疑我是否应该使用反斜杠。 有什么build议?

如何closuresDelphi ListView的hottracking?

我在窗体上有一个简单的ListView,我想完全closureshottracking。 HotTracking属性设置为False,但在鼠标光标下方还有一个蓝色的矩形框 Delphi XE3,Windows 7

删除包含斜线的密钥使用win apiregistry在Windows或使用Qt

我想实现Path SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\SharedDLLs和密钥名称: C:\Program Files\Common Files\Intel\WirelessCommon\TraceAPI.dll现在我想删除此密钥。 以下是我的尝试。 谢谢阅读。 我已经尝试过与Qt和本地API也。 由于keyname中的斜杠,Qt删除不起作用。 在本地API中,我可以打开密钥,但是当我试图删除密钥时,会出现ERROR_FILE_NOT_FOUND。 我已经尝试了所有可能的组合键和斜线。 void sharedDlls(QSettings::Format format) { QSettings settings("HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\SharedDLLs", format); HKEY hkey; LONG n = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\SharedDLLs"), 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hkey); foreach (QString subkey, settings.allKeys() ) { //converting to double quoted slashes subkey = subkey.replace("/","\\\\"); if(clean) { // because of a slash it's impossible for qsettings […]

问题 – TCHAR作为LPARAM属于另一个进程/线程的窗口

所以我通过C书的例子来玩/执行与Windows窗口,有一些关于DLL注入部分,让我难以置信,我无法解决它。 我创build了一个属于另一个线程/进程的对话框,我试图发送它的TCHARvariables,以便它可以在某些函数中使用该var(函数和tchar都在同一个dll文件中) 所以当创build对话框并且坐在另一个线程中时,我会发送一条消息。 首先我声明tchar TCHAR finalpath[MAX_PATH]; 然后,我只是填充信息(我在dll线程中,而不是在对话框的线程中,让我也提到,我必须在dll线程中做到这一点,因为这只是填补所需的tchar(我需要得到dll的工作目录,并填写在tchar)) 所以,当我得到这个信息在我的tchar我想发送一个消息到对话框,并使用tchar作为LPARAM(wparam是hwnd顺便说一句) SendMessage(hWndDIPS, WM_APP, (WPARAM) lista, (LPARAM)finalpath); 之后,我在另一个线程对话框过程循环中做基本的功课… INT_PTR WINAPI Dlg_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { chHANDLE_DLGMSG(hWnd, WM_CLOSE, Dlg_OnClose); case WM_APP: SaveListViewItemPositions((HWND) wParam, (TCHAR)lParam); break; } return(FALSE); } 应该接受参数的函数(这个函数驻留在共享dll中,并且如上所述被程序调用,定义如下.. void SaveListViewItemPositions(HWND hWndLV,TCHAR sejv []){…} 我得到的编译器错误是 Error 7 error C2664: 'SaveListViewItemPositions' : cannot convert […]

ReadDirectoryChangesW和GetOverlappedResult

我调用ReadDirectoryChangesWasynchronous监视后台线程中的目录更改。 这是如何打开目录( basePath ),并启动“阅读”线程: m_hDIR = CreateFileW( basePath, FILE_LIST_DIRECTORY | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL); if (m_hDIR == INVALID_HANDLE_VALUE) throw CrException(CrWin32ErrorString()); //Start reading changes in background thread m_Callback = std::move(a_Callback); m_Reading = true; m_ReadThread = std::thread(&CrDirectoryWatcher::StartRead, this); 这是StartRead() :(注意: m_Reading是atomic<bool> ) void StartRead() { DWORD dwBytes = 0; FILE_NOTIFY_INFORMATION fni{0}; […]

夏令时更改绝对date

我正在尝试在闹钟应用程序中实施正确的DST调整处理。 所以我正在阅读DYNAMIC_TIME_ZONE_INFORMATION的描述,通过GetTimeZoneInformationForYear API检索当前的DST调整信息,并说明如下: DaylightDate : 在此操作系统上发生从标准时间到夏令时的转换时,包含date和本地时间的SYSTEMTIME结构。 如果时区不支持夏令时或呼叫者需要禁用夏令时,则SYSTEMTIME结构中的wMonth成员必须为零。 如果指定了此date,则必须指定此结构中的StandardDate成员。 否则,系统将假定时区数据无效,不会应用更改。 要select当月的正确date,请将wYear成员设置为零,将wHour和wMinute成员设置为转换时间,将wDayOfWeek成员设置为适当的工作日,并将wDay成员设置为指定星期几月份(1至5,其中5表示如果一周中的某一天不发生5次,则月份中的最终发生)。 如果wYear成员不为零,则转换date是绝对的; 它只会发生一次。 否则,这是每年发生的相对date。 我也正在检查世界各地观察到的当前DST调整情况 ,如果相对DST调整看起来相当简单,我不清楚如何通过DYNAMIC_TIME_ZONE_INFORMATION传达以下调整 – 只需一个绝对的月份和一天。 例如: Egypt —– DST Start: May 15 DST End: Last Friday September 或者这个: Iran —- DST Start: March 21–22 DST End: September 21–22 有谁知道如何做到这一点?

在Windows 7上GetWindowRect太小

我试图解决的实际问题是,我想自动找出窗口边缘的大小。 如果你能find更好的办法,请用一切办法来回答,而不是这个。 为此,我决定截取testing窗口并测量边距。 这很简单,因为我认为没有利润率会是明亮的粉红色,但我承认这是一个黑客。 我使用GetWindowRect ( py )来获取边界框, PIL抓取屏幕截图并剪裁到边界框。 问题是,当作物正常运行时,边界框不准确 。 Windows 7“剪切工具”获得正确的尺寸 。 我怎么能这样做?