Tag: winapi

Windows中的管道分支和execvp类似物

这是在unix中使用的pipe fork exec三重奏的简单演示。 #include #include #include #include int main() { int outfd[2]; if(pipe(outfd)!=0) { exit(1); } pid_t pid = fork(); if(pid == 0) { //child close(outfd[0]); dup2(outfd[1], fileno(stdout)); char *argv[]={“ls”,NULL}; execvp(argv[0], (char *const *)argv); throw; } if(pid < 0) { exit(1); } else { //parrent close(outfd[1]); dup2(outfd[0], fileno(stdin)); FILE *fin = fdopen(outfd[0], "rt"); char *buffer[2500]; […]

使用Win32 API连接字符串

使用Win32连接字符串的最佳方法是什么? 如果理解正确,正常的C方法将是使用strcat ,但由于Win32现在处理Unicode字符串(又名LPWSTR ),我想不出strcat如何使用它。 有这个function,还是我应该自己编写?

Win32(GDI) – 设置静态控制的不透明度

我正在使用C – (没有MFC或GDI +) 🙂 我想要的是将我的子窗口的不透明度设置为100(我的子窗口是STATIC控件)。 我想知道这是否可能,如果是这样,有人请指出我正确的方向如何做到这一点。 这是我的设置: 我创建我的父窗口如下: HWND hWnd; WNDCLASS wndCls_s; wndCls_s.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wndCls_s.lpfnWndProc = MainWndProc; wndCls_s.cbClsExtra = 0; wndCls_s.cbWndExtra = 0; wndCls_s.hInstance = hInstance; wndCls_s.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_BSN_64)); wndCls_s.hCursor = LoadCursor(NULL, IDC_ARROW); wndCls_s.hbrBackground = CreateSolidBrush(RGB(0, 0, 0)); wndCls_s.lpszMenuName = NULL; wndCls_s.lpszClassName = pszCName; if (RegisterClass(&wndCls_s) == 0) […]

为win32 / C阻塞线程生产者/消费者的队列

我正在尝试用自定义队列替换一些线程通信,生产者当前正在使用PostThreadMessage,消费者正在使用WaitForSingleObject / PeekMessage。 http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html将是我所需要的,但是boost和C ++不是一个选择。 不想重新实现轮子,是否有人在C中实现了这样的队列?

将桌面应用程序提交到Windowsapp store需要执行哪些操作?

我听说 Windows 10将允许开发人员将他们的桌面(非Metro)应用程序提交到Windowsapp store。 我正在使用C / C ++ / MFC和WinAPI进行开发。 将桌面应用程序提交到商店需要做什么? 有什么要求/收费?

如何在“Enter”键上按下“编辑”控件的焦点

我在main函数中创建了一个主窗口。 在WM_CREATE消息的主窗口的过程中,我创建了一个编辑控件,它使用系统“编辑”窗口类作为父窗口的子窗口。 我希望在编辑控件中按下回车键时将焦点转移到主窗口。 由于我使用了系统类,因此无法访问其程序。 我在Visual Studio 10中使用C ++因为我是win32应用程序的新手我想要一个简单的解决方案,无论代码有多长

如何让子进程使用与parrent相同的环境变量加上它自己在windows中?

在用于创建新子进程的窗口中,我正在使用CreateProcess函数: BOOL WINAPI CreateProcess( __in_opt LPCTSTR lpApplicationName, __inout_opt LPTSTR lpCommandLine, __in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes, __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, __in BOOL bInheritHandles, __in DWORD dwCreationFlags, __in_opt LPVOID lpEnvironment, __in_opt LPCTSTR lpCurrentDirectory, __in LPSTARTUPINFO lpStartupInfo, __out LPPROCESS_INFORMATION lpProcessInformation ); 在这里我们可以看到CreateProcess可以获取lpEnvironment参数来指定新进程的环境变量,如果它是NULL,则子进程将具有与parrent相同的环境。 现在我想让孩子拥有与parrent相同的环境以及lpEnvironment中指定的环境变量(即父进程和指定进程的合并环境)。 你会怎么建议这样做? 我应该采用父级的所有envs,将它们与新的env合并并将它们全部传递给CreateProcess吗?

如何在Windows中向CD-ROM驱动器发出READ CD命令?

我正在开发一个需要向CD-ROM驱动器发出原始SCSI命令的应用程序。 目前,我正在努力向驱动器发送READ CD( 0xBE )命令并从CD的给定扇区获取数据。 请考虑以下代码: #include #include #include #include #include int main(void) { HANDLE fh; DWORD ioctl_bytes; BOOL ioctl_rv; const UCHAR cdb[] = { 0xBE, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0 }; UCHAR buf[2352]; struct sptd_with_sense { SCSI_PASS_THROUGH_DIRECT s; UCHAR sense[128]; } sptd; fh = CreateFile(“\\\\.\\E:”, GENERIC_READ | GENERIC_WRITE, […]

对CLSID_MMDeviceEnumerator和IID_IMMDeviceEnumerator的未定义引用

尝试使用COM和CoCreateInstance()在C中使用MinGW-w64编译示例代码失败。 #include #include #include #include #include extern const CLSID CLSID_MMDeviceEnumerator; extern const IID IID_IMMDeviceEnumerator; int main( void ) { CoInitialize( NULL ); LPVOID device = NULL; const HRESULT ok = CoCreateInstance( &CLSID_MMDeviceEnumerator, NULL, CLSCTX_INPROC_SERVER, &IID_IMMDeviceEnumerator, &device ); CoUninitialize(); return EXIT_SUCCESS; } 编译:gcc main.c libole32.a -Wall -Wextra -oa 即使在mmdeviceapi.h中定义了CLSID_MMDeviceEnumerator,也找不到它。 实际上从示例代码中删除我的extern定义会得到相同的结果,因为两个externs似乎都在mmdeviceapi.h中定义 当我使用__uuidof并使用g ++编译代码时,但__uuidof的这个C“替换”却没有。 为什么没有找到COM标识符?

如何找到激活后打开给定HMENU的菜单项(如果有)?

我想用原型实现一个函数 /* Locates the menu item of the application which caused the given menu ‘mnu’ to * show up. * @return true if the given menu ‘mnu’ was opened by another menu item, false * if not. */ bool getParentMenuItem( HMENU mnu, HMENU *parentMenu, int *parentMenuIdx ); 给定一个HMENU句柄,我希望能够找到应用程序中的哪个菜单项(如果有的话)打开它。 这基本上与GetSubMenu函数相反。 我目前的方法是查看应用程序的顶级窗口的每个HMENU,并检查我是否可以找到一个菜单项,在激活时打开给定的子菜单。 我使用GetMenuItemCount / GetSubMenu以递归方式执行此操作 。 然而,这是相当低效的,并且对于由上下文菜单项打开的菜单而言失败。 […]