Tag: winapi

在C中按“Ctrl + C”时如何防止控制台应用程序终止?

我发现在Windows上从GCC编译的控制台应用程序总是在按Ctrl+C时终止。 是否有任何可行的方法可以阻止控制台应用程序在按Ctrl+C时终止?

是否可以仅通过代码以管理员身份运行

操作系统:Windows语言:C 我有一个要求,例如,我不应该更改exe的清单或exe文件的属性来以管理员身份运行它。 有没有机会用createprocess / createprocessasuser api来完成我的需求。 这可以通过shellexecute api完成,但是我需要在挂起状态下创建我的进程。 这只能通过createprocess或createprocessasuser api来完成。 如果有人可以通过这些API指导我以管理员身份运行程序,那将不胜感激。

阻止版本的execvp(windows)

这个问题与系统的非阻塞版本完全相反() 我想用另一个替换当前进程(不创建另一个进程)。 我想开始(例如) notepad ,但是以阻塞的方式(我不希望得到提示,直到notepad关闭。 在Windows shell中我只是这样做 cmd /c notepad (如果没有以cmd /c为前缀,则notepad自动从提示中分离) 在C中,使用system我就是这么做的 system(“notepad”); 但这是在幕后分手。 我想用notepad 替换当前进程,我希望它是阻塞的。 我试过了: #include #include int main(int argc,char **argv) { char * const args[] = {“cmd”,”/c”,”notepad”,NULL}; execvp(args[0],args); } notepad运行,但控制台立即返回提示。(非阻塞)。 我希望它阻止,我不想使用fork因为它会创建另一个进程:我想替换当前进程。 (我尝试过使用自定义阻塞可执行文件,它也不会阻塞。所以cmd /c notepad示例和其他任何一个一样好) 所以,如果我运行这个可执行文件,我只是从父进程构建: 在notepad进程退出之前,我不希望进程返回到父进程 我希望能够从命令中获得输出( notepad在这种情况下不是一个好例子) 我不想创建额外的进程(这是一个大型多处理应用程序的一部分,我们不能创建2个进程,我们需要为每次运行保留1个进程) 它甚至可能吗?

为什么在winapi中转换UTF16 – > UTF8 – > UTF16后,filename有不同的字节?

我有下一个文件: 我使用ReadDirectoryChangesW来读取当前文件夹中的更改。 我得到了这个文件的路径:L“TESTӠ⬨☐.ipt”: 接下来,我想将其转换为utf8并返回: std::string wstringToUtf8(const std::wstring& source) { const int size = WideCharToMultiByte(CP_UTF8, 0, source.data(), static_cast(source.size()), NULL, 0, NULL, NULL); std::vector buffer8(size); WideCharToMultiByte(CP_UTF8, 0, source.data(), static_cast(source.size()), buffer8.data(), size, NULL, NULL); } std::wstring utf8ToWstring(const std::string& source) { const int size = MultiByteToWideChar(CP_UTF8, 0, source.data(), static_cast(source.size()), NULL, 0); std::vector buffer16(size); MultiByteToWideChar(CP_UTF8, 0, source.data(), static_cast(source.size()), buffer16.data(), size); […]

是否将WM_ERASEBKGND消息发布到消息队列中?

WM_PAINT消息不会发布到消息队列,而是当消息队列为空时, WM_PAINT消息将被发送到窗口过程(如果窗口的某些区域无效)。 但是, WM_ERASEBKGND消息是以某种类似的方式发送的,还是只是发布到消息队列中( 文档中没有说明这一点)。

当用户点击一个键时显示一条消息

以下代码段用于在用户键入密钥时显示消息。 即使重点不在于应用程序。 但是以下代码似乎存在问题。 它不会使用windows调用挂钩链中注册的函数。 我猜问题是HINSTANCE hInst 。 我应该如何修改以下代码,以便在用户点击密钥时能够看到该消息。 // Global Variables static HHOOK handleKeyboardHook = NULL; HINSTANCE hInst = NULL; void TestKeys_setWinHook // i call this function to activate the keyboard hook (…) { hInst = GetModuleHandle(NULL); handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInst, 0); // LowLevelKeyboardProc should be put in the hook chain by the windows,but […]

如何将win32 WndProc包装到C ++类中?

这有可能吗? 例如,假设我有以下内容: class Window { private: WNDCLASSEX wc; public: inline WNDCLASSEX getWindowClass() { return wc; } Window(); LRESULT CALLBACK WndProc(HWND hwnd, UINT message, LPARAM lParam, WPARAM wParam); } void RegisterWindow(Window win) { WNDCLASSEX* wc = win.getWindowClass(); RegisterClassEx(wc); } 现在,某处会有一个部分(可能在Window类的构造函数中,需要为WNDCLASSEX分配一个WndProc ,这在Window类中有说明。唯一的问题是,因为它是一个部分class,会出现错误。这样,它是如何实现的?它是静态的吗?即便如此,如果类包装它仍然是某种程度的类的一部分。如果我在类之外创建它,那么简单地抹掉了这一点。

嵌入式Windows XP中的网络接口设置

如何根据设备描述(即“设备属性 – >连接使用:”文本框中显示的字符串)获取网络接口名称(即出现在“网络连接”对话框中的名称)? 我们必须使用纯C / C ++语言,或通过一些标准命令行工具(例如netsh,ipconfig …)或两者的组合来实现。 由于部署问题,我们无法使用.NET API(应用程序必须在没有.NET Framework的情况下在嵌入式XP上运行)。 SDK API GetIfTable和GetIfEntry似乎很有希望,但在我们的系统上,所有MIB_IFROW字段都被正确填充,除了“wszName”字段,它仍然未初始化。

如何检查Windows文件索引是ON还是OFF

C中是否有API可用于检查文件索引是打开还是关闭? 代码表示赞赏。

当前的C11实施状态()?

我很好奇C11实现的状态是什么,特别是关于可选的 。 目前是否有任何平台支持这些接口? 如果没有,是否有任何计划在POSIX和/或WinAPI方面实现接口? 是否有其他人计划使用C11中描述的接口( thrd_t , mtx_t , cond_t等等)?