Tag: winapi

c ++ win32:如何设置窗口的颜色?

我可以在注册课程时设置背面颜色,例如: wincl.hbrBackground = CreateSolidBrush(RGB(202, 238, 255)); RegisterClassEx(&wincl); 但是,我如何使用CreateWindow函数创建的任何窗口? 就像我的主窗口上的按钮,我启用了视觉样式,我可以注意到按钮后面的窗口默认灰色背面颜色。 不要告诉我,我必须为我的控件上的窗口过程设置SetWindowLong并拦截WM_PAINT 🙁

压缩PCM数据

我正在使用WinAPI – Wavefunction来创建一个记录麦克风X秒的录制程序。 我在网上搜索了一下,发现PCM数据太大了,通过套接字发送它会有问题…… 如何将其压缩到更小的尺寸? 任何简单/“便宜”的方式? 我也注意到,当我使用Wave API函数声明格式时,我正在使用此代码: WAVEFORMATEX pFormat; pFormat.wFormatTag= WAVE_FORMAT_PCM; // simple, uncompressed format pFormat.nChannels=1; // 1=mono, 2=stereo pFormat.nSamplesPerSec=sampleRate; // 44100 pFormat.nAvgBytesPerSec=sampleRate*2; // = nSamplesPerSec * n.Channels * wBitsPerSample/8 pFormat.nBlockAlign=2; // = n.Channels * wBitsPerSample/8 pFormat.wBitsPerSample=16; // 16 for high quality, 8 for telephone-grade pFormat.cbSize=0; 如您所见, pFormat.wFormatTag= WAVE_FORMAT_PCM; 也许我可以插入而不是WAVE_FORMAT_PCM其他东西,所以它会被立即压缩? 我已经检查了MSDN的其他值,虽然它们在我的Visual Studio中都不适合我… 那我该怎么办? 谢谢!

检查硬盘上的坏扇区

最近几次停电后,我的计算机已经搞得很乱(BSODs时不时,整个操作系统表现得非常奇怪)。 现在我有一个程序在我的计算机搞砸之前运行得非常好。 该程序基本上使用CreateFile创建一个文件,并使用WriteFile写入它。 这个程序还有其他东西基于这个文件做他们的事情。 我注意到整个程序也表现得很奇怪。 我的调试结果: 我注意到在CreateFile之后,创建了应该存在的文件(使用资源管理器和命令行进行检查)。 WriteFile没有写入文件(再次使用资源管理器和命令行进行检查)。 在WriteFile之后,每当我在资源管理器中双击文件或对该文件做任何事情时,一切都表现得好像文件不存在。 所有API都返回了各自的成功代码。 绝对没有错误。 我停止了我的程序并退出了IDE之后,我去了explorer并试图删除包含上面创建的文件的文件夹,它向我展示了这个: 该文件已被删除。 注意:上述情况并非总是如此。 由于上面的调试,我得出的结论是,由于我的整个操作系统表现得很奇怪,我的程序也很奇怪。 我的计划没有错(因为在那些严重的停电之前一切都很完美)。 无论如何,微软有这个说错误 。 基本上我的硬盘有很多坏道。 我的问题:有没有办法以编程方式检查C中的硬盘驱动器是否正常? 该检测不需要100%正确。 但是,我确实希望这个检查非常快(因为我做了很多写等等)。 我想要这个检查,因为到目前为止,我的程序的其余部分认为文件已经准备就绪(因为没有返回错误)并且随后发生了各种奇怪的行为。 作为一个可能不知道他/她的硬盘被驱动的用户,我希望我的程序建议运行磁盘检查。

使用CreateFileMapping时出错 – C

