加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

winapi – 在MS Windows(XP)上使用来自不同进程的窗口句柄进行窗

发布时间:2020-12-13 20:32:33 所属栏目:Windows 来源:网络整理
导读:是否有可能使用其他进程的窗口进行某些操作?我想做的是: – 删除窗户装饰 – 将窗口移动到屏幕的任何位置 -let窗口保持在顶部而不是模态 指向命令行工具,脚本或C/C++代码段的链接非常棒. 非常感谢你! 我决定再拍一次,所以我试验了你的代码并添加了遗漏的
是否有可能使用其他进程的窗口进行某些操作?我想做的是:
– 删除窗户装饰
– 将窗口移动到屏幕的任何位置
-let窗口保持在顶部而不是模态

指向命令行工具,脚本或C/C++代码段的链接非常棒.

非常感谢你!

我决定再拍一次,所以我试验了你的代码并添加了遗漏的内容:一个非常多的选项.

删除装饰came from here的关键.虽然它有效,但你最终会发现裸体的应用程序可能会在它之后显示一些错误.

请享用:

#include "windows.h"
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <limits>

using namespace std;

#ifdef min
    #undef min
#endif


int main(int argc,char* argv[])
{
  char** param = argv;

  unsigned int x = numeric_limits<int>::min(),y=numeric_limits<int>::min(),w=numeric_limits<int>::min(),h=numeric_limits<int>::min();
  HWND z = HWND_NOTOPMOST;
  unsigned int flags = (SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER);
  ++param;

  wstring winTitle;
  bool close = false;
  bool naked = false;
  while (*param)
  {
    string sparam(*param);
    if (sparam == "-title")
    {
      ++param; 
      if (!*param) break;

      sparam = *param;
      winTitle.resize(sparam.size());
      copy(sparam.begin(),sparam.end(),winTitle.begin());
    }
    else if (sparam == "-move")
    {
      ++param; 
      if (!*param) break;

      sparam =*param;
      stringstream sstr(sparam);
      char sep;
      sstr >> x >>sep >> y;
      if (x != numeric_limits<int>::min() && y != numeric_limits<int>::min())
      {
        flags &= ~SWP_NOMOVE;
      }
    }
    else if (sparam == "-resize")
    {
      ++param; 
      if (!*param) break;

      sparam = *param;
      stringstream sstr(sparam);
      char sep;
      sstr >> w >>sep >> h;
      if (h != numeric_limits<int>::min() && w != numeric_limits<int>::min() )
      {
        flags &= ~SWP_NOSIZE;
      }
    }
    else if (sparam == "-top")
    {
      z = HWND_TOP;
      flags &= ~SWP_NOZORDER;
    }
    else if (sparam == "-staytop")
    {
      z = HWND_TOPMOST;
      flags &= ~SWP_NOZORDER;
    }
    else if (sparam == "-bottom")
    {
      z = HWND_BOTTOM;
      flags &= ~SWP_NOZORDER;
    }
    else if (sparam == "-hide")
    {
      flags |= SWP_HIDEWINDOW;
    }
    else if (sparam == "-close")
    {
      close = true;
    }
    else if (sparam == "-naked")
    {
      naked = true;
    }

    ++param;      
  }

  if (winTitle.empty())
  {
    return -1;
  }

  HWND win_handle = FindWindow(0,winTitle.c_str());    
  if (win_handle != 0)
  {
     if (close)
     {
         TerminateProcess( (HANDLE )GetProcessId( win_handle ),0);
         return 0;
     }

     SetWindowPos( win_handle,z,x,y,w,h,flags );

     if (naked)
     {
         SetWindowLong(win_handle,GWL_STYLE,GetWindowLong(win_handle,GWL_EXSTYLE) | WS_EX_TOPMOST);
         ShowWindow(win_handle,SW_SHOW);
     }
  }
  else
  {
      cout << "!!! FindWindow failed" << endl;
  }

  return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读