精华内容
下载资源
问答
  • qt获取hwnd
    万次阅读
    2020-06-22 19:05:10

    1. 句柄是什么

    大家可以看这篇文章,讲的比较详细。https://blog.csdn.net/wenzhou1219/article/details/17659485

    2. Qt如何获取句柄

    winId()函数。(Qt5里面)

    如果想获取Qt窗口的句柄用于显示图片;且看我操作

    HWND m_hwndDisplay = (HWND)this->winId();//获取当前this窗口的句柄
    MyCamera->Display(m_hwndDisplay);//调用你camera的display方法进行显示
    

    当然这样会遮住窗口的其他控件(比如按钮);我们一般也要在窗口中添加其他的一些控件。

    问题来了:能不能获取窗口中某个控件的句柄,然后进行使用呢?答案是可以的。

    举个例子:我在窗口中放入一个QFrame控件名字叫frame

    使用如下代码

    HWND m_hwndDisplay = (HWND)ui.frame->winId();//获取当前this窗口的句柄
    MyCamera->Display(m_hwndDisplay);//调用你camera的display方法进行显示

    这样即可。

     

    更多相关内容
  • I am trying to convert a Qt4 Application to Qt5.The only thing I couldn't figure out is how to get the HWND of a Widget.The program uses EcWin7 to show the progress on the taskbar icon on win 7+ but e...

    I am trying to convert a Qt4 Application to Qt5.

    The only thing I couldn't figure out is how to get the HWND of a Widget.

    The program uses EcWin7 to show the progress on the taskbar icon on win 7+ but expects a HWND. The lib itself seems to compile fine after changing *Q_WS_WIN* to *Q_OS_WIN*)

    In Qt4 on Windows WId was just a typedef for HWND, so this was no problem.

    In Qt5 this is not the case anymore.

    I found some mailing list posting that could give a clue but it seems QPlatformNativeInterface is not part of the public API of Qt5 anymore.

    The program calls EcWin7.init(this->winId()); and I need to some way to convert this ID into the HWND id or some other way to get this.

    解决方案

    In Qt5 winEvent was replaced by nativeEvent:

    bool winEvent(MSG* pMsg, long* result)

    is now

    bool nativeEvent(const QByteArray & eventType, void * message, long *result)

    And in EcWin7::winEvent you have to cast void to MSG:

    bool EcWin7::winEvent(void * message, long * result)

    {

    MSG* msg = reinterpret_cast(message);

    if (msg->message == mTaskbarMessageId)

    {

    ...

    I was able to get the application to work! Just replace:

    mWindowId = wid;

    with

    mWindowId = (HWND)wid;

    展开全文
  • 由于之前的项目用到了海康威视网络摄像头,调用的是海康的SDK进行集成,预览接口需要传入HWND类型的控件句柄,在QtWidget下获取句柄很简单,因为QWidgetItem继承类对象都有 winId()方法,通过(HWND)this->label->...
  • QT获取Windows系统所有窗口句柄

    千次阅读 2020-12-19 14:25:47
    #include #include #pragma comment(lib,"user32.lib")/* 回调函数,用于捕获进程 */BOOL MyEnumProc(HWND hwnd, LPARAM param){LPWSTR lpString = (LPWSTR)malloc(sizeof(WCHAR) * MAX_PATH);if (IsWindow(hwnd) &...

    #include

    #include

    #pragma comment(lib,"user32.lib")

    /* 回调函数,用于捕获进程 */

    BOOL MyEnumProc(HWND hwnd, LPARAM param)

    {

    LPWSTR lpString = (LPWSTR)malloc(sizeof(WCHAR) * MAX_PATH);

    if (IsWindow(hwnd) &&

    IsWindowEnabled(hwnd) &&

    IsWindowVisible(hwnd))

    {

    if (GetWindowTextW(hwnd, lpString, MAX_PATH) > 0) {

    qDebug() << QString::fromStdWString(lpString); // 打印出有标题的窗口

    }

    }

    free(lpString);

    return TRUE;

    }

    int main(int argc, char *argv[])

    {

    /* 枚举窗口的所有进程 */

    EnumWindows(MyEnumProc, 0);

    return 0;

    }

    句柄详解,什么是句柄?句柄有什么用?

    这里需要说明:

    1.这里将句柄所能标识的所有东西(如窗口、文件、画笔等)统称为“对象”。

    2.图中一个小横框表示一定大小的内存区域,并不代表一个字节,如标有0X00000AC6的横框表示4个字节。

    3.图解的目的是为了直观易懂,所以不一定与源码完全对应,会有一定的简化。

    让我们先看图,再解释。

    其中,图1是程序运行到某时刻时的内存快照,图2是程序往后运行到另一时刻时的内存快照。红色部分标出了两次的变化。

    简单解释:

    Windows是一个以虚拟内存为基础的操作系统,很多时候,进程的代码和数据并不全部装入内存,进程的某一段装入内存后,还可能被换出到外存,当再次需要时,再装入内存。两次装入的地址绝大多数情况下是不一样的。也就是说,同一对象在内存中的地址会变化。(对于虚拟内存不是很了解的读者,可以参考有关操作系统方面的书籍)那么,程序怎么才能准确地访问到对象呢?为了解决这个问题,Windows引入了句柄。

    系统为每个进程在内存中分配一定的区域,用来存放各个句柄,即一个个32位无符号整型值(32位操作系统中)。每个32位无符号整型值相当于一个指针,指向内存中的另一个区域(我们不妨称之为区域A)。而区域A中存放的正是对象在内存中的地址。当对象在内存中的位置发生变化时,区域A的值被更新,变为当前时刻对象在内存中的地址,而在这个过程中,区域A的位置以及对应句柄的值是不发生变化的。这种机制,用一种形象的说法可以表述为:有一个固定的地址(句柄),指向一个固定的位置(区域A),而区域A中的值可以动态地变化,它时刻记录着当前时刻对象在内存中的地址。这样,无论对象的位置在内存中如何变化,只要我们掌握了句柄的值,就可以找到区域A,进而找到该对象。而句柄的值在程序本次运行期间是绝对不变的,我们(即系统)当然可以掌握它。这就是以不变应万变,按图索骥,顺藤摸瓜。

    所以,我们可以这样理解Windows句柄:

    数值上,是一个32位无符号整型值(32位系统下);逻辑上,相当于指针的指针;形象理解上,是Windows中各个对象的一个唯一的、固定不变的ID;作用上,Windows使用句柄来标识诸如窗口、位图、画笔等对象,并通过句柄找到这些对象。

    下面,关于句柄,再交代一些关键性细节:

    1.所谓“唯一”、“不变”是指在程序的一次运行中。如果本次运行完,关闭程序,再次启动程序运行,那么这次运行中,同一对象的句柄的值和上次运行时比较,一般是不一样的。

    其实这理解起来也很自然,所谓“一把归一把,这把是这把,那把是那把,两者不相干”(“把”是形象的说法,就像打牌一样,这里指程序的一次运行)。

    2.句柄是对象生成时系统指定的,属性是只读的,程序员不能修改句柄。

    3.不同的系统中,句柄的大小(字节数)是不同的,可以使用sizeof()来计算句柄的大小。

    4.通过句柄,程序员只能调用系统提供的服务(即API调用),不能像使用指针那样,做其它的事。

    写在后面:

    到此为止,有关Windows句柄就简单介绍到这里。需要说明的是,本文是面向初学者的,旨在让读者对句柄有一个完整而清晰的认知,既要避免知其然而不知其所以然的茫然困惑,又要避免深入源码的艰难晦涩。因此,本文并不能做到绝对的直达本质,同时也可能在个别细节上与真实情况稍有出入,但在下认为这并不贻害初学者对句柄的认识。因为对某一知识的认知,从几乎一无所知或是一知半解到“精通”,往往需要更多新知识的补充,短时间内很难达到,在不影响知识的使用的前提下,先把握整体,在逐步深入细节,不失为一个明智的选择。想进一步深入理解Windows句柄的读者,可以看在下的下一篇文章《源码剖析——深入Windows句柄本质》。

    作者:

    喜欢围棋和编程。查看的所有文章

    展开全文
  • C++/Qt获取屏幕尺寸和放大比例

    直接上代码

    #include "QtWidgetsApplication4.h"
    #include <Windows.h>
    #include <qdebug.h>
    #include <qscreen.h>
    QtWidgetsApplication4::QtWidgetsApplication4(QWidget *parent)
        : QMainWindow(parent)
    {
        ui.setupUi(this);
    	///windows函数获取 start
    	//HWND hwd = ::GetDesktopWindow();
    	//HDC hdc = ::GetDC(hwd);
    	//int nWidth1 = GetDeviceCaps(hdc, DESKTOPHORZRES);	//屏幕宽
    	//int nHeight1 = GetDeviceCaps(hdc, DESKTOPVERTRES);	//屏幕高
    	HDC hd = GetDC(NULL);
    	int dotPix1 = GetDeviceCaps(hd, LOGPIXELSX);
    	int dotPix2 = GetDeviceCaps(hd, LOGPIXELSY);	//获取放大比例
    	///windows函数获取 end/
    
    
    	//Qt///
    	QScreen *screen = qApp->primaryScreen();
    	int nWidth2 = screen->size().width();			//屏幕宽
    	int nHeight2 = screen->size().height();			//屏幕高
    	qreal dpiVal1 = screen->logicalDotsPerInch();	///Qt获取放大比例
    	qreal dpiVal2 = screen->logicalDotsPerInchX();	///Qt获取放大比例
    	
    }
    

    屏幕放大倍数 100% 125% 150% 200%,对应的dpiVal值为:96、 120、 144 、192。

    即上面变量dotPix1、dotPix2、dotPix3、dotPix4获取的值都是96 120 144 192其中的一个值。

    函数介绍

    1、logicalDotsPerInchX : const qreal

    This property holds the number of logical dots or pixels per inch in the horizontal direction

    This value is used to convert font point sizes to pixel sizes.

     此属性保存每英寸的逻辑点数或像素数。 此值可用于将字体点大小转换为像素大小。这是一个方便的属性,它只是logicalDotsPerInchX 和logicalDotsPerInchY 属性的平均值。

    2、logicalDotsPerInch : const qreal

    This property holds the number of logical dots or pixels per inch

    This value can be used to convert font point sizes to pixel sizes.

    This is a convenience property that's simply the average of the logicalDotsPerInchX and logicalDotsPerInchY properties.

    此属性保存每英寸的逻辑点数或像素数 此值可用于将字体点大小转换为像素大小。 这是一个方便属性,它只是logicalDotsPerInchX 和logicalDotsPerInchY 属性的平均值。

    展开全文
  • QT获取控件句柄

    千次阅读 2019-09-19 10:29:23
    HWND hhwnd=(HWND)lable->winId();
  • //Qt //方法1 WId ir = (WId)FindWindow(NULL, L"Target"); className *pM = (className*)find(ir); pM->method(); //方法2 className*pM; foreach(QWidget *w, qApp->topLevelWidgets())
  • 新建一个Qt Widgets Application mainwindow.cpp如下: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include <Windows.h> #pragma comment (lib, "User32.lib") char m_...
  • VC中获取窗口句柄的各种方法

    千次阅读 2021-02-11 07:23:25
    AfxGetMainWndAfxGetMainWnd获取自身窗口句柄HWND hWnd = AfxGetMainWnd()->m_hWnd;GetTopWindow函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的...
  • QT及LINUX操作系统窗口

    2013-02-16 22:31:17
    QT及LINUX操作系统窗口,作者:倪继利。 超星格式文档。
  • qt 获取窗口句柄

    万次阅读 2017-02-10 23:13:13
    HWND appwnd; appwnd = (HWND)w.winId();...QString ClassName("Qt5QWindowIcon"); QString AppName = QStringLiteral("GG"); LPCWSTR app = reinterpret_cast(ClassName.data()); LPCWSTR appCaption = reinterpret_
  • 获取到qml窗口句柄的方法,以及怎样将QWidget嵌入到获取到的qml窗口中
  • //通过pid获取窗口句柄 HWND GetHwndByPid(DWORD dwProcessID) { HWND h = GetTopWindow(0); HWND retHwnd = NULL; while (h) { DWORD pid = 0; DWORD dwTheardId = GetWindowThreadProcessId(h, &pid); ...
  • qt获取窗口句柄来显示图片

    千次阅读 2017-10-09 12:24:49
    winId() 函数能够返回 当前Widget的HWND句柄,我想通过这个窗口句柄实现额外的操作,比如绘制图像或者将句柄传递给第三方功能库操作。 下面的程序是我的Demo程序,我想在QLable上通过HWND句柄绘制一条线,但结果是...
  • 通过HWND获取icon图标 QT += winextras #include <QtWin> / // // // // // // // // // // // // // // // // // // 小图标 HICON smallIcon; if (! SendMessageTimeout (pWnd, WM_GETICON , 0 , ...
  • QT获取窗口句柄

    千次阅读 2019-01-01 02:24:00
    winId()函数 SendMessage((HWND)(this->dlg->winId()),WM_SEND_MY_MESSAGE,0,0); 转载于:https://www.cnblogs.com/jadeshu/p/10663580.html
  • 在某些业务需求下,Qt的程序需要感知到windows睡眠和亮屏时状态 以便程序做对应的处理动作。好在Qt为我们提供了QAbstractNativeEventFilter类 来捕获对应的windows事件。 一、步骤如下: 1、主界面MyMainWindow类...
  • C++QT获取其他exe的edit控件id并且设置edit内容找到exe的窗口句柄1.知道exe的窗口类名已或者标题名字2.不知道窗口名字类等等,只知道exe的启动名字qt如何使用 找到exe的窗口句柄 找到窗口的句柄有很多种方法,可以...
  • 不然无法在qt的nativeEvent中获取到锁屏/解锁事件 可以在qt窗口的构造函数中调用如下代码: bool ret = WTSRegisterSessionNotification((HWND)this->winId(), NOTIFY_FOR_THIS_SESSION); 之后我们需要重载...
  • Qt选择文件后获取路径并打开

    千次阅读 2020-12-30 10:23:03
    qt菜鸟记录贴 包含头文件: #include <QFile> #include <QFileDialog> 代码: //点击按钮后打开文件选择 void MainWindow::on_pushButton_clicked() { //打开文件选择控件 QString fileName; ...
  • Qt 5 中 winId 转 HWND

    万次阅读 2015-01-26 13:31:05
    实际测试中,很简单,就是强制转换就行。 HWND hwnd = (HWND)widget->winId(); 备注下,希望有用到的,也有个参考。
  • 下面就是获取窗口句柄的基本API。 获取Windows下所有窗口的句柄,窗口标题,窗口类型等: ...static bool check_window_valid(HWND window, enum window_search_mode mode) { DWORD styles, ...
  • 项目需要将一个外部软件嵌入自己编写的qt界面,类似于将外部程序当作自己软件的一个插件,以起到集成的目的。笔者这里用电脑自带的计算器为例。 传统做法: 1)首先打开需要的外部程序; 2)通过spy+获取的外部程序...
  • HWND pWnd = ::FindWindowExA(NULL,NULL,"目标class","目标caption名字".toLocal8Bit().data()); if(pWnd ==0){ qDebug()<<"not windows h"; }else{ //窗口置顶 SetForegroundWindow(pWnd); SetFocus(pWnd...
  • 首先说明,网上找了很多代码资源,运用在QT项目中都不能找到该窗口的句柄,即FindWindow返回的是0,后面在某讨论里面看见VS的编码为unicode,才解决了这个问题。 编译环境为QT 5.15.2 + vs2019 32bit,其他环境没试...
  • 在编写Windows的应用程序时,我们有时不可避免地要与Windows平台固有的Win32 API打交道,但是Win32 API里面常常用到的HWND等诸多句柄QT并没有。QT作为一款优秀的跨平台GUI库,不可能未作考虑,那么需要互相转换的...
  • Windows -- Qt 利用RAWINPUT获取触摸板信息
  • namespacewindowsApiAcitonSimulation.Win32Action {public classWindowsApiHelp {#region windows api 方法 /// ///根据类名和窗口名获取句柄/// /// /// /// [DllImport("user32.dll")]public static extern ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,394
精华内容 557
关键字:

qt获取hwnd