Articles of winapi

在Windows应用程序中保存文件时指定编码

我正在编写一个主要处理Unicode文本的程序。 C标准库函数'fopen'提供了通过在模式string参数“…,ccs = utf-8”中包含以utf-8格式写入字符文件。 看来,Windows API“CreateFile”确实提供了这样的规定。 我必须使用'fopen'吗?

如何获得gethostid在Windows 7上的行为?

我将使用<unistd.h> ,特别是gethostid函数的Linux代码移植到Windows 7。 我需要在我的应用程序中使用的唯一32位数。 我怎样才能像我在Linux上一样使用Windows 7中的API来获取唯一的编号? 谢谢。

使用fState = ILS_ALPHA的ImageList_DrawIndirect是否可以在Windows XP上运行?

我们需要从WinAPI图像列表中绘制部分透明的图像。 带有ILS_ALPHA的ImageList_DrawIndirect()在Win7中工作正常,但在Windows XP中不起作用 – 图标的透明区域是灰色的。 结果如下所示:

如何为具有32个以上内核的系统replaceSetProcessAffinityMask()/ GetProcessAffinityMask()?

SetProcessAffinityMask()函数接受一个DWORD掩码,因此在超过32个处理器的系统上无法正确使用它。 看起来像SetThreadGroupAffinity()旨在以某种方式解决这个问题,但我可以find任何有用的代码示例说明其用法? 对于具有32个以上处理器的系统,如何使用SetProcessAffinityMask() / GetProcessAffinityMask()来调整我的程序? 有没有代码示例?

为什么截图没有使用SelectObject和BitBlt函数绘制到我的窗口上?

我试图从屏幕的0x0(左上angular)位置得到一个500×500的屏幕截图,并把它放在一个窗口中。 这是我的代码( hwnd是我的窗口句柄): HDC appDc = GetDC(hwnd); HDC dc = GetDC(NULL); HBITMAP bitmap = CreateCompatibleBitmap(dc, 500, 500); HDC memoryDc = CreateCompatibleDC(dc); SelectObject(memoryDc, bitmap); BitBlt(appDc, 0, 0, 500, 500, dc, 0, 0, SRCCOPY); ShowWindow(hwnd, SW_SHOW); SetWindowText(hwnd, _T("Window")); 我在这里错过了什么? 我正在窗口内而不是屏幕捕获黑色。 编辑 它在我将memoryDc更改为dc之后memoryDc它以前是BitBlt(appDc, 0, 0, 500, 500, memoryDc, 0, 0, SRCCOPY); 但现在的问题是SelectObject不工作。我的意思是它不把图像放入HBITMAP。 但是BitBlt正在从dc复制到appDc

替代GetWindowModuleFileName获取其他进程ApplicationFileName?

为了得到前台窗口(或应用程序文件的名称)的应用程序名称,我想使用GetActiveWindow与GetWindowModuleFileName 。 我在这里发现了一个类似于GetWindowText的问题 GetWindowText的实现工作正常,但GetWindowModuleFileName只为visual studio(当我点击devenv内部)为所有其他应用程序保留空白返回一个值。 任何暗示如何我可以找出哪里出了问题? 这可能与我的应用程序的权限/安全性有关,查询另一个进程的applicationfilename? 编辑: http : //support.microsoft.com/? id= 228469看起来像这不能在Win> = XP下工作 任何替代方法如何获取应用程序文件名?

服务器使用重叠的命名pipe道:如何使用ReadFile()与GetOverlappedResult()?

我写了一个服务器和客户端使用重叠的命名pipe道。 我的问题主要是与Readfile()和GetOverlappedResult()。 请注意,这个程序是一个testing代码。 它将稍后集成在一个框架中(我将linux代码移植到使用AF_UNIX地址族进行套接字连接的unix) 我描述服务器部分。 我有2个线程: 1)主线程打开重叠的命名pipe道,然后循环WaitForMultipleObjects()。 WaitForMultipleObjects()等待3个事件:第一个等待客户端连接。 第二个让我彻底退出程序。 在ReadFile()中挂起操作时,第三个信号被发送。 2)第二个线程在客户端连接时启动。 它在ReadFile()上循环。 这里是服务器代码: http://pastebin.com/5rka7dK7 我主要使用MSDN文档(命名pipe道服务器使用重叠I / O,命名pipe道客户端),SDK和其他文档在互联网上,编写代码。 在[1]中查看客户端代码。 客户端代码需要一些爱,但现在,我专注于使服务器完美工作。 在服务器代码中有4个函数(我忘记显示错误消息的函数): a)svr_new:创build重叠的命名pipe道和3个事件,并调用ConnectNamedPipe() b)svr_del释放所有的资源 c)_read_data_cb:调用ReadFile()的线程 d)在WaitForMultipleObjects()上循环的main()函数(主线程) 我的目标是在客户端断开连接(ReadFile()失败,GetLastError()返回ERROR_BROKEN_PIPE)以及数据来自客户端时检测_read_data_cb()。 我不明白的是: 我应该调用GetOverlappedResult()吗? 如果是,在哪里? 当ReadFile()失败,GetLastError()返回ERROR_IO_PENDING(粘贴的第50行)? 当WaitForMultipleObjects()返回(粘贴的第303行,我在那里注释了代码)? 别的地方 ? 当WaitForMultipleObjects()返回(粘贴的第302行)时,我执行ReadFile()事件的ResetEvent。 这是叫它的正确的地方吗? 在我粘贴的代码中,如果客户端发送这24个字节(ReadFile()缓冲区的大小是5字节,那么结果如下:我打算设置该值来testing如果客户端发送的数据大于ReadFile ) 缓冲) 消息:“salut,c'est le客户端!” 输出: WaitForMultipleObjects:2 * ReadFile:5 WaitForMultipleObjects:2 * ReadFile:5 WaitForMultipleObjects:2 * ReadFile:5 WaitForMultipleObjects:2 * ReadFile:5 WaitForMultipleObjects: 2 * […]

任何方式来以编程方式打开屏幕保护程序select对话框?

任何方式来以编程方式打开屏幕保护程序select对话框?

显示日元符号的问题

我正在这个应用程序中的示例应用程序,我正在显示“日元符号”。 但是显示的日元符号与标准的日元符号不同。 标准日元符号包含:Y,底部有2条水平线。 在我的申请中,显示的日元符号包含:Y,底部只有一条水平线。 请帮我解决这个问题。

如何将应用程序的图像(HBITMAP)传输到另一个应用程序?

我尝试使用设备上下文传输图像数据,并处理位图,但在另一个应用程序中该句柄无效。 我需要将图像数据或DC数据从一个应用程序传输到另一个应用程序。 这可以如何实现?