Tag: winapi

使用ExitThread关闭线程 – C.

我有一个简单的程序,它创建一个线程,循环二十次,然后调用关闭自己并执行必要的清理。 当我调试程序时,它到达ExitThread(); 方法和暂停,忽略printf(); 我在它之后设立了信号告诉我它已经关闭了。 这是正常的还是我忘了做某事? 我是使用C进行线程化的新手。 主要() void main() { Time t; int i = 0; StartTimer(); for(i = 0; i < 20; i++) { t = GetTime(); printf("%d.%.3d\n", t.seconds, t.milliseconds); Sleep(100); } StopTimer(); } 线程创建 void StartTimer() { DWORD threadId; seconds = 0; milliseconds = 0; // Create child thread hThread = CreateThread( NULL, […]

使用LookupAccountName时访问冲突写入位置0x00000000

在使用NetUserAdd创建用户帐户后,我发现我需要使用NetLocalGroupAddMembers将用户添加到Users组,因此我调用CreateWellKnownSid来获取用户的SID,LookupAccountSid从该SID获取字符串名称并传递给它到NetLocalGroupAddMembers. 我还需要指定用户名,但函数需要domain \ name格式为level 3 ( LOCALGROUP_MEMBERS_INFO_3 ),但我没有。 我决定调用LookupAccountName来获取用户名SID并将其传递给level 0 ( LOCALGROUP_MEMBERS_INFO_0 )。 这就是我做的方式: //LocalAlloc UINT memAttributes = LMEM_FIXED; SIZE_T sidSize = SECURITY_MAX_SID_SIZE; //LookupAccountName PSID accountSID; SID_NAME_USE typeOfAccount; //NetLocalGroupAddMembers NET_API_STATUS localGroupAdd; DWORD levelOfData = 0; //LOCALGROUP_MEMBERS_INFO_0 LOCALGROUP_MEMBERS_INFO_0 localMembers; DWORD totalEntries = 0; //Allocate memory for LookupAccountName if (!(accountSID = LocalAlloc(memAttributes, sidSize))) { wprintf(L”\nMemory allocation for […]

FindResource在exe文件上给出错误1813

我过去3天一直在尝试这个,但我仍然无法使它工作。 WINAPI FindResource函数抛出错误1813:这意味着找不到资源类型。 我正在使用eclipse所以没有.RC文件或resource.h文件,所以我用LoadLibraryA加载了我的exe文件,然后在FindResourceA使用了HANDLE 。 这是我的代码: HRSRC hRsrc; HMODULE hExe; /** Loading resource file in the program */ if (!(hExe = LoadLibraryA(TEXT(filename)))) { printf(“Cannot load resource error: %lu \n”, GetLastError()); return 0; } printf(“Resource file %s is loaded to the program \n”, filename); /** Finding resource */ if (!(hRsrc = FindResourceA(hExe, MAKEINTRESOURCE(10), “EXE”))) { printf(“Cannot […]

使用WinAPI WriteConsole控制台输出

我正试图用winapi函数做你好世界。 它有点工作,但我很乐意以正确的方式完成它。 所以我得到这样的代码: int main(){ HANDLE std_out; int i; char *error_msg; std_out = GetStdHandle(STD_OUTPUT_HANDLE); if(std_out == INVALID_HANDLE_VALUE){ MessageBox(NULL,”stdout not available”,”Error”,MB_OK); return 1; } AttachConsole(ATTACH_PARENT_PROCESS); if(!WriteConsoleA(std_out,”hhh\n”,4,&i,NULL)){ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,GetLastError(),0,&error_msg,4,NULL); MessageBox(NULL,error_msg,”Error”,MB_OK); } return 42; } 我也有点尝试,所以我链接/ entry:main / subsystem:windows 然后输出如下: %PATH_TO_WORKING_DIR%>hhh(CRLF) 然后它等到我按下RETURN然后程序终止,这可能是你很可能同意的“你好世界”。 任何想法如何摆脱那个残疾人和必须按回归的想法都非常受欢迎,因为阅读。

如何确定Win32上的最佳磁盘IO块大小?

在Posix系统上,stat结构的st_blksize成员包含给定文件的IO的最佳块大小。 看起来stat(_stat和_stat64)的Win32实现不支持此字段。 什么是确定给定文件或文件系统的最佳IO块大小的Win32等效方法?

加载DLL库

是否可以使用C加载DLL并使用其function? 我是C的新手,我正试图在互联网上搜索一些好的参考资料; 但我找不到任何东西。 任何帮助,将不胜感激! 我在Windows 7,64位的Code :: Blocks中使用GNU GCC。

如何以编程方式更改主卷?

在Windows XP上的C / C ++中如何获取主卷或如何更改主卷…? 提前致谢…

如何在ListView控件中找到项?

我的列表视图包含3列名称,地址和电话号码。 我想检索特定名称的索引。 我正在使用ListView_FindItem宏来查找索引号,但是当我的代码到达此行时,它会使程序崩溃。 它只是说Payroll已经停止工作了。 Windows可以在线检查问题的解决方案。 我确定我已经通过了ListView_FindItem宏的正确句柄,但我不确定LVFINDINFO结构。 这是我的代码 WCHAR szProcess[80] = {0}; LVFINDINFO item = {LVFI_STRING, (LPCTSTR) szProcess}; //code to find parent handles … //code to find index index = ListView_FindItem(hwndListView, -1, &item); 我不确定LVFI_STRING标志,我甚至尝试将一个常量LVFINDINFO结构传递给ListView_FindItem宏,但我的程序仍然崩溃。 注意:上述代码不是工资单应用程序的一部分。 我的意思是说工资单应用程序有listview,我正在尝试从其他应用程序中搜索该项目。 有人可以指出我正确的方向吗? 谢谢。

获取SDL 2应用程序的窗口句柄

我想获得SDL2窗口的句柄,以便与WinApi一起使用。 我使用以下代码检索该句柄: /* All the SDL initalisation… */ SDL_Window* window = SDL_CreateWindow(“My Window”, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, RESX, RESY, SDL_WINDOW_SHOWN); SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); if (window == NULL || renderer == NULL) { MessageBox(NULL, L”SDL initialisation error”, NULL, MB_OK); exit(-1); } SDL_SysWMinfo wmInfo; SDL_GetWindowWMInfo(window, &wmInfo); HWND hwnd = wmInfo.info.win.window; 但此时, hwnd地址是0xcccccccc (未使用)。 我做错什么了吗?

Win32流句柄 – 更改为二进制模式

我正在使用CreatePipe创建句柄,然后在启动子进程时传递。 子进程将二进制信息写入其标准输出,该标准输出被重定向到我创建的管道中。 然而,当写入数字’10’时,事情变得混乱,我得到太多的输出字符 – 我假设这是因为流在文本模式下打开并且它自动添加13。 在Win32中是否有任何方法可以从CreatePipe返回HANDLE并将流模式更改为二进制,就像我使用函数_setmode一样,如果我有一个FILE *? 或者有没有办法将他的句柄翻译成文件*所以我可以使用_setmode? 示例代码: HANDLE hOutputReadTmp,hInputWriteTmp; SECURITY_ATTRIBUTES sa; bool Binary = true; // Set up the security attributes struct. sa.nLength= sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; if (!CreatePipe(&hInputRead,&hInputWriteTmp,&sa,0)) { Error = “Unable to Create Input Pipe”; return false; }; if (Binary == true) { //Put a magic something here […]