我正在使用此MSDN链接上的教程来实现一种将数据从一个进程传输到另一个进程的方法。 虽然我在之前的一个问题中被告知使用Pipe方法,但由于某些约束,我别无选择,只能使用CreateFileMapping方法。 现在,我已经成功地在同一个解决方案中创建了两个单独的窗口窗体项目,并通过编辑一些属性同时加载两个窗体。 此外,我设法将MSDN示例中给出的代码实现到第一个(生产者)和第二个(消费者)程序中,没有任何编译错误。 我现在遇到的问题是当我运行第一个程序并尝试创建映射文件的句柄时,我收到一个错误,说它不成功,我不明白为什么会发生这种情况。 我已经添加了Producer和Consumer代码文件来演示我想要做的事情。 制片人 : #include #include #include //File header definitions #define IDM_FILE_ROLLDICE 1 #define IDM_FILE_QUIT 2 #define BUF_SIZE 256 TCHAR szName[]=TEXT(“Global\\MyFileMappingObject”); TCHAR szMsg[]=TEXT(“Message from first process!”); void AddMenus(HWND); LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM); ////Standard windows stuff – omitted to save space. ////////////////////// // WINDOWS FUNCTION // ////////////////////// LRESULT CALLBACK WindowFunc(HWND […]

获取任务栏的句柄

是否有WinAPI函数来检索任务栏的句柄? 目的是确定任务栏对接设置(ABE_LEFT,ABE_RIGHT,ABE_BOTTOM,ABE_TOP)。 SHAppBarMessage函数需要任务栏句柄来检索停靠信息。 除非有另一种方法来确定任务栏对接设置而不需要手柄? 我知道这个方法工作正常,但我不确定它是否适用于所有Windows版本: HWND taskBar = FindWindow(“Shell_TrayWnd”, NULL);

数组作为函数的参数

有一系列结构。 static field fields[xsize][ysize]; 我想在function上改变它 void MoveLeft(pacman *Pacman, field **fields,int **play) 但是,当我这样发送它 MoveLeft(&Pacman,fields,play); 我有一个错误。 场 – 结构 typedef struct { blossom blossoms; wall walls; }field; 开花和墙壁 – 另一个结构

winapi CreateWindowEx – >用户系统样式创建按钮?

当我转到我的电脑 – >帮助 – >关于Windows时,我想制作一个看起来就像OK按钮的按钮。 我正在创建一个这样的按钮: hButton = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT(“BUTTON”), TEXT(“Text”), WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 10, 10, 30, 30, hwnd, (HMENU)IDC_MAIN_BUTTON, GetModuleHandle(NULL), NULL); 但它看起来像一个粗糙的方块,并没有使用用户选择的窗口样式。 我想我应该使用某种窗口类,但我不确定是什么类?

检查是否使用C安装了服务

我正在编写一个创建Windows服务的C应用程序。 我想在尝试调用安装function之前检查服务是否已安装,但我无法找到如何检查它。 我已经编写了上面的代码来尝试: DWORD InstallMyService() { char strDir[1024 + 1]; SC_HANDLE schSCManager; SC_HANDLE schService; LPCTSTR lpszBinaryPathName; if (GetCurrentDirectory(1024, strDir) == 0) { aff_error(“GetCurrentDirectory”); return FALSE; } strcat(strDir, “\\”MY_SERVICE_BIN_NAME); if ((schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) { printf(“Error OpenSCManager : %d\n”, GetLastError()); return FALSE; } lpszBinaryPathName = strDir; schService = CreateService(schSCManager, MY_SERVICE_NAME, MY_SERVICE_DESCRIPTOR, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, […]

睡眠()或睡眠()有多准确

我正在尝试模拟按键和按键动作。 例如:2638毫秒。 SendMessage(hWnd, WM_KEYDOWN, keyCode, 0); Sleep(2638); SendMessage(hWnd, WM_KEYUP, keyCode, 0); 你怎么知道它真的有用吗?

RegOpenKeyEx出错

我正在使用Code :: blocks来编写一个更改注册表的程序,但是当我调用时 RegOpenKeyEx (HKEY_LOCAL_MACHINE, “SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce”, 0, KEY_ALL_ACCES | KEY_WOW64_64KEY, &key); 代码块返回 `KEY_WOW64_64KEY’未声明(首次使用此function) 我添加了#include 但它仍然不起作用。 谢谢 :)