微软官方MSDN原版Win10系统下载

现在位置: 首页  > 系统教程  > 系统帮助

c如何获取窗口句柄

时间:2024-11-23 09:23:07   

大家好,今天Win10系统之家小编给大家分享「c如何获取窗口句柄」的知识,如果能碰巧解决你现在面临的问题,记得收藏本站或分享给你的好友们哟~,现在开始吧!

c语言学习宝典最新版系列软件最新版本下载

1.怎么获取线程外 窗口里的控件句柄


  但是box的insertItem()函数不起作用。
我的线程放在了Global类里,现在需要在线程里对别的窗口内的控件进行操作。
------解决方案--------------------------------------------------------我建议的做法是用FindWindowEx取窗口句柄,然后再用GetDlgItem之类的取控件句柄,通过API进行操作。
------解决方案--------------------------------------------------------线程最好不要对别的窗口内的控件进行操作,而是发送消息给窗口,让主线程来操作界面。
还有你说不起作用可能是你未强制重画,试试插入项后调用一下
CListCtrl::RedrawItems 或
Cwnd::UpdateWindow
------解决方案--------------------------------------------------------线程最好不要对别的窗口内的控件进行操作,而是发送消息给窗口,让主线程来操作界面。
还有你说不起作用可能是你未强制重画,试试插入项后调用一下
CListCtrl::RedrawItems 或
Cwnd::UpdateWindow
------解决方案--------------------------------------------------------同上,线程里就不要操作界面上的控件了,最好发送消息给主窗口,让主窗口去更新界面上的控件
------解决方案--------------------------------------------------------线程里不要操作界面上的控件,也不要对别的窗口内的控件进行操作最好发送消息给主窗口,让主窗口去更新界面上的控件
还有你说不起作用可能是你未强制重画,试试插入项后调用一下

2.C#怎样获得窗口句柄?


  一个网上的例子
c# 获取鼠标处窗口句柄,程序嵌入桌面
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsApplication1
{
 public partial class Form1 : Form
 {
 public Form1()
 {
 InitializeComponent();
 }
 [DllImport("user32.dll", EntryPoint = "FindWindow")]
 public static extern int FindWindow(
 string lpClassName,
 string lpWindowName
 );
 [DllImport("user32.dll", EntryPoint = "GetWindow")]//获取窗体句柄,hwnd为源窗口句柄
 /*wCmd指定结果窗口与源窗口的关系,它们建立在下述常数基础上:
 GW_CHILD
 寻找源窗口的第一个子窗口
 GW_HWNDFIRST
 为一个源子窗口寻找第一个兄弟(同级)窗口,或寻找第一个顶级窗口
 GW_HWNDLAST
 为一个源子窗口寻找最后一个兄弟(同级)窗口,或寻找最后一个顶级窗口
 GW_HWNDNEXT
 为源窗口寻找下一个兄弟窗口
 GW_HWNDPREV
 为源窗口寻找前一个兄弟窗口
 GW_OWNER
 寻找窗口的所有者
 */
 public static extern int GetWindow(
 int hwnd,
 int wCmd
 );
 [DllImport("user32.dll", EntryPoint = "SetParent")]//设置父窗体
 public static extern int SetParent(
 int hWndChild,
 int hWndNewParent
 );
 [DllImport("user32.dll", EntryPoint = "GetCursorPos")]//获取鼠标坐标
 public static extern int GetCursorPos(
 ref POINTAPI lpPoint
 );
 [StructLayout(LayoutKind.Sequential)]//定义与API相兼容结构体,实际上是一种内存转换
 public struct POINTAPI
 {
 public int X;
 public int Y;
 }
 [DllImport("user32.dll", EntryPoint = "WindowFromPoint")]//指定坐标处窗体句柄
 public static extern int WindowFromPoint(
 int xPoint,
 int yPoint
 );
 private void timer1_Tick(object sender, EventArgs e)
 {
 POINTAPI point = new POINTAPI();//必须用与之相兼容的结构体,类也可以
 
 GetCursorPos(ref point);//获取当前鼠标坐标
 int hwnd = WindowFromPoint(point.X, point.Y);//获取指定坐标处窗口的句柄
 this.label1.Text =point.X.ToString() + ":" + point.Y.ToString() + "-" + hwnd.ToString();//显示效果,此时窗口已经嵌入桌面了
 }
 const int GW_CHILD = 5;//定义窗体关系
 private void Form1_Load(object sender, EventArgs e)
 {
 int hDesktop = FindWindow("Progman", null);//获取系统句柄
 hDesktop = GetWindow(hDesktop, GW_CHILD);//获取其子窗口句柄,就是桌面的句柄
 SetParent((int)this.Handle, hDesktop);//设置父窗体,第一个为要被设置的窗口,第二个参数为指定其父窗口句柄
 }
 }
}

以上就是关于「c如何获取窗口句柄」的全部内容,本文讲解到这里啦,希望对大家有所帮助。如果你还想了解更多这方面的信息,记得收藏关注本站~

Win10系统之家www.ghost580.net文★章,转载请注明出处!】

相关文章

  • 如何把c盘扩大

    如何把c盘扩大

    1.怎么把电脑的c盘扩大使用Vista/windows7自带分区工具,可以做到硬盘无损重新分区分区。1、在桌面右键点击“计算机”-“管理”,打开的计算机管理窗口,在打开的计算机管理窗口的左侧,鼠标左键单击选“磁盘管理”打开磁盘管理...
  • 如何解决win7 c盘空间突然变小

    如何解决win7 c盘空间突然变小

    1.最近C盘的剩余空间突然变小了,怎么办?可以这样释放一些C盘空间:1.打开“我的电脑”-“工具”-“文件夹选项”-“查看”-在“显示所有文件和文件夹”选项前打勾-再按“确定”2.删除以下文件夹中的内容:C:\DocumentsandSettings\...
  • 电脑总是弹出交互式服务检测窗口如何解决

    电脑总是弹出交互式服务检测窗口如何解决

    1.如何解决电脑总是弹出交互式服务检测的问题生活中很多人使用电脑,可有些人不知道如何解决电脑总是弹出交互式服务检测的问题,下面快来一起看一看吧。工具/原料演示系统:Windows7系统版本号:build7601方法/步骤1、Win...
  • c语言是如何体现结构思想的

    c语言是如何体现结构思想的

    1.c语言中"结构化程序设计方法”的基本思想和规则C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的...