Tag: winapi

使用UPX压缩Windows可执行文件有什么缺点吗?

我之前使用过UPX来减lessWindows可执行文件的大小,但是我必须承认,我对这种可能产生的负面影响是天真的。 所有这些包装/拆包的缺点是什么? 是否有任何人会推荐不UPX的可执行文件(例如,当编写一个DLL,Windows服务,或针对Vista或Win7时)? 我在Delphi中编写了大部分代码,但是我也使用UPX来压缩C / C ++可执行文件。 在附注中,我没有运行UPX来保护我的exe免受反汇编,只是为了减小可执行文件的大小,并防止粗略的篡改。

Win32控制台应用程序可以检测是否已经从资源pipe理器运行了吗?

我必须创build一个需要某些参数的控制台应用程序。 如果他们缺less或错误,我打印出一个错误信息。 现在的问题是:如果有人通过双击控制台窗口从资源pipe理器启动程序立即消失。 (但是这个应用程序并不是完全没有用的,你可以把文件拖到它上面,这样就行了) 我总是可以等待按键,但是如果用户从命令行启动它,我不希望这样做。 有没有办法区分这些情况?

有没有办法使用win API获取HRESULT值的string表示?

win API中有没有函数可以用来提取HRESULT值的string表示? 问题是不是所有的返回值都logging在MSDN中,例如ExecuteInDefaultAppDomain()函数没有logging为返回“0x80070002 – 系统找不到指定的文件”,但是,它确实! 因此,我想知道是否有一个常用的function。

确定当前的HINSTANCE?

Win32应用程序的HINSTANCE被传递给WinMain,但有没有其他的方式来确定当前的HINSTANCE(如果你不能说,我对于win32编程还是很新的!)? 我需要在库内部创build一个窗口(因为库是跨平台的),所以我不想传入它。

获取当前的光标位置

我想获得窗口的当前鼠标位置,并将其分配给2个variablesx和y (相对于窗口的坐标,而不是整个屏幕)。 我正在使用Win32和C ++。 还有一个快速的奖励问题:你将如何去隐藏光标/取消隐藏它?

如何删除Windows 7上的Java程序的标题栏和任务栏图标?

我已经写了一个小应用程序,禁用在C#中的Windows操作系统的所有窗口的标题栏和任务栏图标。 这里是代码: using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace IconKiller { class Program { /// Import the needed Windows-API functions: // … for enumerating all running desktop windows [DllImport("user32.dll")] static extern bool EnumDesktopWindows(IntPtr hDesktop, EnumDesktopWindowsDelegate lpfn, IntPtr lParam); private delegate bool EnumDesktopWindowsDelegate(IntPtr hWnd, int lParam); // … for loading an icon [DllImport("user32.dll")] static extern IntPtr […]

primefacesx86指令的alignment要求

Microsoft提供InterlockedCompareExchange函数来执行primefaces比较和交换操作。 还有一个_InterlockedCompareExchange 内部 。 在x86上,这些是使用cmpxchg指令来实现的。 但是,通过阅读这三种方法的文件,他们似乎并不同意alignment要求。 英特尔的参考手册没有提到任何关于alignment的内容(除了如果启用了alignment检查并产生未alignment的内存引用,则会产生exception) 我也查了一下lock前缀,具体说明了这一点 LOCK前缀的完整性不受内存字段alignment的影响。 (重点是我的) 所以英特尔似乎认为这种联合是无关紧要的。 无论如何,这个操作都是primefaces的。 _InterlockedCompareExchange内在的文档也没有说alignment,但是InterlockedCompareExchange 函数声明 该函数的参数必须在32位边界上alignment; 否则,该function在多处理器x86系统和任何非x86系统上将performance不可预知。 那么给了什么? InterlockedCompareExchange的alignment要求只是为了确保该函数即使在cmpxchg以前的cmpxchg指令不可用的情况下也能正常工作? 这似乎可能基于上述信息,但我想确定之前,我依靠它。 🙂 或者ISA需要alignment以保证primefaces性,而我只是在英特尔的参考手册中查找错误的地方?

如何检测真正的Windows版本?

我知道我可以调用GetVersionEx Win32 API函数来检索Windows版本。 在大多数情况下,返回值反映了我的Windows版本,但有时并不是这样。 如果用户在兼容层下运行我的应用程序,则GetVersionEx将不会报告实际版本,而是报告兼容性层执行的版本。 例如,如果我正在运行Vista并以“Windows NT 4”兼容模式执行我的程序,则GetVersionEx将不会返回6.0版本,而是4.0版本。 有没有办法绕过这种行为,并获得真正的Windows版本?

非法令牌右侧::

我有以下模板声明: template <typename T> void IterTable(int& rIdx, std::vector<double>& rVarVector, const std::vector<T>& aTable, const T aValue, T aLowerBound = -(std::numeric_limits<T>::max()), //illegal token on right side of '::' shows here bool aLeftOpen = true) const; 如上所述,在“ – (std :: numeric_limits :: max())”的行上抛出非法令牌错误。 我从一些旧的linux源代码中得到了这个代码,我试图在Windows上编译它。 任何想法是什么问题? 编辑:它也失败了使用min(),编译器输出是: Error 92 error C2589: '::' : illegal token on right side of […]

如何将char *转换为wchar_t *?

我试过这样的function,但不幸的是它不工作: const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t wc[cSize]; mbstowcs (wc, c, cSize); return wc; } 我的主要目标是能够在Unicode应用程序中集成普通string。 任何build议,你们可以提供非常感谢。