Articles of winapi

如何以编程方式重新启动Windows资源pipe理器进程

我正在一个Windowsshell扩展,不幸的是,当对DLL进行更改时,我必须重新启动Windows资源pipe理器(因为它保持在内存中的DLL)。 我从迪诺埃斯波西托发现了这个节目,但它对我不起作用。 void SHShellRestart(void) { HWND hwnd; hwnd = FindWindow("Progman", NULL ); PostMessage(hwnd, WM_QUIT, 0, 0 ); ShellExecute(NULL, NULL, "explorer.exe", NULL, NULL, SW_SHOW ); return; } 有人可以分享一些东西吗? PS我意识到,我可以去任务pipe理器,并杀死探险家的过程,但我只是想这样做的懒惰的方式。 此外,这使自动化。 PPS我正在使用.NET进行开发,但shell重启function可能是C,C ++或.NET语言。 它只是一个小型的独立可执行文件。

从C打开Windows文件/文件夹属性对话框

我有这个微小的程序,它是在指定的info.lpFile上显示Windows文件/文件夹属性对话框: #include <windows.h> main() { SHELLEXECUTEINFO info = {0}; info.cbSize = sizeof(SHELLEXECUTEINFO); info.lpFile = "C:\\test.txt"; info.nShow = SW_SHOW; info.fMask = 0x00000000; info.lpVerb = "properties"; ShellExecuteEx(&info); } 当我编译并执行它时,我得到以下错误信息: 我正在使用Win7和Mingw gcc编译器。 有人知道我的代码有什么问题吗? 我错过了什么吗?

如果我调用GlobalLock(),然后调用GlobalUnlock(),会发生什么?

在Win32中,为了将数据粘贴到剪贴板,我必须调用GlobalAlloc() ,然后使用GlobalLock()来获取指针,然后复制数据,然后调用GlobalUnlock()和SetClipboardData() 。 如果代码是用C ++编写的,那么在调用GlobalLock()和GlobalUnlock()之间可能会抛出一个exception,如果我不关心这个GlobalUnlock()将不会被调用。 这是一个问题? 如果我调用GlobalLock() ,出于什么原因跳过配对的GlobalUnlock()调用,到底发生了什么?

用ShellExecuteEx启动外部应用程序并等待,直到它初始化

我有一个应用程序需要运行链中的其他几个应用程序。 我通过ShellExecuteEx运行它们。 运行每个应用程序的顺序非常重要,因为它们彼此依赖。 例如: Start(App1); If App1.IsRunning then Start(App2); If App2.IsRunning then Start(App3); ……………………. If App(N-1).IsRunning then Start(App(N)); 一切工作正常,但有一个可能的问题: ShellExecuteEx启动应用程序,并立即返回。 例如,当App1已经正确启动,但尚未完成一些内部任务时,可能会出现问题,但尚未准备好使用。 但是ShellExecuteEx已经启动了依赖于App1 App2 ,并且App2将无法正常启动,因为它需要完全初始化App1 。 请注意,我不想等待App(N-1)完成,然后启动AppN 。 我不知道这是否可以用ShellExecuteEx解决,我试过使用 SEInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC; 但没有任何影响。 启动AppN应用程序后,我有一个处理过程。 如果我假设应用程序在创build主窗口(所有应用程序都有一个窗口)后初始化,我可以以某种方式在其消息队列中放置一个钩子,并等待直到WM_CREATE出现或者可能是WM_ACTIVATE ? 在这样的信息的情况下,我的应用程序将知道它可以继续前进。 这只是一个想法。 但是,我不知道如何把这个钩子。 所以,如果你能帮助我,或者你有一个更好的主意,这将是伟大的:) 此外,该解决scheme必须在Windows XP及更高版本上运行。 谢谢你的时间。 编辑 @Cosmic Prund:我不明白你为什么删除你的答案? 我可能会尝试你的想法…

哪些是与已经打开的本地操作系统对话框,如使用Python(保存AS)进行交互的最佳方式?

