Tag: winapi

我怎样才能在Windows应用程序截图?

如何使用Win32截取当前屏幕?

在WPF窗口中托pipe外部应用程序

我们正在WPF中开发一个布局pipe理器,该布局pipe理器具有可由用户移动/resize等的视口。 视图通常由布局pipe理器中的我们控制的提供者填充数据(图片/电影/等)。 我的工作是检查是否也有可能在视口中托pipe任何外部Windows应用程序(即记事本,计算器,Adobe阅读器等)。 我遇到了一些问题。 大多数资源指向使用HwndHost类。 我正在尝试从Microsoft本身的演练: http : //msdn.microsoft.com/en-us/library/ms752055.aspx 我已经适应了这个,所以列表框被外部应用程序的窗口句柄所取代。 有谁能帮我解决这些问题: 演练添加了一个额外的静态子窗口,其中放置了ListBox 。 我不认为我需要外部应用程序。 如果我省略了,我必须将外部应用程序设置为子窗口(使用user32.dll中的Get / SetWindowLong将GWL_STYLE设置为WS_CHILD )。 但是,如果我这样做,该应用程序的菜单栏消失(因为WS_CHILD风格),它不再接收input。 如果我使用子窗口,并使外部应用程序的一个孩子的东西合理的工作,但有时外部应用程序不画好。 另外,我需要子窗口调整到视口。 这可能吗? 当外部的应用程序产生一个子窗口(即记事本 – >帮助 – >关于),这个窗口不是由HwndHost托pipe(因此可以移动到视口外)。 有什么办法可以预防吗? 由于我不需要外部应用程序和布局pipe理器之间的进一步交互,我是否认为我不需要捕获和转发消息? (演练将HwndSourceHook添加到子窗口中,以捕获列表框中的select更改)。 当你运行(未修改的)例子VS2010并closures窗口时,VS2010没有看到程序结束。 如果你打破了一切,你最终会在没有源代码的情况下进行汇编。 有些臭味正在发生,但我找不到。 演练本身似乎是非常草率的编码,但我还没有find关于这个问题的更好的文档。 任何其他的例子? 另一种方法是不要使用HwndHost而是像这里讨论的WindowsFormHost 。 它工作(而且更简单!),但我不能控制应用程序的大小? 另外,WinFormHost是不是真的是这个意思? 感谢任何正确的方向指针。

我如何自定义Windows窗体的系统菜单?

我想添加旧的关于菜单项到我的应用程序。 我想将它添加到应用程序的“系统菜单”(当我们点击左上angular的应用程序图标时popup的那个)。 那么,我怎样才能在.NET中做到这一点?

控制台应用程序中的全局热键

有谁知道如何在控制台应用程序中使用RegisterHotKey / UnregisterHotKey API调用? 我假设设置/删除热键是一样的,但是当按键被按下时,我怎样才能接通电话? 我看到的每个示例都是针对Winforms,并使用protected override void WndProc(ref Message m){…} ,这对我来说是不可用的。 更新:我有什么是下面,但事件是从来没有打。 我以为这可能是因为当你加载ConsoleShell它阻止进一步的执行,但即使我把SetupHotkey到另一个线程没有任何反应。 有什么想法吗? class Program { static void Main(string[] args) { new Hud().Init(args); } } class Hud { int keyHookId; public void Init(string[] args) { SetupHotkey(); InitPowershell(args); Cleanup(); } private void Cleanup() { HotKeyManager.UnregisterHotKey(keyHookId); } private void SetupHotkey() { keyHookId = HotKeyManager.RegisterHotKey(Keys.Oemtilde, KeyModifiers.Control); […]

我怎样才能得到一个进程句柄的C ++名称?

我想要得到example.exe的进程句柄,所以我可以在它上面调用TerminateProcess 。 我该怎么做? 注意,它没有窗口,所以FindWindow将不起作用。

如何查找本机DLL文件是否被编译为x64或x86?

我想确定本机程序集是否从托pipe代码应用程序( C# )编译为x64或x86。 我认为它必须在PE头的某个地方,因为OS加载器需要知道这个信息,但我找不到它。 当然,我更喜欢用托pipe代码来做,但如果有必要,我可以使用本机C ++。

从DLLdynamic加载函数

我有一点看看.dll文件,我了解他们的用法,我试图了解如何使用它们。 我创build了一个包含一个函数的.dll文件,该函数返回一个名为funci()的整数 使用这个代码,我(想)我已经导入.dll文件到项目中(没有投诉): #include <windows.h> #include <iostream> int main() { HINSTANCE hGetProcIDDLL = LoadLibrary("C:\\Documents and Settings\\User\\Desktop \\fgfdg\\dgdg\\test.dll"); if (hGetProcIDDLL == NULL) { std::cout << "cannot locate the .dll file" << std::endl; } else { std::cout << "it has been called" << std::endl; return -1; } int a = funci(); return a; } # funci function […]

从内存缓冲区CreateProcess

我可以使用CreateProcess来启动一个EXE。 我想在一个内存缓冲区中有一个EXE的内容,并且不需要把它写到一个文件上就可以对其执行CreateProcess(或者等价的)。 有没有办法做到这一点? 背景故事:我们制作游戏。 我们发送一个简单的EXE给我们的分销商,然后用他们最喜欢的DRM包装,然后卖给他们的用户。 有用户发现崩溃的情况。 大多数的崩溃需要5分钟的时间来修复,但补丁必须通过经销商,可能需要几天,甚至几周。 我不能把补丁的EXE发送给玩家,因为它不会有经销商的DRM。 我正在考虑在一个encryption的数据文件中分发真正的游戏EXE,所以被封装(外部EXE)只是解密并启动真正的EXE。 这样我可以安全地分发修复程序而不禁用DRM。

C ++ wchar_t和wstrings有什么“错误”? 什么是宽字符的替代品?

我见过很多C ++社区的人(特别是freenode上的## c ++),对于使用wstrings和wchar_t以及它们在windows api中的使用感到不满。 wchar_t和wstring究竟是什么“错误”,如果我想支持国际化,那么宽字符有什么替代?

什么是相当于在Win32 API中的Posix popen()?

是否有相当于Win32 API中的Linux / Unix stdio.h popen()函数? 如果是的话,我在哪里可以find它? 编辑:我需要知道这个补丁D标准库中的遗漏。 任何答案只能使用标准的Win32 API,不能使用MSVC特定的函数。 另外,如果它存在的话,我更喜欢一些不太可怕的东西。