设为首页
加入收藏
站点地图
首页 | 网站建设 | 杭州FPGA培训班,浙江FPGA培训班,苏州FPGA培训班,昆山FPGA培训班,常州FPGA培训班优化 | 网站推广 | 网络营销 | 网站运营 | 网站策划 | 在线讨论 | 下载中心
您当前的位置:WebSite -> 网站建设 -> 文章内容正文->自动启动/关闭广告条多种方法
 子栏目导航
 热门文章
 相关文章
 

自动启动/关闭广告条多种方法

作者:佚名  来源:转载  发布时间:2008-7-22 9:11:14  

小辉程序在讲解过程中以C为基础,某些地方会兼顾讲解Delphi的用法。但由于小辉用Delphi和VB搞开发是在98年以前的事,现在一些技术细节也疏忘了许多,因此,朋友们若问我关于Delphi/VB方面的技术问题,小辉可能无法给你满意的回答,建议你去相关的主页查询。对于涉及界面开发的一些简单问题,恕小辉不能一一回答

自动启动/关闭广告条有很多种方法。这里分别讲述其中两种。

  1. 启动广告条:

  方法一:使用WinExec()函数
  UINT WinExec(
    LPCSTR lpCmdLine, // 包含要执行的命令行
    UINT UCmdShow // 定义了以怎样的形式启动程序的常数值。);

  参数说明:
  LPCSTR lpCmdLine: 包含要执行的命令行。
  系统将在以下范围查找应用程序:
  1. 应用程序启动位置
  2. 当前目录位置
  3. Windows system目录
  4. Windows 目录
  5. path中设置的路径列表

  UNIT uCmdShow: 定义了以怎样的形式启动程序的常数值。具体说明如下:
  SW_HIDE 隐藏窗口,活动状态给令一个窗口
  SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
  SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
  SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
  SW_SHOWMAXIMIZED 最大化窗口,并将其激活
  SW_SHOWMINIMIZED 最小化窗口,并将其激活
  SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
  SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
  SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
  SW_SHOWNORMAL 与SW_RESTORE相同
  例如:启动当前目录下的abc.exe 程序:
  WinExec( "abc.exe",SW_SHOW );

  方法二:  
  WinExec是一个兼容win16的函数。win32应用程序可用CreateProcess函数,也可使用ShellExecute函数。具体说明可查阅有关帮助文档。

  2. 关闭广告条

  方法一: 模拟鼠标点击[关闭]按钮

  要用到以下两个API函数:
  VOID mouse_event(
   DWord dwFlags,
   DWORD dx,
   DWORD dy,
   DWORD dwData,
   DWORD dwExtraInfo
  );  

  设置mouse状态。参数说明如下:
  dwFlags Long,下述标志的一个组合 :
  MOUSEEVENTF_ABSOLUTE dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
  MOUSEEVENTF_MOVE 移动鼠标
  MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下
  MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起
  MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下
  MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下
  MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下
  MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下
  dx 根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动

  dy 根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动
  dwData amount of wheel movement
       dwExtraInfo,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序

  BOOL SetCursorPos(
   int X, // horizontal position
   int Y // vertical position
  );
  设置鼠标位置。鼠标指针在屏幕像素坐标系统中的X,Y位置


  例如确定广告条的关闭按钮位于座标点(1015,682),则执行下面两段代码中的任意一段都可以实现关闭:
  代码1:

void CloseSpedia()
{
  SetCursorPos(1015,682);
  mouse_event(MOUSEEVENTF_LEFTDOWN ,0,0,0,GetMessageExtraInfo());
  mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,GetMessageExtraInfo ());
}
  代码2:
void CloseSpedia()
{
  mouse_event(MOUSEEVENTF_MOVE,0,1015,682,GetMessageExtraInfo());
  mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,GetMessageExtraInfo());
  mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,GetMessageExtraInfo ());
}
  方法2:找到广告条的句柄,给其发送WM_CLOSE事件。

  要用到以下几个API函数:
  BOOL EnumWindows(
    WNDENUMPROC lpEnumFunc, // pointer to callback function
    LPARAM lParam // application-defined value
  );
  枚举窗口列表中的所有父窗口(顶级和被所有窗口)

  BOOL PostMessage(
    HWND hWnd, // handle of destination window
    UINT Msg, // message to post
    WPARAM wParam, // first message parameter
    LPARAM lParam // second message parameter
  );
  将一条消息投递到指定窗口的消息队列

  int GetWindowText(
    HWND hWnd, // handle to window or control with text
    LPTSTR lpString, // address of buffer for text
    int nMaxCount // maximum number of characters to copy
  );
  取得一个窗体的标题(caption)文字


  实现原理:
  通过使用EnumWindows枚举窗口列表中的所有父窗口,在其回调函数中记录所有窗口的标题和句柄。判断若是要关闭的应用程序句柄,则使用PostMessage向其发送WM_CLOSE命令。具体代码如下(假设我我们要关闭的程序是画笔程序):

typedef struct
{
  HWND hWnd;
  char cWinBuf[256];
}WINLIST;
WINLIST gWinList[256];
int giCountWin,j;

BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam )
{
  char buffer[256];
  GetWindowText(hWnd, buffer, 256);
 if ( strlen(buffer) )
  {
    if (giCountWin < 256)
    {

      gWinList[ giCountWin].hWnd = hWnd;
      strcpy(gWinList[ giCountWin].cWinBuf,buffer);
      giCountWin ++;
    }
  }
  return TRUE;
}

void CloseSpedia()
{
  giCountWin = 0;
  EnumWindows( (WNDENUMPROC)EnumWindowsProc,0);
  for ( j = 0; j<giCountWin; j++)
  {
    if ( strcmp(gWinList[j].cWinBuf,"画笔") == 0 )
    {
      ::PostMessage( gWinList[j].hWnd,WM_CLOSE,0,0);
      break;
    }
  }
}


  好了,今天就说到这。这一节涉及到的api函数比较多。对初涉API的朋友可能会有些难。特别是关闭广告条的第二种实现方法可能有些复杂。

 [返回上一页] [打 印] [收 藏]
百度中查看“自动启动/关闭广告条多种方法”相关文章

版权申明:本站网站建设资源来源网络,如有侵犯您的版权,请来Q告知 我们会在24小时内删除!

Copyright © 2008-2010 www.mepeixun.com All Rights Reserved
服务QQ:52466268 邮箱:meipeixun@163.com
备案号:苏ICP备07200130号