Articles of winapi

使用`SendInput`时,如何处理郁闷的Windows徽标键?

我的应用程序通过使用SendInput在其他应用程序中合成击键。 这几乎可以工作,除了由于情况我不能改变,发送input时左侧的Windows键总是被物理压低。 这意味着,例如,如果发送的按键是“d”键,则Windows将键击看作其Win + D快捷键并显示桌面,而“d”键击从不将其置于其预定目标。 文档中提到了这个问题,但是如何解决这个问题令人沮丧(我的重点): 此function不会重置键盘的当前状态。 调用函数时已经按下的任何键都可能会干扰此函数生成的事件。 为避免此问题,请使用GetAsyncKeyState函数检查键盘的状态,并根据需要进行更正 。 我应该如何“根据需要进行纠正”? 我已经尝试使用SetKeyboardState来closuresVK_LWIN键的键盘状态,在第一次将我的线程连接到我正在发送键击(与AttachThreadInput )的窗口的线程后,但这似乎不影响行为在所有。 我也尝试在我用SendInput发送的input开始处插入一个KEYEVENTF_KEYUP事件,但是这会导致开始菜单popup并抓住焦点,这显然是不可接受的。 调用SendInput时,处理郁闷的Windows徽标键的正确方法是什么? 编辑: 根据@ Brian的回答,我可以通过安装捕获win-key keydown事件的低级别keyhook来防止win key干扰我的代码。 但是,这具有意外的效果,即Windows键现在完全禁用。 我可以设想一些解决scheme,在这里我记住了我的钥匙扣内的所有钥匙的状态,当按下其他钥匙时模拟按下窗口钥匙,这取决于它们是否是我的钥匙模拟,但这听起来像对我来说是一个黑客。 或者,我可以使用我的键盘来模拟重要的Windows键盘快捷键。 但是文件意味着它应该以更直接的方式工作。 布赖恩的解决scheme是防止赢钥匙进入按下状态。 但是文档指出,你应该能够检查它是否被按下,如果是的话就更正。 这实际上是可能的吗?

如何使Win32对话框出现在默认位置(CW_USEDEFAULT)?

如何使默认位置/大小的Win32 对话框出现? (即如何在窗口已经创build时,为CreateWindow模拟CW_USEDEFAULT )?

在Windows服务中使用SHFileOperation

这是可能的,但在Windows服务中使用SHFileOperation是否合适? shell32.dll中的所有SHxxx API函数似乎都是用用户级程序编写的。 我可以确定SHFileOperation不会显示GUI?

如何在通知区域创build丰富的工具提示和丰富的气球

我一直在想,每当你调用NotifyIcon类的ShowBalloonTip方法时,你会得到如下的气球工具提示: 图1:标准气球工具提示 某些应用程序和Microsoft产品能够显示比“简单”气球提示更多的内容。 这里有一些样品: 图2:Windows更新气球工具提示 驱动程序安装提示http://i.msdn.microsoft.com/dynimg/IC295019.png 图3:硬件驱动程序安装气球工具提示 图4:硬件删除工具提示(程序:USB安全删除) 仔细看图2,图3和图4,发现它们不是标准的气球工具提示! 图2具有不同的形状,可能来自设置Region属性。 它也有一个比标准ToolTipIcon大得多的自定义图标。 图3使用标准的形状(我认为),但它有一个自定义的图标,不用说是大于默认的ToolTipIcon大小。 图4使用了一个标准的ToolTipIcon,但它具有不同的形状。 我的问题是如何创build在.NET中的通知区域中看到的任何“富”气球工具提示? 我可以处理WinAPI以及它可以产生必要的输出。

解密/读取/修改“.automaticDestinations-ms”和/或“.customDestinations-ms”

有谁知道如何阅读微软为JumpLists创build的文件? 我想从JumpList中清除所有历史logging/访问最多/最近closures,没有清理任务。 我尝试使用win7api中的APPID,并清除了例如google chrome的跳转列表。 但是使用“ClearAllUserTasks”方法,它会清除跳转列表中的所有内容,甚至是“任务”。 同样的事情是删除文件。 没有任何方式知道*目的地ms文件的格式,所以我可以自己修改它们? 基本上,想清除历史logging/访问量最大,但在Windows 7 Api(也不是C ++或.NET)中找不到任何东西。

是否有可能在Windows中的另一个应用程序中embedded一个应用程序?

我在Visual C ++ 2008中编写了一个Windows应用程序,我想embeddedWindows自带的计算器(calc.exe)。 有谁知道这是否可能,如果是的话,你能告诉我怎样才能做到这一点?

使用C ++ Win32 API禁用Messagebox右侧顶部的X-Button图标?

我正在使用C ++ win32 API … 我有一个Windows消息框包含OKCANCELbutton… 该消息框右上方有一个closures(X-Button)… retun1=MessageBox(hDlg,TEXT("Your password will expired,you must change the password"),TEXT("Logon Message"),MB_OK | MB_ICONINFORMATION); 我只想closures消息框使用CANCELbutton… 所以,我想禁用Xbutton图标… 我已经尝试MB_ICONMASK MB_MODEMASK这样的MB_MODEMASK 。 但我不能得到它,我需要… 我如何解决它?

可以stdcall有一个可变的参数?

据我所知,只有调用者清理栈约定可以使用可变参数。 顺便说一下,WinApi StringCchPrintfW是这样声明的(我删除了SAL) __inline HRESULT __stdcall StringCchPrintfW( STRSAFE_LPWSTR pszDest,size_t cchDest,STRSAFE_LPCWSTR pszFormat, … ); stdcall可以有一个可变的参数吗?

链接到一个大的地址感知DLL

假设我有一个用LARGEADDRESSAWARE链接器标志集合构build的DLL。 现在我有一个应用程序dynamic链接到这个DLL。 这是否使我的应用程序LARGEADDRESSAWARE? 如果不是,那么有没有这个标志设置为任何DLL的意义?

如何在Delphi中允许拖动特定控件的文件

一旦有人将文件下载到特定的控件(例如TMemo),我想接受文件。 我从这个例子开始: http : //delphi.about.com/od/windowsshellapi/a/accept-filedrop.htm并像这样修改它: procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles( Memo1.Handle, True ) ; end; 这允许控件显示拖动图标,但正确的WM_DROPFILES消息不会被调用,因为DragAcceptFiles需要一个(Parent?)窗口句柄。 我可以确定WMDROPFILES过程中的WMDROPFILES但我不知道如何,现在拖动光标适用于所有控件。 如何允许拖动特定的控件(并阻止其他控件拖动)?