Tag: winapi

定位C ++ 03时使用std :: basic_string <t>作为连续缓冲区是否合理?

我知道在C ++ 03中,从技术上说, std::basic_string模板不需要具有连续的内存。 不过,我很好奇现代编译器有多less实现可以利用这个自由。 例如,如果想要使用basic_string来接收一些C API的结果(比如下面的例子),那么分配一个向量直接把它变成一个string似乎很愚蠢。 例: DWORD valueLength = 0; DWORD type; LONG errorCheck = RegQueryValueExW( hWin32, value.c_str(), NULL, &type, NULL, &valueLength); if (errorCheck != ERROR_SUCCESS) WindowsApiException::Throw(errorCheck); else if (valueLength == 0) return std::wstring(); std::wstring buffer; do { buffer.resize(valueLength/sizeof(wchar_t)); errorCheck = RegQueryValueExW( hWin32, value.c_str(), NULL, &type, &buffer[0], &valueLength); } while (errorCheck == ERROR_MORE_DATA); […]

如何在WindowsC ++ / CLI中获取应用程序可执行文件的名称?

我需要根据可执行文件名更改应用程序的function。 没有什么大的,只是改变显示的string和一些内部标识符。 该应用程序是用本地和.Net C ++ – CLI代码混合编写的。 我看过的两种方法是parsingWin32中的GetCommandLine()函数,并在.Net中填充AppDomain和其他东西。 然而,使用GetCommandLine并不总是如同从debugging器运行时那样命令行是空的。 而.Net AppDomain的东西似乎需要大量的填充。 那么在C ++ / CLI中确定可执行文件名称的最好/最简单/最有效的方法是什么? (我有点希望我错过了.Net中简单的东西。) 编辑:我应该提到的一件事是,这是一个使用C ++ / CLI的Windows GUI应用程序,因此不能访问传统的C风格主函数,它使用Windows WinMain()函数。

如何获得windows上每个线程的CPU使用率(win32)

寻找Win32 API函数,C ++或Delphi示例代码,告诉我一个线程的CPU使用率(百分比和/或总CPU时间)(而不是一个进程的总数)。 我有线程ID。 我知道,Sysinternals进程资源pipe理器可以显示这些信息,但我需要在我的程序中的这些信息。

我如何运行需要提升和等待的subprocess?

Win 7 / UAC让我疯狂。 在我的C ++应用程序中,我需要运行一个需要在Windows 7上升级的可执行文件。我想要解决这个问题并等待它完成后再继续。 什么是最简单的方法来做到这一点? 我通常通过CreateProcess()来做这种事情,但是对于那些需要提升的可执行文件来说,这是失败的。 我尝试运行使用cmd.exe /c …通过CreateProcess ,它的工作,但popup一个丑陋的cmdterminal窗口。 我正在阅读的ShellExecute()将允许提升,但它似乎并不容易等待exe完成使用ShellExecute() 。 会像system()一样简单的工作吗? 任何其他的想法,非常感谢!

如何发送文本到记事本在C#/ Win32中?

我正在尝试使用SendMessage来记事本,这样我就可以插入书面文本而不使记事本成为活动窗口。 过去我使用SendText做过这样的事情,但是那需要记事本的重点。 现在,首先我要检索Windows句柄: Process[] processes = Process.GetProcessesByName("notepad"); Console.WriteLine(processes[0].MainWindowHandle.ToString()); 我已经确认这是记事本的正确处理,同样在Windows Task Manager 。 [DllImport("User32.dll", EntryPoint = "SendMessage")] public static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam); 从这里开始,我无法使SendMessage在我的所有实验中都能正常工作。 我会走错方向吗?

打开/closures显示器

通过代码(C#)打开/closures监视器是否可以编程?

有没有可能“反编译”Windows的.exe? 或者至less查看大会?

我的一个朋友从Facebook上下载了一些恶意软件,我很好奇,看看它是怎么做的,而不会感染我自己。 我知道你不能真正反编译一个.exe,但我可以至less在Assembly中查看它或附加一个debugging器? 编辑说这不是一个.NET可执行文件,没有CLI头。

在.NET中相当于ShellExecute

我正在寻找执行ShellExecute在Win32(打开,打印等任意文件types)中执行相同types的事情的.NET首选方式。 我一直在编程Windows 20多年,但我是一个完全在.NET新手,所以也许我只是在错误的地方看。 我目前正在使用.NET 2.0(VS C#2005),但如果需要的话可以使用VS 2008。 如果唯一的答案是使用P / Invoke,那么我可能会更好使用Win32写我的小工具。

有什么办法来检测Windows中的监视器状态(开或关)?

有没有人知道是否有一个API来获取Windows(XP / Vista / 2000/2003)当前的监视器状态(打开或closures)? 我所有的search似乎都表明,没有真正的做法。 此线程尝试使用根据Microsoft的文档GetDevicePowerState不适用于显示设备。 在Vista中,我可以收听GUID_MONITOR_POWER_ON,但是当手动closures显示器时,我似乎没有收到任何事件。 在XP中,我可以挂钩到WM_SYSCOMMAND SC_MONITORPOWER ,寻找状态2.这只适用于系统触发电源closures的情况。 WMI Win32_DesktopMonitor类似乎也没有帮助。 编辑 :这是一个关于comp.os.ms-windows.programmer.win32 的讨论 ,指出没有可靠的方法来做到这一点。 任何人有任何其他的想法?

安全地使用Win32 API删除USB驱动器?

如何使用Win32 API删除USB驱动器? 我在embedded式系统上做了很多工作,其中一个就是将我的程序复制到U盘上,然后插入到目标硬件中。 由于我主要在控制台上工作,我不喜欢使用鼠标,每天点击一次小的任务栏图标一百次。 我很想编写一个小程序来做到这一点,所以我可以把它放到我的makefile中,但是我还没有find任何API调用来做同样的事情。 有任何想法吗?