Tag: winapi

WinAPI EM_STREAMOUT崩溃

我正试图从另一个程序中获取Richedit Control的文本。 所以我找到了SendMessage的EM_STREAMOUT。 到目前为止这是我的代码(也来自另一个Stackoverflow主题): DWORD CALLBACK EditStreamOutCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { std::stringstream *rtf = (std::stringstream*) dwCookie; rtf->write((char*)pbBuff, cb); *pcb = cb; return 0; } int main() { std::stringstream rtf; EDITSTREAM es = {0}; es.dwCookie = (DWORD_PTR) &rtf; es.pfnCallback = &EditStreamOutCallback; SendMessage((HWND) 0x00000000000A06E8, EM_STREAMOUT, SF_RTF, (LPARAM)&es); } 唯一发生的事情是SendMessage返回0 – 所以显然没有读取字节 – 我试图从中获取信息的程序的CPU使用率高达100%。

不使用WS_EX_TOOLWINDOW从任务栏隐藏窗口

我有一个主窗口和一个关于窗口,关于窗口是从主窗口打开的,但问题是关于窗口显示在任务栏中! 我发现为了从任务栏隐藏一个窗口,我可以使用WS_EX_TOOLWINDOW样式,但我不希望关于窗口具有这种样式,那么还有另一种方法吗?

为什么PathFileExists()不起作用?

我想validation文件的存在,经过一些搜索,我认为PathFileExists()可能适合这项工作。 但是,以下代码始终显示该文件不存在。 为确保文件确实存在,我选择cmd.exe的完整路径作为测试文件路径。 我正在使用Windows 7(x64) #include “stdafx.h” #include #include #include #include #pragma comment( lib, “shlwapi.lib”) int _tmain(int argc, _TCHAR* argv[]) { char path[] = “c:\\Windows\\System32\\cmd.exe”; LPCTSTR szPath = (LPCTSTR)path; if(!PathFileExists(szPath)) { printf(“not exist\n”); }else{ printf(“exists!\n”); } return 0; } 你能解释一下这个问题吗? UPDATE 花几乎整个下午来解决问题。 PathFileExists()函数需要LPCTSTR类型的第二个参数。但是,编译器无法正确地将char *转换为LPCTSTR然后我包含tchar.h并使用TEXT宏来初始化指针。 完成。 LPCTSTR lpPath = TEXT(“c:\ Windows \ System32 \ cmd.exe”); PathFileExists()的MSDN参考示例代码有点过时。 […]

用于stdio文件句柄的GetFileInformationByHandle()

有没有办法使用GetFileInformationByHandle()与fopen()分配的stdio文件句柄? 使用fstat()和fileno()是不够的,因为我需要获取一些不属于struct stat的特定于Windows的信息,所以我想知道是否有任何方法可以将stdio FILE *句柄提供给GetFileInformationByHandle ()?

Win32消息循环:使用GetMessage(&msg,NULL,0,0)关闭窗口后退出?

如果我在下面有以下代码,如何检测窗口何时关闭,以便我可以退出? 似乎永远不会得到值-1 0 ,我需要处理整个线程的消息,而不仅仅是当前窗口。 HWND hWnd = CreateWindowExW(0, L”Edit”, L”My Window”, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 200, NULL, NULL, NULL, NULL); ShowWindow(hWnd, SW_SHOWDEFAULT); MSG msg; BOOL r; while ((r = GetMessageW(&msg, NULL, 0, 0)) != 0) { if (r == -1) { break; } TranslateMessage(&msg); DispatchMessageW(&msg); }

什么是TCHAR字符串和Win32 API函数的“A”或“W”版本?

什么是TCHAR字符串,例如LPTSTR和LPCTSTR以及如何使用这些字符串? 当我在Visual Studio中创建一个新项目时,它为我创建了这个代码: #include int _tmain(int argc, _TCHAR* argv[]) { return 0; } 例如,我如何连接所有命令行参数? 如果我想打开第一个命令行参数给出的名称的文件,我该怎么做? Windows API定义了许多函数的“A”和“W”版本,例如CreateFile , CreateFileA和CreateFileW ; 那么这些如何彼此不同以及我应该使用哪一个?

