小编pul*_*van的帖子

当DPI设置为125-150%时,WPF的工具窗口中缺少标题

当WindowStyle ="ToolWindow"和ResizeMode ="NoResize"且系统DPI为125-150%时,标题栏上的文本消失.我正在运行Windows 7和WPF 3.5任何想法为什么会发生这种情况?

wpf

13
推荐指数
1
解决办法
617
查看次数

设置透明背景Win32

我想要做的很简单,但似乎没有很多信息.基本上我有一个普通的非透明父窗口,我想在父窗口中放置一个子窗口(它有自己的非透明控件).因此,我唯一要做的就是将子窗口的背景画笔设置为透明,但它仍然会绘制白色背景.尝试使用WS_EX_LAYERED样式和SetLayeredWindowAttributes,但它使子窗口不可见.

windows winapi

9
推荐指数
1
解决办法
3444
查看次数

从内存转储中查找消息队列中的消息计数

我知道在任何给定时间使用任何类型的Win API调用都无法确定线程队列中有多少消息.我有一个不起作用的应用程序,因为PostMessage有时失败(可能是由于队列增长到10000,虽然我不知道它怎么会变得这么大).这是一个间歇性的问题,我发生了几次内存转储.显然队列必须在某个地方,本文解释了如何获取它http://moyix.blogspot.com/2008_09_01_archive.html

Windows中的每个线程(由_ETHREAD结构表示)在其线程控制块(或Tcb,即_KTHREAD)中都有一个名为Win32Thread的字段.该字段指向数据结构_W32THREAD,该结构在Windows图形子系统win32k.sys的内核模式部分中定义.你可以通过在WinDbg中发出"dt win32k!_W32THREAD"来检查_W32THREAD结构.但是,如果你开始逆向工程win32k.sys,你会很快发现那里给出的信息远未完成.事实上,_W32THREAD是一个更大的数据结构,其中包括有关当前桌面,键盘布局,已安装的窗口挂钩以及最重要的是输入消息队列的信息.在Windows XP SP2中,消息队列位于_W32THREAD的偏移量0xD0处,如下所示:

typedef struct _MSG_QUEUE  {   PMSG_QUEUE_ENTRY Head; 
PMSG_QUEUE_ENTRY Tail;  unsigned long NumberOfMessages;   } MSG_QUEUE;
Run Code Online (Sandbox Code Playgroud)

基本上我正在尝试找到一个指针MSG_QUEUE(这将给我NumberOfMessages,加上我可以从Head开始枚举它们).但是看起来我看不到通过分析内存转储找到_ETHREAD,_KTHREAD和_W32THREAD中的任何一个的指针.它们究竟存储在哪里,是否处于存储空间?我必须在内核模式下运行吗?我是否需要为win32k.sys加载符号?还有什么我需要做的吗?谢谢.

c++ debugging winapi windbg

5
推荐指数
1
解决办法
1020
查看次数

Windows上的QT高DPI支持

根据这里的文档http://doc.qt.io/qt-5/highdpi.htmlQT 5.4+引入了高DPI支持.但是,要么我缺少一些基本的东西,要么目前的支持仍处于非常早期阶段.我正在写一个全新的应用程序,所以我有机会从头开始做.我知道我必须使用布局而不是固定定位等,但总会出现我需要指定的情况,例如控件的最小/最大尺寸.我可以在编辑器中指定它们,但这些是设备像素.因此,如果我将Windows设置更改为使用150%DPI,则编辑器中的最小值/最大值将会太小.当然,我可以获得该比率并调整代码中的所有必需值,但是如果我必须手动完成所有操作,QT会给我什么样的高DPI支持?我的意思是前QT 5.4有什么不同?

然后一个有趣的是QT_DEVICE_PIXEL_RATIO环境变量.它完全符合我的需要,它将编辑器中设置的所有像素乘以一个因子.但为什么它是环境变量而不是每个应用程序设置?为什么它只支持2,3等的整数值,因为我们知道Windows有125,150%等设置,为什么它不能自动读取Windows设置并将自己设置为该值?

winapi qt dpi highdpi qtwidgets

5
推荐指数
1
解决办法
1859
查看次数

在WinXP/Vista上运行使用Win7功能的应用程序

我正在开发一个使用WinXP上没有的一些高级Windows 7功能的应用程序.假设我想使用ChangeWindowMessageFilterEx(或自Win7以来添加的任何其他调用),该应用程序编译并在Win7上正常工作.但是在XP上我得到"程序入口点ChangeWindowMessageFilterEx无法在动态链接库USER32.dll中找到"甚至在应用程序启动之前.

有没有办法在XP上运行我的应用程序而不编译两个不同的版本?

c++ winapi visual-studio visual-c++ windows-7

4
推荐指数
1
解决办法
852
查看次数

使用windbg在整个代码中搜索特定的调用指令

是否可以搜索整个可执行内存空间以查找调用特定方法的所有位置?例如,我想找到调用MyApplcation!MyFunction的所有函数.使用"s"命令搜索特定的optcode不是一个选项,因为在我的情况下,call命令使用相对代码路径,因此optcode根据调用指令本身的位置而不同.

windbg

4
推荐指数
1
解决办法
683
查看次数

创建具有特定格式的位图以反转/镜像它

我正在使用以下方法来创建反转位图:

HBITMAP CreateMirroredBitmap( HBITMAP hbmOrig)
{
    HDC hdc, hdcMem1, hdcMem2;
    HBITMAP hbm = NULL, hOld_bm1, hOld_bm2;
    BITMAP bm;
    if (!hbmOrig)
        return NULL;
    if (!GetObject(hbmOrig, sizeof(BITMAP), &bm))
        return NULL;

    // Grab the screen DC.
    hdc = GetDC(NULL);
    if (hdc)
    {
        hdcMem1 = CreateCompatibleDC(hdc);
        if (!hdcMem1)
        {
            ReleaseDC(NULL, hdc);
            return NULL;
        }
        hdcMem2 = CreateCompatibleDC(hdc);
        if (!hdcMem2)
        {
            DeleteDC(hdcMem1);
            ReleaseDC(NULL, hdc);
            return NULL;
        }
        hbm = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
        if (!hbm)
        {
            ReleaseDC(NULL, hdc);
            DeleteDC(hdcMem1);
            DeleteDC(hdcMem2);
            return NULL;
        }
        // Flip the …
Run Code Online (Sandbox Code Playgroud)

c++ winapi visual-c++

1
推荐指数
1
解决办法
468
查看次数

如何让 dbghelp 从自定义符号存储加载符号?

SymInitialize 和 SymFromAddr 方法有没有办法从自定义符号存储中自动加载符号。我正在尝试使用 SymFromAddr() 将地址解析为可读的函数名称。如果我在本地存储了给定模块的符号,它似乎工作正常,但是我希望它从给定给 SymInitialize 的路径中自动下载它们,就像 WinDbg 那样。我这样调用 SymInitialize:

SymInitialize(procHandle, "SRV*c:\\symbols*http://msdl.microsoft.com/download/symbols;http://mycustomstore.com/symbols", TRUE);
Run Code Online (Sandbox Code Playgroud)

SymFromAddr 返回错误 487“尝试访问无效地址”。因为它找不到符号,因为它甚至从未尝试下载它。

有没有办法强制下载它们?

winapi windbg dbghelp

1
推荐指数
1
解决办法
632
查看次数