Tag: winapi

GCC / Cygwin下的InetNtop和ws2tcpip.h

我正在使用cygwin 2.774下的gcc 3.4.4提供的ws2tcpip.h版本 我正在查找InetNtop函数,这是Microsoft的inet_ntop实现,但我找到的两个版本的ws2tcpip.h不包含该函数。 包括arpa/inet.h来获取inet_ntop会导致各种可怕的重复定义。 有没有理由提供gcc / cygwin的版本没有这个function? 是否有(合法?)方式从Microsoft获得具有该定义的版本? 注意:我100%确定我有正确的#include #define , #include和链接器选项 注意:请不要建议使用较旧的WSA*function我很清楚它们。 编辑: 今天进行了一些挖掘并得出结论,标题必须缺少条目,因为这里是标题的grep: asdf@fdsa ~$ grep -i -B 4 -A 2 -R “inet_ntop” /usr/include/ /usr/include/arpa/inet.h-in_addr_t inet_netof (struct in_addr); /usr/include/arpa/inet.h-in_addr_t inet_network (const char *); /usr/include/arpa/inet.h-char *inet_ntoa (struct in_addr); /usr/include/arpa/inet.h-int inet_pton (int, const char *, void *); /usr/include/arpa/inet.h:const char *inet_ntop (int, const void *, […]

替换版本信息资源

我正在加载我的程序中的某个Exe,我正在尝试替换它的版本信息资源。 我正在使用UpdateResource()但由于某种原因它不会像原来那样替换原始资源。 UpdateResource(hHandle,RT_VERSION,”1″,MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),pRsrcMemory,rsrcSize) 当在资源编辑器中打开Exe时,我看到两个版本的Info资源具有相同的ID 1,但Windows资源管理器中显示的版本信息是原始信息。(可能是因为它首先出现在exe的.rsrc部分中但是我不确定) 任何帮助表示赞赏。

为什么子项编辑控件在选项卡控件显示区域之外绘制?

我有一个标签控件作为主窗口的子窗口和一个编辑控件作为主窗口的子窗口。 编辑控件在选项卡控件显示区域之外绘制。 显示区域是GetClientRect(hTab, &rc); SendMessage(hTab, TCM_ADJUSTRECT, FALSE, (LPARAM)&rc);获得的区域GetClientRect(hTab, &rc); SendMessage(hTab, TCM_ADJUSTRECT, FALSE, (LPARAM)&rc); GetClientRect(hTab, &rc); SendMessage(hTab, TCM_ADJUSTRECT, FALSE, (LPARAM)&rc); 即使编辑控件是制表符控件的子节点,效果也是一样的。 我知道我可以创建一个静态控件作为选项卡控件的子项,其大小适合选项卡显示区域,并使编辑控件作为静态控件的子项,这将解决我的问题,但我想将编辑控件设置为选项卡控件或主窗口的子项使事情变得简单。 如果没有选项卡显示区域外的编辑控件绘画,有没有办法做到这一点? #include #include #include #pragma comment(linker, \ “\”/manifestdependency:type=’Win32′ “\ “name=’Microsoft.Windows.Common-Controls’ “\ “version=’6.0.0.0′ “\ “processorArchitecture=’*’ “\ “publicKeyToken=’6595b64144ccf1df’ “\ “language=’*’\””) #pragma comment(lib, “ComCtl32.lib”) LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static HWND […]

使用C中的messageBox()函数显示整数?

我现在使用messageBox()显示String uptill。 如何使用此function显示整数? 我试过这样的东西,但它不起作用: int message=1; MessageBox(NULL, (LPCSTR)message, “Display”, MB_ICONINFORMATION);

win32 C / C ++从“锁定”文件中读取数据

知道如何从另一个进程锁定的文件中读取数据吗? 当我尝试fopen()或CreateFile()或OpenFile()时,我得到共享违规。 然而,如果我进入命令提示符并执行“c:> more blah.h”,我可以看到该文件。 因此,“更多”可以以某种方式读取文件。 知道它是如何实现的吗? 谢谢!

如何定义所有winapi将字符串视为UNICODE?

使用visual studio,有没有办法定义winapi的所有function,将所有字符串视为UNICODE?

在IPP打印机上使用FindNextPrinterChangeNotification失败

使用本机C应用程序中的FindNextPrinterChangeNotification函数 ,它在使用本地打印机时按预期工作。 即,在打印时, FindNextPrinterChangeNotification函数正确地返回正在打印到本地打印机的打印机作业的句柄。 但是,当打印到IPP打印机 (即通过Internet打印协议连接的打印机)时, FindNextPrinterChangeNotification函数调用失败, GetLastError()返回ERROR_INVALID_HANDLE 。 到目前为止, 其他人似乎也没有解决方案。 所以我的问题是: 您是否知道在IPP打印机上如何/是否成功使用打印机作业通知(与手动轮询新作业相比)? (我正在使用Microsoft的PrintMon工具进行测试)

调整子类程序,以便它可以在窗口和对话框中使用

我试图在单行编辑控件中捕获ENTER和ESC键。 当用户按下ENTER或ESC时,我想从编辑控件中取走键盘焦点并将其设置为listview控件。 Listview控件是编辑控件的兄弟。 我的目标是编写单个子类过程,可用于在主窗口和对话框中对子控件进行子类化。 我发现这篇MSDN文章我发现它有用,因为它的第二个解决方案。 下面是我对代码的改编。 // subclass procedure for edit control LRESULT CALLBACK InPlaceEditControl_SubclassProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) { switch (message) { case WM_GETDLGCODE: return (DLGC_WANTALLKEYS | DefSubclassProc(hwnd, message, wParam, lParam)); case WM_CHAR: //Process this message to avoid message beeps. switch (wParam) { case VK_RETURN: // change […]

线程外部终止时的NetServerEnum块

(使用VS2010在C环境中使用Win32 api) 我有一个双线程的应用程序。 第一个线程分叉第二个线程并等待给定的间隔 – “TIMEOUT”,然后在其上调用TerminateThread() 。 同时,第二个线程调用NetServerEnum() 。 看来,当达到超时时,无论NetServerEnum是否成功返回,第一个线程都会死锁。 我已经注意到NetServerEnum创建了自己的工作线程。 我最终得到了死锁中的其中一个线程,通常是在ntdll.dll!RtlInitializeExceptionChain ,无法正常退出我的进程。

使用FindFirstFileEx函数递归遍历目录

我调试了它,但我仍然不知道可能是什么罪魁祸首。 #ifndef UNICODE #define UNICODE #endif #include #include void EndWithBackslash(TCHAR* string) { if(string[wcslen(string)-1] != TEXT(‘\\’)) wcscat(string,TEXT(“\\”)); } void Browse(const TCHAR* curdir) { HANDLE hFoundFile; WIN32_FIND_DATA foundFileData; TCHAR buffer[MAX_PATH]; wcscpy(buffer,curdir); EndWithBackslash(buffer); SetCurrentDirectory(buffer); hFoundFile = FindFirstFileEx(TEXT(“*”),FINDEX_INFO_LEVELS::FindExInfoBasic,&foundFileData ,FINDEX_SEARCH_OPS::FindExSearchLimitToDirectories ,NULL , NULL); if(hFoundFile != INVALID_HANDLE_VALUE) { do { if ((foundFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && wcscmp(foundFileData.cFileName,TEXT(“.”)) && wcscmp(foundFileData.cFileName,TEXT(“..”)) ) { EndWithBackslash(buffer); […]