unsigned int类型的函数返回负数

哇我以为我知道我的C ++,但这很奇怪 这个函数返回一个unsigned int所以我认为这意味着我永远不会得到一个负数返回吗? 该函数确定您前面或后面的UTC小时数。 所以对我来说,我在澳大利亚,悉尼所以我是+10 GMT,这意味着我是UTC = LocalTime +( – 10)。 因此GetTimeZoneInformation正确地确定我是-10。 但我的函数返回一个unsigned int,所以不应该返回10而不是-10? unsigned int getTimeZoneBias() { TIME_ZONE_INFORMATION tzInfo; DWORD res = GetTimeZoneInformation( &tzInfo ); if ( res == TIME_ZONE_ID_INVALID ) { return (INT_MAX/2); } return (unsigned int(tzInfo.Bias / 60)); // convert from minutes to hours } TCHAR ch[200]; _stprintf( ch, _T(“A: %d\n”), […]

无法使HTTP POST请求正常工作

我正在尝试使用HTTP POST请求从我正在使用的游戏中发送文件到游戏的网站。 当我使用HTML页面上的表单发送文件时,它工作正常。 但是,我无法在游戏中模拟同样的事情。 我收到响应代码200表示请求成功,但是,上传脚本表明它收到了GET请求,$ _FILES和$ _POST数组为空。 我已经查看了HTML表单的POST和Wireshark中的游戏POST的输出,但是无法检测到两者之间有任何有意义的差异。 (如果我知道如何完全复制HTML表单的POST方法,我会,但我不认为这是可能的。) 无论如何,这是我用来发送它的代码。 谢谢! HINTERNET hInternet; HINTERNET hConnect; HINTERNET hRequest; INTERNET_BUFFERS Buffers; DWORD dwBytesWritten; DWORD dwNumBytesToWrite; char szBoundary[32]; char szContentTypeHeader[64]; char szFileHeader[256]; char szFileFooter[4]; char szBodyFooter[32]; ULONG ulTotalBytesWritten; ULONG ulOffset; ULONG ulContentLength; // Get a handle for working with the Internet. hInternet = InternetOpen( “Wrack”, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, […]

如何在窗口过程中指出处理消息时出错?

我目前正在创建一个库来处理来自Raw Input API的信息,我正在使用级联函数处理所有内容。 这导致了几个非常小的,非常易读且非常集中的function。 但是,它只是打击了我,我不明白如何正确指示Windows失败。 我有这个function: /* OnInput: Handle data received from Windows via a `WM_INPUT` message. */ static LRESULT CALLBACK OnInput(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { BOOL DispatchRawInput(CONST PRAWINPUT); assert(msg == WM_INPUT); return DefWindowProc(hWnd, msg, wParam, lParam); } 它会返回零, 因为文档说明它应该 ; 但这取决于成功。 实际文字说明: “如果应用程序处理此消息,则应返回零。” 但是如果我无法处理它该怎么办? 我最初假设你只是调用DefWindowProc并将其留在那,但这并没有向Windows发出任何事情的信号。 消息WM_CREATE似乎是我能找到的唯一返回零以外的实例: “如果应用程序处理此消息,则应返回零以继续创建窗口。如果应用程序返回-1,则窗口将被销毁,CreateWindowEx或CreateWindow函数将返回NULL句柄。” error handling真的只取决于程序员/团队而不是通知操作系统的必要性吗? 那些像WM_CREATE这样的事件失败并且需要阻止创建窗口呢?

从Windows C函数返回字符串

我是C和C ++中纯Windows API级函数的完全新手,并且最近一直在尝试使用.NET互操作性。 我已经构建了一个简单的库,它已经成功地将数值(int / float等)返回给.NET调用者,但是我没有运气好的字符串。 我尝试了各种不同的数据类型,但似乎都没有:LPSTR,LPCSTR,LPCTSTR和LPCWSTR。 不可否认,我没有尝试过char *。 此外,一旦设置了一个方法来返回一个字符串,它是否需要.NET作为特定数据类型进行编组,还是可以简单地直接读入System.String对象? 我已经尝试解析为IntPtr然后转换为字符串,但这不起作用。