Tag: winapi

获取给定流程的STARTUPINFO

是否有可能获得另一个正在运行的进程的启动信息? 我想找出cmd行参数,如果它应该运行最小化/最大化,在目录中启动,以管理员身份运行等。

如何在富编辑控件上实现鼠标单击URL

我在对话框中添加了一个只读的富编辑2.0控件(代码使用的是C windows API,该对话框是使用函数DialogBox创建的) 在对话框回调中,在WM_INITDIALOG,我添加以下代码以启用URL检测,并启用事件ENM_LINK被发送到父对话框而不是富编辑控件本身: LRESULT mask = SendMessage(hWndText, EM_GETEVENTMASK, 0, 0); //hWndText is rich edit control SendMessage(hWndText, EM_SETEVENTMASK, 0, mask | ENM_LINK); ::SendMessage(hWndText, EM_AUTOURLDETECT, TRUE, NULL); 在最初启动对话框时启用url检测时遇到了一些麻烦(这似乎是一个已知问题或行为,因为丰富的编辑控件只能启用对已修改文本的url检测)。 但是,我通过在每个WM_PAINT事件上再次设置对话框文本来解决此问题。 代码通常有效。 我还实现了以下代码,当鼠标hover在url上时,在浏览器中启动URL: case WM_NOTIFY: plink = (ENLINK *) lParam; switch(LOWORD(wParam)) { case IDC_DISPLAY_TEXT_2: //this is ID for my rich edit control szURL =m_strDisplay.Mid(plink->chrg.cpMin, plink->chrg.cpMax – plink->chrg.cpMin); LaunchURL(szURL); […]

使用具有多个根窗口的FindWindow

所以我正在构建一个使用win32的SendMessage作为IPC的应用程序。 我正在使用FindWindow来获取基于className和windowName的hWnd。 这一切都很好,花花公子,直到我想要与根(如在桌面的子节点)的窗口交谈,窗口与其他根Windows具有相同的名称/类名。 有没有FindWindow的替代品我可以用来选择我想要的hWnd?

如何在C中为Windows创建multithreading?

我不知道如何在C中创建线程,我看到了关于pthread.h库的评论,但后来我听说它仅适用于Linux操作系统,我有一个函数,它是一个计时器,我想用这个函数创建一个线程但是我不知道我需要使用的库和语法编写代码,如果有人可以提供一个简单的代码与线程,或告诉我我需要放置什么东西和函数的参数。 这里是我创建倒计时用户应用的特定时间的函数:我需要创建一个具有该function的线程。 function(倒计时): #include #include #include #include void countdown(int second) { int secs = 1; time_t unix; struct tm * timeinfo; time(&unix); timeinfo = localtime(&unix); int t1 = timeinfo->tm_sec; int t2 = timeinfo->tm_sec; int i = 0; while(1 == 1) { time(&unix); timeinfo = localtime(&unix); if((t1 + i) == timeinfo->tm_sec) { system(“cls”); printf(“Time left %d\n”, […]

创建没有最大化按钮的窗口框架而不调整选项大小?

我需要创建一个像“普通”窗口一样的窗口,但没有最大化按钮和大小边框。 通过互联网搜索,并研究MSDN,我已经了解到,原生两种方法都是不可能实现的。 没有窗口样式可以同时执行这两种操作(我可以禁用最大化按钮,但这不是我的目标;至于删除resize选项,我在文档中找到了合适的窗口样式)。 最接近的描述是对话框框架行为(没有大小调整边框),但有额外的最小化按钮。 题: 有没有办法以其他方式实现我的目标? 如果是,您能否提供教程或代码示例的链接? 这将是我第一次做这样的事情,可以使用我能得到的所有帮助吗? 一个重要的注意事项:我在搜索解决方案时找到了这个例子 ,但它对我没有帮助,因为我的目标是Windows XP。

用于在C中重命名文件的Win32 API

如果源目录和目标目录,MoveFile实际上会将源文件的副本复制到目标文件中,这意味着我最终会看到两个文件。 这是重命名的最佳方式吗?

WM_NEXTDLGCTL可以与非对话窗口一起使用吗?

