草庐IT

c - 服务和应用程序之间的命名管道通信

所以我有一个在启动时启动的服务,我有一个应用程序放在启动文件夹中。因此客户端有时会很晚才连接到命名管道的服务器。这是我服务中的代码。hPipe=CreateNamedPipe(TEXT("\\\\.\\pipe\\popupPipe"),PIPE_ACCESS_DUPLEX|PIPE_TYPE_BYTE|PIPE_READMODE_BYTE,//FILE_FLAG_FIRST_PIPE_INSTANCEisnotneededbutforcesCreateNamedPipe(..)tofailifthepipealreadyexists...PIPE_WAIT,1,1024*16,102

c++ - 有没有办法接收有关在 Windows 中启动的进程的事件?

长话短说我用C++编写了一个程序来关闭所有在我的程序启动时未运行的启动的"new"程序。目前,我通过捕获所有PID然后根据此列表不断检查所有已注册的应用程序来做到这一点。那些不在我名单上的人我会尝试关闭/杀死。对于这样一个简单的任务,这是非常CPU密集型的。有没有办法接收某种Windows事件,这样我就不需要非常活跃的线程?我找到了this钩子(Hook),它可能会做我需要它做的事情,但它似乎适合其他目的,而不是我需要的。简而言之:我可以在进程启动之后/之前立即从Windows接收到事件吗? 最佳答案 理想情况下,您会在用户模式下执

c - 当我按下某个键时做些什么?

如何让程序识别我按下的某些键?理解上下文:我想用C做一个游戏(非常基本的游戏),所以为了移动物体,我想按下(WASD),我知道如何移动它,但我不知道如何当按下其中一个键时,让程序明白我想执行某个操作。例如:if(key=="A"){x++}我知道它不会像那样工作,但至少是类似的。 最佳答案 #include#include/*getch()andkbhit()*/intmain(){charc;for(;;){if(kbhit()){c=getch();if(c=='c'){printf("%c\n",c);//morecodehe

c - 为什么 `fseek(..., 0, SEEK_CUR)` 在 Windows 上失败?

我已经测试了以下C代码#includeintmain(){FILE*file=fopen("ans.txt","r+");printf("%ld",ftell(file));//prints0fgetc(file);printf("%ld",ftell(file));//prints-18printf("%d",fseek(file,0,SEEK_CUR));//-1printf("%ld",ftell(file));//prints150fclose(file);return0;}在win10上使用MinGW-W64(gcc版本7.1.0(x86_64-posix-seh-rev0,

C malloc + free 不断增加内存占用

我有一个处理大量数据(100+KB)的C应用程序。我正在使用malloc()来分配所需的内存。(char*)malloc(argLen+18+2)执行后,我使用free释放分配的内存。据我所知,由于某些原因,释放的内存没有返回给操作系统。我的问题是,当我再次运行该程序时,它并没有重新使用分配的内存,而是不断增加我的应用程序的内存使用量。编辑:对于造成的困惑,我深表歉意。该进程是一个WebSocket服务。除非有意停止,否则它不会终止。这是否意味着该进程将继续增加其内存使用量并且不会释放分配的内存,除非我手动重新启动它? 最佳答案 I

c++ - 仅消息窗口中的线程泵消息

我需要创建一个dll来管理Windows8.1/10上的一些IP蓝牙低功耗设备。我的第一个挑战是能够拦截连接/断开连接事件。我按照MSDN对registeringBluetoothdevicenotifications的说明设法实现了这一点,并按照RegisteringforDeviceNotifications例子。结果是一个工作控制台应用程序。接下来,我希望将它包装在一个DLL中,并有一个专门的线程泵来处理纯消息窗口的消息。问题:这是一个合理的解决方案,还是我最好使用调用线程为此窗口(显然既不是单一窗口也不是主要窗口)泵送消息?如果这是要走的路,我该如何创建一个线程来为特定窗口发送

c++ - 打印 UTF-8 会产生不同的输出

这个问题在这里已经有了答案:std::wstringVSstd::string(13个答案)关闭5年前。目标是使用C++打印UniWürzburg我使用的代码:#includeusingnamespacestd;intmain(){charstr0[21]="UniWürzburg";printf("%s\n",str0);charstr1[21]={85,110,105,32,87,'\xc3','\xbc',114,122,98,117,114,103,0};printf("%s\n",str1);charstr2[20]="UniW\x81rzburg";printf("%s\n

windows - 在调用 asm 函数之前在 C 中调用 printf 或不调用的神秘副作用?

此程序必须根据用户提供的精度计算圆周率。calculate_pi()函数是用NASM写的。有人可以向我解释为什么如果评论此行://printf("accuracy:%.15f\n",precision);//程序无法正常运行。向calcuta_pi()函数发送奇怪的数字?如果注释掉这一行,就会向函数发送一个非常小的值,程序将无限运行。但如果不是注释程序,则它可以正常工作。#include#includeexterndoublecalculate_pi(doubleprecision);/*externalfunctiondeclaration*/doublecalculate_pi(d

C#:路径格式如\\.\c:\或\\DOMAIN\c:\不支持

我想删除一个文件夹,其中一个子文件夹的名称为“con”,这是一个保留的设备名称,因此C#会引发异常。在CMD中,我可以使用rmdir\\.\c:\con删除这样的文件夹,但在C#中我已经尝试了很多变体,并且总是得到路径格式是不受支持。例如,以下内容不起作用:Directory.Delete("\\\\"+Environment.UserDomainName+"\\c:\\test")。请注意,我不想依赖外部命令,例如CMD的del命令等。 最佳答案 您必须绕过.net框架并使用\\?\c:\con符号删除文件,并使用p/invoke

给定的 C++ Windows API GetSecurityInfo 无效句柄

我正在尝试使用WindowsAPI在Windows10中创建一个新的注册表项,即RegCreateKeyEx函数,然后使用GetSecurityInfo获取其DACL。所有断言都进行得很顺利,直到我到达所说的GetSecurityInfo函数调用,它给出了一个无效的句柄值错误(错误6)。我做错了什么?这是一个更复杂的项目的一部分,所以我只会在这里给出(或者我认为是什么,但我也可以添加其余的)相关部分:RegCreateKeyEx的包装器,使输出更易于处理并设置遇到的任何错误:inlineexternautoRegCreateKeyEx_safe(_In_constHKEYhKey,_I