是否有任何有效的方法使用任何Python模块,如PyWind32与现有的Native OS对话框,如“另存为”框交互? 我试图search谷歌,但没有帮助。 编辑: 1:当用户在Web应用程序上单击“另存为”对话框时,“另存为”对话框被触发。 2:任何build议,欢迎处理任何本地操作系统对话框已经触发使用Python。(不需要特定于Selenium webdriver,我正在寻找一个通用的build议。) (当我发布这个问题时,我认为通过“与对话框交互”将暗示它是现有的,就好像我能够创build一个对话框一样,那么当然可以和我的程序控制下的交互。在阅读了前两个答案之后,我意识到自己并没有明确的说法,这就是为什么编辑) 谢谢

使用Win32 / WINAPI通过内存映射文件传输数据

我需要传输一些数据 – char buffer[100000]; – 由我开始的一个孩subprocess。 现在我正在使用一个普通的文件来这样做,父进程将数据写入磁盘上的一个文件,subprocess从磁盘读取并删除文件。 但是,这会导致不必要的写入磁盘,所以我想使用内存映射文件。 除非使用页面文件或交换文件,否则如何创build,写入,然后从内存映射文件中读取数据,以便不将数据写入磁盘? 编辑:我忘了指定,我想使用原始的WINAPI函数,所以代码没有依赖关系。 我正在研究如何做到这一点,准备好后会自己发表一个答案,但如果有人有现成的代码,他们欢迎救我一些努力:)

计时器在Windows 7之前合并

在Windows 7和Windows 8中有定时器合并支持,例如见: 在.net中定时器合并 Windows 7有一个函数SetWaitableTimerEx ,声称它支持在这里和这里合并。 Windows 8另外还有一个函数SetCoalescableTimer ,它支持根据MSDN进行合并。 所以在Windows 7和Windows 8中有很多关于定时器合并的话题。但是看起来它可能已经在早些时候被实现了。 是这样吗? 首先, 自Vista以来可用的SetThreadpoolTimer在Vista下提供了定时器合并 。 还是它只提供接口,并且实际上只有在Windows 7以后才实现合并? 从“线程池定时器和I / O”我可以读取 “这实际上是一个影响能源效率的function,有助于降低整体功耗,它基于一种称为定时器合并的技术。” 对于支持SetThreadpoolTimer函数的所有Windows版本,这句话是否正确? 其次,现在我开始怀疑了。 我可以看到timeSetEvent可用,因为XP具有名为uResolution参数。 在定时器事件等待期间,这个参数是否像timeBeginPeriod一样改变全局定时器的分辨率,还是只影响这个特定的定时器,还提供定时器合并 ? 最后,在Windows XP或Vista下是否还有其他function可以提供定时器合并?

CRITICAL_SECTION设置并获得单一的bool值

现在写复杂的class ,觉得我用了很多CRITICAL_SECTION 。 据我所知,有一些types的primefaces操作,总是执行没有任何硬件或软件中断。 我想检查我是否正确理解一切。 设置或获取primefaces值,我们不需要CRITICAL_SECTION因为这样做不会有中断。 bool是primefaces的。 所以有我的陈述,要问,如果他们是正确的,如果他们是正确的,什么types的variables也可以设置或得到没有CRITICAL_SECTION ? PS我正在谈论获取或设置每个方法一个单一的值 ,而不是两个,不是五个,而是一个。

通过图像名称获取进程的进程句柄

我需要从C使用Win32最简单的方式获取另一个进程的进程句柄的可执行文件名。 我正在寻找的过程没有任何注册的窗口类。 我也知道,如果它正在运行,将只有一个它正在运行的实例。

如何从Windows应用程序检测禁用的networking接口连接?

我想知道什么时候一个接口已被禁用。 如果我进入Windowspipe理器并禁用其中一个启用的连接,GetIfTable()只返回关于1接口的状态,它不再看到断开的连接。 (返回1表) 我怎么能得到的东西,返回的残疾界面仍然存在,但目前禁用? 谢谢。 http://msdn.microsoft.com/en-us/library/aa365943%28VS.85%29.aspx