精华内容
下载资源
问答
  • C#窗口句柄

    2021-03-15 16:32:40
    例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口极小化为...

    在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口极小化为图标等。实际上许多 Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等,不仅仅局限于窗口函数。换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图、图标、内存块、光标、字体、菜单等。

    1. Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

    2. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

    3.   Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

    4.   Private Const WS_EX_LAYERED = &H80000

    5.   Private Const GWL_EXSTYLE = (-20)

    6.   Private Const LWA_ALPHA = &H2

    7.   Private Sub Form_Activate()

    8.   On Error Resume Next

    9.   For i = 0 To 150 Step 2.5

    10.   SetLayeredWindowAttributes Me.hwnd, 0, i, LWA_ALPHA

    11.   DoEvents

    12.   Next i

    13.   End Sub

    14.   Private Sub Form_load()

    15.   Dim rtn As Long

    16.   rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)

    17.   rtn = rtn Or WS_EX_LAYERED

    18.   SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn

    19.   SetLayeredWindowAttributes Me.hwnd, 0, 0, LWA_ALPHA

    20.   End Sub

     

    
     
    1. //获取窗口标题

    2. [DllImport("user32", SetLastError = true)]

    3. public static extern int GetWindowText(

    4. IntPtr hWnd,//窗口句柄

    5. StringBuilder lpString,//标题

    6. int nMaxCount //最大值

    7. );

    8.  
    9. //获取类的名字

    10. [DllImport("user32.dll")]

    11. private static extern int GetClassName(

    12. IntPtr hWnd,//句柄

    13. StringBuilder lpString, //类名

    14. int nMaxCount //最大值

    15. );

    16.  
    17. //根据坐标获取窗口句柄

    18. [DllImport("user32")]

    19. private static extern IntPtr WindowFromPoint(

    20. Point Point //坐标

    21. );

    22.  
    23. private void timer1_Tick(object sender, EventArgs e)

    24. {

    25. int x = Cursor.Position.X;

    26. int y = Cursor.Position.Y;

    27. Point p = new Point(x, y);

    28. IntPtr formHandle = WindowFromPoint(p);//得到窗口句柄

    29. StringBuilder title = new StringBuilder(256);

    30. GetWindowText(formHandle, title, title.Capacity);//得到窗口的标题

    31. StringBuilder className = new StringBuilder(256);

    32. GetClassName(formHandle, className, className.Capacity);//得到窗口的句柄

    33. this.textBox1.Text = title.ToString();

    34. this.textBox2.Text = formHandle.ToString();

    35. this.textBox3.Text = className.ToString();

    36. }

    展开全文
  • c#窗口句柄

    千次阅读 2013-08-25 13:29:53
    1、如何获得一个窗口句柄? 例如获取窗口PictureBox控件(其他控件也可以)的句柄, IntPtr handle = pictureBox.Handle; 2、注意:窗口创建和窗口创建完毕即有句柄完全是两回事!!! 窗口创建时,窗口并...

    1、如何获得一个窗口的句柄?
    例如获取窗口PictureBox控件(其他控件也可以)的句柄,
    IntPtr handle = pictureBox.Handle;

    2、注意:窗口创建和窗口创建完毕即有句柄完全是两回事!!!

    窗口创建时,窗口并没有创建句柄,只有Application.Run(form)或者form.Show()之后才有句柄,即窗口只有显示或者启动消息循环后才有句柄!如果创建form之后Form form = new Form(),主线程中调用form.Handle,如果句柄尚未创建,引用该属性将强制创建句柄,对系统内的逻辑将产生致命的影响。

    3、如何判断一个窗口的句柄创建完毕?

    利用IsHandleCreated 属性:此属性指示控件是否有与他关联的句柄,如果已经为控件分配了句柄,则为 true;否则为 false。

    4、一些属性:
    (1)、CreateControl :强制创建控件,包括句柄和任何子控件
    (2)、CreateHandle :为该控件创建句柄,

           通常,不应该直接调用 CreateHandle 方法。首选的方法是调用  方法,此方法在创建控件时强制为该控件及其子控件创建一个句柄。给继承者的说明 在派生类中重写 CreateHandle 时,请确保调用了基类的 CreateHandle 方法,以便确保已创建该句柄。
    (3)、DestroyHandle :毁坏与该控件关联的句柄
    (4)、FromChildHandle :检索包含指定句柄的控件
    (5)、FromHandle :返回当前与指定句柄关联的控件
    (6)、Handle :获取控件绑定到的窗口句柄,Handle 属性的值是 Windows HWND。如果句柄尚未创建,引用该属性将强制创建句柄。
    (7)、IsHandleCreated :指示控件是否有与他关联的句柄,如果已经为控件分配了句柄,则为 true;否则为 false。
    (8)、RecreateHandle :强制为控件重新创制句柄
    (9)、RecreatingHandle :指示当前是否在重创句柄

    5.注意:
    句柄是随机量,两次运行一般都会得到两次不同的结果

    展开全文
  • C# 窗口句柄查看器

    2009-07-01 14:11:28
    C# 窗口句柄查看器 可以查看目前在运行的窗体的句柄
  • c# 窗口句柄有关的常见问题 1、如何获得一个窗口的句柄?例如获取窗口PictureBox控件(其他控件也可以)的句柄,IntPtr handle = pictureBox.Handle; 2、注意:窗口创建和窗口创...

    c# 窗口句柄有关的常见问题

    1、如何获得一个窗口的句柄?
    例如获取窗口PictureBox控件(其他控件也可以)的句柄,
    IntPtr handle = pictureBox.Handle;

    2、注意:窗口创建和窗口创建完毕即有句柄完全是两回事!!!

    窗口创建时,窗口并没有创建句柄,只有Application.Run(form)或者form.Show()之后才有句柄,即窗口只有显示或者启动消息循环后才有句柄!如果创建form之后Form. form. = new Form(),主线程中调用form.Handle,如果句柄尚未创建,引用该属性将强制创建句柄,对系统内的逻辑将产生致命的影响。

    3、如何判断一个窗口的句柄创建完毕?

    利用IsHandleCreated 属性:此属性指示控件是否有与他关联的句柄,如果已经为控件分配了句柄,则为 true;否则为 false。

    4、一些属性:
    (1)、CreateControl :强制创建控件,包括句柄和任何子控件
    (2)、CreateHandle :为该控件创建句柄,

          通常,不应该直接调用 CreateHandle 方法。首选的方法是调用 CreateControl 方法,此方法在创建控件时强制为该控件及其子控件创建一个句柄。给继承者的说明 在派生类中重写 CreateHandle 时,请确保调用了基类的 CreateHandle 方法,以便确保已创建该句柄。
    (3)、DestroyHandle :毁坏与该控件关联的句柄
    (4)、FromChildHandle :检索包含指定句柄的控件
    (5)、FromHandle :返回当前与指定句柄关联的控件
    (6)、Handle :获取控件绑定到的窗口句柄,Handle 属性的值是 Windows HWND。如果句柄尚未创建,引用该属性将强制创建句柄。
    (7)、IsHandleCreated :指示控件是否有与他关联的句柄,如果已经为控件分配了句柄,则为 true;否则为 false。
    (8)、RecreateHandle :强制为控件重新创制句柄
    (9)、RecreatingHandle :指示当前是否在重创句柄

    5.注意:
    句柄是随机量,两次运行一般都会得到两次不同的结果

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23109131/viewspace-677240/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/23109131/viewspace-677240/

    展开全文
  • c# 窗口句柄问题 。

    千次阅读 2017-12-28 16:35:48
    1、如何获得一个窗口句柄?  例如获取窗口PictureBox控件(其他控件也可以)的句柄, [csharp] view plain copy IntPtr handle = pictureBox.Handle;  2、注意:窗口创建和窗口创建完毕即有...

     1、如何获得一个窗口的句柄?

        例如获取窗口PictureBox控件(其他控件也可以)的句柄,

    [csharp] view plain copy
    1. IntPtr handle = pictureBox.Handle;  

    2、注意:窗口创建和窗口创建完毕即有句柄完全是两回事!!!
        窗口创建时,窗口并没有创建句柄,只有Application.Run(form)或者form.Show()之后才有句柄,即窗口只有显示或者启动消息循环后才有句柄!如果创建form之后Form. form. = new Form(),主线程中调用form.Handle,如果句柄尚未创建,引用该属性将强制创建句柄,对系统内的逻辑将产生致命的影响。
        3、如何判断一个窗口的句柄创建完毕?
        利用IsHandleCreated 属性:此属性指示控件是否有与他关联的句柄,如果已经为控件分配了句柄,则为 true;否则为 false。
     4、一些属性:
        (1)、CreateControl :强制创建控件,包括句柄和任何子控件
        (2)、CreateHandle :为该控件创建句柄,
         通常,不应该直接调用 CreateHandle 方法。首选的方法是调用CreateControl方法,此方法在创建控件时强制为该控件及其子控件创建一个句柄。给继承者的说明 在派生类中重写 CreateHandle 时,请确保调用了基类的 CreateHandle 方法,以便确保已创建该句柄。
        (3)、DestroyHandle :毁坏与该控件关联的句柄
        (4)、FromChildHandle :检索包含指定句柄的控件
        (5)、FromHandle :返回当前与指定句柄关联的控件
        (6)、Handle :获取控件绑定到的窗口句柄,Handle 属性的值是 Windows HWND。如果句柄尚未创建,引用该属性将强制创建句柄。
        (7)、IsHandleCreated :指示控件是否有与他关联的句柄,如果已经为控件分配了句柄,则为 true;否则为 false。
        (8)、RecreateHandle :强制为控件重新创制句柄
        (9)、RecreatingHandle :指示当前是否在重创句柄
     5.注意:
        句柄是随机量,两次运行一般都会得到两次不同的结果




    C#用API如何遍历所有窗口句柄



    1.首先需要声明一个委托函数用于 Win32 API - EnumWindows 的回调函数:

    private delegate bool WNDENUMPROC(IntPtr hWnd, int lParam); //IntPtr hWnd用int也可以

    2.然后利用 C# 中的平台调用声明从 USER32.DLL 库中调用 API - EnumWindows,具体参数请参考 MSDN - Win32 API。

    [DllImport("user32.dll")]

    private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, int lParam);

    3.最后实例化委托,调用 EnumWindows。

    EnumWindows(delegate(IntPtr hWnd, int lParam) {……},0);

    private delegate bool WNDENUMPROC(IntPtr hWnd, int lParam);
    
    //用来遍历所有窗口 
           [DllImport("user32.dll")] 
            private static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, int lParam);
    
    //获取窗口Text 
            [DllImport("user32.dll")] 
            private static extern int GetWindowTextW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);
    
    //获取窗口类名 
            [DllImport("user32.dll")] 
            private static extern int GetClassNameW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount); 
    
    //自定义一个类,用来保存句柄信息,在遍历的时候,随便也用空上句柄来获取些信息,呵呵 
            public struct WindowInfo         
            { 
                public IntPtr hWnd; 
                public string szWindowName; 
                public string szClassName; 
            }
    
            public WindowInfo[] GetAllDesktopWindows() 
            { 
    //用来保存窗口对象 列表
                List<WindowInfo> wndList = new List<WindowInfo>();
    
                //enum all desktop windows 
                EnumWindows(delegate(IntPtr hWnd, int lParam) 
                { 
                    WindowInfo wnd = new WindowInfo(); 
                    StringBuilder sb = new StringBuilder(256);
    
                    //get hwnd 
                    wnd.hWnd = hWnd;
    
                    //get window name  
                    GetWindowTextW(hWnd, sb, sb.Capacity); 
                    wnd.szWindowName = sb.ToString();
    
                    //get window class 
                    GetClassNameW(hWnd, sb, sb.Capacity); 
                    wnd.szClassName = sb.ToString();
    
                    //add it into list 
                    wndList.Add(wnd); 
                    return true; 
                }, 0);
    
                return wndList.ToArray(); 
            }

     

    展开全文
  • C#窗口句柄问题

    2012-10-21 13:35:44
    1、如何获得一个窗口句柄?  例如获取窗口PictureBox控件(其他控件也可以)的句柄, [csharp] view plaincopyprint? IntPtr handle = pictureBox.Handle;  IntPtr handle = pictureBox....
  • 1、如何获得一个窗口句柄?例如获取窗口PictureBox控件(其他控件也可以)的句柄,IntPtr handle = pictureBox.Handle; 2、注意:窗口创建和窗口创建完毕即有句柄完全是两回事!!! 窗口创建时,窗口并没有创建...
  • c# 窗口句柄问题(转)

    万次阅读 多人点赞 2012-03-28 17:31:36
    1、如何获得一个窗口句柄?  例如获取窗口PictureBox控件(其他控件也可以)的句柄, IntPtr handle = pictureBox.Handle; 2、注意:窗口创建和窗口创建完毕即有句柄完全是两回事!!!  窗口创建时,窗口并...
  • 使用API获得窗口句柄和标题以及窗口类.
  • C#窗口句柄为例QQ

    千次阅读 2014-10-16 10:04:25
    获取句柄   using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; ...
  • 1、如何获得一个窗口句柄? 例如获取窗口PictureBox控件(其他控件也可以)的句柄, IntPtr handle = pictureBox.Handle; 2、注意:窗口创建和窗口创建完毕即有句柄完全是两回事!!! 窗口创建时,窗口并...
  • ref class mytextbox: public Form {  HWND getHwnd()  {  void* p = Handle.ToPointer();  HWND hwnd = (HWND)p;  return hwnd;  } } // c++/cli /clr ...HWND __declspec(dllexpo
  • 1、如何获得一个窗口句柄? 例如获取窗口PictureBox控件(其他控件也可以)的句柄, IntPtr handle = pictureBox.Handle; 2、注意:窗口创建和窗口创建完毕即有句柄完全是两回事!!! 窗口创建时,窗口...
  • 声明:引用的API函数...1. c#里FindWindow的用法 FindWindow() 函数的用法。要在C#里使用该API,写出FindWindow()函数的声明:  [DllImport("coredll.dll", EntryPoint = "FindWindow")] private extern static
  • 例如 qq窗口 , IE窗口 截出来的都是黑色的??why?
  • c#已知窗口句柄获取窗口标题的方法,让你通过已知的窗口句柄获取窗口标题
  • C#利用句柄操作窗口

    2016-03-14 10:20:10
    C#利用句柄操作窗口
  • C# 源码 窗口句柄查看器 C# 源码 窗口句柄查看器

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 749
精华内容 299
关键字:

c#窗口句柄

c# 订阅