草庐IT

windows - 为什么此 QString 到 const char* 的转换会在 Windows 上生成 Debian 标识符?

我试图在Qt中包装libssh2,并具有以下代码:constchar*username=inUsername.toLocal8Bit().data();constchar*password=inPass.toLocal8Bit().data();问题是用户名和密码没有连接到系统。为什么?因为根据调试器,username"5.1p1Debian-6ubuntu2"password"5.1p1Debian-6ubuntu2"这些不是我为用户名或密码提供的值。我试过toAscii、toLatin1和附加(或不附加).data()。尽管如此,我还是得到了这些值,而不是预期值。我在Windows

c++ - "?"帮助按钮触发 WM_HELP _and_ WM_LBUTTONUP

我有一个Windows应用程序,它注册了一个处理对话框WM_HELP消息的CALLBACK过程,以及一个处理自定义按钮的WM_LBUTTONUP消息的CALLBACK过程。现在,当用户点击“?”按钮,然后单击自定义按钮,帮助将按预期打开(鼠标按下时),但如果帮助窗口未遮挡按钮,自定义按钮也会触发WM_LBUTTONUP消息(鼠标按下时)。这会导致按钮在用户仅寻求帮助时触发。如果按下按钮是为了寻求帮助,是否有任何方法可以阻止发送WM_LBUTTONUP消息?编辑:自定义按钮是使用STATIC控件实现的。我相信这是因为它需要有图像并且没有边框。因此,它不会发送BN_CLICKED通知。事实

c++ - 在 Windows X 按钮上单击并按住鼠标时 WM_TIMER 消息被抑制

我正在开发一款客户端需要继续处理Windows消息的游戏,否则游戏可能会被利用。为了解决窗口调整大小和拖动事件期间的这个问题,我们有一个每50毫秒触发一次的WM_TIMER消息,这将重新启动主事件循环。问题是,当用户单击并按住X或窗口客户端的最小化按钮时,此技术不起作用。(所以他们没有完成点击,他们只是停止了客户端。)使用Spy++,我看到的最后消息是:00160D3CPWM_NCLBUTTONDOWNnHittest:HTCLOSExPos:1150yPos:17800160D3CPWM_MOUSEMOVEfwKeys:MK_LBUTTONxPos:1014yPos:-23在我移动鼠

windows - 仅消息窗口可以接收 WM_QUERYENDSESSION 吗?

在程序的调试版本中,我创建了一个可见窗口,WM_QUERYENDSESSION消息由其WNDPROC接收。在发布版本中,窗口应该是纯消息的,所以我在调用CreateWindowEx()时将HWND_MESSAGE指定为hWndParent。不幸的是,我再也没有收到WM_QUERYENDSESSION消息。WM_QUERYENDSESSION是那些广播消息之一吗mentionedhere?Amessage-onlywindow[...]doesnotreceivebroadcastmessages. 最佳答案 MSDN给出了“仅消息窗

c++ - wchar_t 和 char16_t 在 Windows 上是一样的吗?

我有一个std::u16string的实例,我可以将它的c_str()传递给需要LPCWSTR的Win32API,而无需任何类型的转换?例如,我可以安全地这样做吗:autou16s=std::u16string(u"Hello");::SetWindowTextW(hWnd,reinterpret_cast(u16s.c_str()));已更新,MSDN说herewchar_t是UTF-16LE,而char16_t只是没有指定字节序的UTF-16。那么可以安全地假设char16_t在Windows上也始终是UTF-16LE吗?或者那是特定于MSVC编译器的,因此如果我使用GCC编译,它

C++ REG_SZ 到 char* 并在没有提升权限的情况下读取 HKLM

所以我一直在尝试从注册表中获取REG_SZ值并将其存储为char*。环顾互联网后,这就是我想出的。问题是我得到的值不是存储在注册表中的值,我得到了一堆随机垃圾。我将如何正确获取该值?HKEYhKey;charvalue[256];//Openthekeyif(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0\\",0,KEY_QUERY_VALUE,&hKey)!=ERROR_SUCCESS){return"";}//ReadthevalueDWORDdwType=RE

c++ - 错误 C2446 : == : no conversion from const char * to TCHAR *

我在下面定义了一个TCHAR:TCHARszProcessName[MAX_PATH]=TEXT("");我想比较如下:if(szProcessName=="NDSClient.exe"){}但是我得到了错误:errorC2446:==:noconversionfromconstchar*toTCHAR*errorC2440:'==':cannotconvertfrom'constchar[14]'to'TCHAR[260]' 最佳答案 "NDSClient.exe"是Windows上的constchar*字符串。如果你想让它成为一

windows - PeekMessage() 需要 1-2 毫秒来检索 WM_MOUSEMOVE 消息?

我在这里看了很多关于PeekMessage和WM_MOUSEMOVE的帖子,但到目前为止我还没有发现任何与性能相关的内容。长话短说;我正在做PC游戏开发,昨天我注意到我可以将我们的应用程序从稳定的500+FPS(在菜单中)提升到个位数FPS(低至6),只需快速移动鼠标即可。经过几个小时的挖掘和分析,我发现来源是PeekMessage()。不是该消息的DispatchMessage(),只是偷看。我测量了单独调用该函数的频率非常频繁(每帧多次),时钟频率为1-2毫秒。如果将其与快速鼠标移动相结合,则每渲染一帧,消息队列的传输可能会花费我1000-2000毫秒以上的时间。听起来很荒谬,但实

windows - 有没有办法让 SendInput 与使用 GDK 的应用程序一起工作?

我有一个应用程序可以使用设置了UNICODE标志的SendInputAPI成功地注入(inject)键盘输入。这会导致使用E7的VK代码(VK_PACKET)生成WM_KEYUP和WM_KEYDOWN消息,该消息会被适本地转换为正确的WM_CHAR消息。这适用于我尝试过的所有应用程序,除了使用GDK的Pidgin。GDK似乎只查找WM_KEYUP消息。由于此处生成的那些实际上没有任何输入字符的指示(只有WM_CHAR有),因此输入被忽略。有什么办法可以解决这个问题。如果我在没有UNICODE标志的情况下使用SendInput,我就不太走运。 最佳答案

c++ - WM_POINTER 和高 DPI 设置

我已经在桌面触摸屏上使用Windows8TouchAPI(WM_POINTERDOWN/WM_POINTERUPDATE/WM_POINTERUP)工作了一段时间.然后我在Windows8平板电脑上尝试了我的测试程序,发现我的应用程序无法准确检测到用户触摸屏幕的位置。另一方面,使用鼠标效果很好:我得到了正确的坐标。由于我启用了EnableMouseInPointer(TRUE)模式,这意味着正在使用相同的代码来处理鼠标事件和触摸事件,这至少意味着我的代码在某种程度上可以正常工作。我发现,平板电脑启用了高DPI模式,使用户可以触摸屏幕上本来很小的东西。当我更改平板电脑上的DPI以消除缩放