WM_NEXTDLGCTL的文档声明此消息将与对话框一起使用: 发送到对话框过程以将键盘焦点设置为对话框中的其他控件。 如果此消息不能与非对话框控件父项一起使用,则以通用方式(如本问题所示 )对控件进行子类化将非常繁琐,因为窗口过程必须调用SetFocus或发送WM_NEXTDLGCTL消息在确定背景上并不十分琐碎。 由于其他特定于对话框的API可以与非对话框窗口(例如IsDialogMessage )一起使用, WM_NEXTDLGCTL在此设置中也可以使用WM_NEXTDLGCTL 。 问题: WM_NEXTDLGCTL可以与非对话控制父项一起使用吗?

重叠I / O的GetOverlappedResult(bWait = TRUE)vs WaitForSingleObject()

当我在Win32 api上以OVERLAPPED方式打开和读取文件时,我有几种方法来完成IO请求,包括使用等待文件句柄(或重叠结构中的事件) WaitForSingleObject GetOverlappedResult ,bWait = TRUE 这两个函数似乎都有相同的效果:线程停止直到句柄或事件发出信号,这意味着数据被放在提供给ReadFile缓冲区中。 那么区别是什么呢? 为什么我需要GetOverlappedResult ?

16位wchar_t是否正式表示完整的Unicode?

在¹comp.lang.c++ Usenet组中,我最近断言,基于我认为我所知道的,Windows的16位wchar_t ,使用UTF-16编码,有时需要两个这样的值(称为“代理对”)单个Unicode代码点,对于表示Unicode无效。 这肯定是不方便的,并且与C和C ++标准库(例如字符分类)的假设相冲突,每个代码点都表示为单个值,尽管Unicode联盟的2004年“技术说明12”为使用UTF-16提供了一个很好的例子。用于内部处理,具有令人印象深刻的软件列表。 当然,似乎最初的意图是每个代码点有一个wchar_t值,这与C和C ++标准库的假设一致。 例如,在www.unix.org网页上的“ISO C修订1(MSE)”中,关于1995年将wchar_t纳入C标准的修订,作者坚持认为 “一个字节/一个字符模型的主要优点是,以固定宽度的块处理数据非常容易。 出于这个原因,发明了广泛性的概念。 宽字符是一种抽象数据类型,其大小足以包含特定平台上支持的最大字符。 但事实certificate,C和C ++标准似乎没有谈论支持的最大字符,而只讨论支持的语言环境中最大的扩展字符集 : wchar_t必须足够大才能代表最大扩展字符集中的每个代码点字符集 – 但不是Unicode,当没有Unicode语言环境时。 C99§7.17/ 2(来自N869草案): “ [ wchar_t type]是一个整数类型,其值范围可以表示支持的语言环境中指定的最大扩展字符集的所有成员的不同代码。 这几乎与C ++标准中的措辞完全相同。 并且它似乎意味着使用受限制的一组受支持的语言环境, wchar_t确实可以很小,直到使用UTF-8编码的单个字节(例如,在ASCII的A到Z之外没有标准库字符分类function的噩梦可能性,但是嘿)。 可能以下要求比这更广泛: C99§7.1.1/ 4: “ 宽字符是wchar_t类型的对象的代码值(二进制编码整数),对应于扩展字符集的成员。 …因为它引用了扩展字符集,但该术语似乎无法在任何地方进一步定义。 至少在Microsoft的C和C ++运行时,没有Unicode语言环境:该实现setlocale仅限于每个字符最多2个字节的字符编码: MSDN的setlocale文档: “可用的区域设置名称,语言,国家/地区代码和代码页的集合包括Windows NLS API支持的所有内容,除了每个字符需要两个以上字节的代码页,例如UTF-7和UTF-8。 如果您提供的代码页值为UTF-7或UTF-8,则setlocale将失败,返回NULL 。 所以它似乎与我认为的相反,与我的断言相反,Windows的16位wchar_t正式可以。 主要是由于Microsoft巧妙地缺乏对UTF-8语言环境的支持,或者每个字符超过2个字节的任何语言环境。 但它真的如此,是16位wchar_t好吗? 链接: ¹新闻:comp.lang.c ++ ²http: //unicode.org/notes/tn12/#Software_16 ³http ://www.unix.org/version2/whatsnew/login_mse.html ⁴https : //msdn.microsoft.com/en-us/library/x99tb11d.aspx

Metro的东西在什么桌面上运行?

只是好奇,从WinAPI开发人员的角度来看,Metro应用程序运行的桌面是什么? 这个东西: