c#如何获取窗体句柄


.dat的窗体的句柄无法获取到,.exe的窗体句柄我能获取的,谁知道.dat的为什么获取不到,有什么方法可以获取到呢

15 个解决方案

#1


看来好难啊,没人知道?

#2


什么意思,dat是什么东西

#3


楼上好多小红花,分我个嘛

#4


进程的名称不都是类似123.exe,jfsdf.exe这样的吗,我看见进程有一个gs.dat,想获取它,但是用winsapi的FindWindow(null,"gs");,是获取不到,其他的比例,FindWindow(null,"123");就可以获取到,为什么,dat怎么获取

#5


说不定人家没有窗口

#6


木窗体的 你咋获取啊 dat 貌似是视频文件 或加密数据文件哦

#7


有窗体,就是一个程序,但是他的进程就.dat的不知道为什么,很奇怪?用FindWindow(null,"gs");找不到,很神奇,难道就没人获取过dat进程?

#8


兄台,进程和窗口时两回事啊,FindWindow的两个参数都和进程名没关系啊

#9


可能是别人有意的自我保护

#10


枚举所有顶级窗口,然后通过进程ID来确定那个窗口是这个进程的

#11


那可能是我理解错了,那就不是进程,我就是要获取这个窗口,那也获取不到啊,9楼,说的有可能,可能是保护,那他怎么屏蔽的呢?

#12


msdn EnumWindows

#13


10楼,能说说具体怎么操作吗啊?

#14


System.Diagnostics.Process.MainWindowHandle属性试试



internal class MainWindowFinder
{
  // Fields
  private IntPtr bestHandle;
  private int processId;

  // Methods
  private bool EnumWindowsCallback(IntPtr handle, IntPtr extraParameter)
  {
    int num;
    NativeMethods.GetWindowThreadProcessId(new HandleRef(this, handle), out num);
    if ((num == this.processId) && this.IsMainWindow(handle))
    {
      this.bestHandle = handle;
      return false;
    }
    return true;
  }

  public IntPtr FindMainWindow(int processId)
  {
    this.bestHandle = IntPtr.Zero;
    this.processId = processId;
    NativeMethods.EnumThreadWindowsCallback callback = new NativeMethods.EnumThreadWindowsCallback(this.EnumWindowsCallback);
    NativeMethods.EnumWindows(callback, IntPtr.Zero);
    GC.KeepAlive(callback);
    return this.bestHandle;
  }

  private bool IsMainWindow(IntPtr handle)
  {
    return (!(NativeMethods.GetWindow(new HandleRef(this, handle), 4) != IntPtr.Zero) && NativeMethods.IsWindowVisible(new HandleRef(this, handle)));
  }
}

#15


你就是神啊 晕
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告