QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1108|回复: 13

帮忙看一下这个程序哪里有错,谢谢

[复制链接]
发表于 2004-6-10 16:07:44 | 显示全部楼层 |阅读模式
[code:1]
#include <X11/Intrinsic.h>
#include <stdio.h>
Window FindWindow(Display* pDisplay, Window start, char* name)
{
  Status stat;
  int i,num;
  Window w,root,parent;
  Window* children = NULL;
  char* title;
  if(XFetchName(pDisplay, start, &title) == 1)
  {
    if (strcmp(name, title)==0)
    {
      XFree(title);
      return start;
    }
    XFree(title);
  }
  stat = XQueryTree(pDisplay, start, &root, &parent, &children, &num);
  if (stat == 1)
  {
    /* search each child window for a match: */
    for (i = num; i > 0; i--)
    {
      if (XFetchName(pDisplay, start, &title )==1)
      {
        if (strcmp(name, title)==0)
        {
          /*found it*/
          XFree(title);
          return start;
        }
        XFree(title);
      }
    }
    /*search the descendents of each child for a match:*/
    for (i = num; i > 0; i--)
    {
      w == FindWindow(pDisplay, children[i], name);
      if (w != 0)
      {
        XFree(children);
        return w;
      }
    }
    if (children != NULL)
    {
      XFree(children);
    }
  }
  return 0;
}
int main(int argc, char* argv[])
{
//  Widget toplevel = XtInitialize(argv[0], "Get_URL", NULL, 0, &argc, argv);
//  Display *dpy = XtDisplay(toplevel);
  Display *dpy = XOpenDisplay(0);
  FindWindow(dpy,DefaultRootWindow(dpy),"rdesktop");
  return 1;
}
    [/code:1]
这个程序是我用来找rdesktop窗口的,编译运行后出现如下错误:
X Error of failed request:  BadWindow (invalid Window parameter)
  Major opcode of failed request:  20 (X_GetProperty)
  Resource id in failed request:  0x211
  Serial number of failed request:  682
  Current serial number in output stream:  682
应该怎么改啊?
发表于 2004-6-10 16:17:50 | 显示全部楼层
说说你想完成什么功能?
回复

使用道具 举报

 楼主| 发表于 2004-6-10 16:20:59 | 显示全部楼层
这个程序是我用来找某个程序的,像上面那样是查找rdesktop的,有没有找到我还没有做判断。
回复

使用道具 举报

发表于 2004-6-10 16:33:42 | 显示全部楼层
不懂 ,等另三位版猪来看看吧! 不过我看提示是否表示 没有找到你要的那些资源?
回复

使用道具 举报

 楼主| 发表于 2004-6-10 16:36:19 | 显示全部楼层
我刚才调了一下,是在主窗口的第一个子窗口的XFetchName函数调用时出的这个错
回复

使用道具 举报

 楼主| 发表于 2004-6-10 17:58:27 | 显示全部楼层
刚才的程序错误我找到了,改正后的程序如下:
[code:1]
#include <X11/Intrinsic.h>
#include <stdio.h>
Window FindWindow(Display* pDisplay, Window start, char* name)
{
  Status stat;
  int i,num;
  Window w,root,parent;
  Window* children = NULL;
  char* title;
  if(XFetchName(pDisplay, start, &title) == 1)
  {
    if (strcmp(name, title)==0)
    {
      XFree(title);
      return start;
    }
    XFree(title);
  }
  stat = XQueryTree(pDisplay, start, &root, &parent, &children, &num);
  if (stat == 1)
  {
    /* search each child window for a match: */
    for (i = 0; i < num; i++)
    {
      if (XFetchName(pDisplay, start, &title )==1)
      {
        if (strcmp(name, title)==0)
        {
          /*found it*/
          XFree(title);
          return start;
        }
        XFree(title);
      }
    }
    /*search the descendents of each child for a match:*/
    for (i = 0; i < num; i++)
    {
      w = FindWindow(pDisplay, children[i], name);
      if (w != 0)
      {
        XFree(children);
        return w;
      }
    }
    if (children != NULL)
    {
      XFree(children);
    }
  }
  return 0;
}
int main(int argc, char* argv[])
{
  Display *dpy = XOpenDisplay(0);
  if (!FindWindow(dpy,DefaultRootWindow(dpy),"rdesktop"))
                fprintf(stderr,"No Found!\n");
        else
                fprintf(stderr,"Found\n");
  return 1;
}
    [/code:1]
可是现在不管有没有开rdesktop都打印出No Found!,不知道是什么地方还有错误?
回复

使用道具 举报

发表于 2004-6-10 18:37:36 | 显示全部楼层
好像没什么问题,我试了其他程序窗口都可以(gedit,gnome-terminal),我的rdesktop运行不起来
回复

使用道具 举报

 楼主| 发表于 2004-6-11 11:39:35 | 显示全部楼层
像运行phoenix,刚开始的空白页可以认到,但是只要进了某个网站,这个程序就认不得了
回复

使用道具 举报

发表于 2004-6-11 12:23:50 | 显示全部楼层
嗯,openoffice也认不出来
回复

使用道具 举报

 楼主| 发表于 2004-6-11 14:15:35 | 显示全部楼层
那有没有什么改进的办法?
回复

使用道具 举报

发表于 2004-6-11 15:30:02 | 显示全部楼层
不知道,我对Xlib的了解也是皮毛而已,自己试吧。
回复

使用道具 举报

发表于 2004-9-17 17:45:51 | 显示全部楼层
怎样才能取得窗口的标题栏?怎样才能用程序关闭一个已知窗口ID的窗口?
回复

使用道具 举报

发表于 2004-9-17 18:23:45 | 显示全部楼层
标题栏不属于窗口,是窗口管理器管的.
XDestroyWindow
回复

使用道具 举报

发表于 2004-9-19 11:32:07 | 显示全部楼层
呵呵,这个函数我试了N遍,可是就是不行。没反应!不知问题出在哪里!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 11:37 , Processed in 0.042210 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表