灰色按键激活小程序

/************************************************************************/
/* 灰色按键激活
  
  
参考API:
 SetWindowPos GetForegroundWindow EnumChildWindows
  
               2011/2/23 bysdy915
  
-------------------------------------------------------------------------
*/
/************************************************************************/
#include   <windows.h>  
#include   <Strsafe.h>
#include   "resource.h" 
  
  
HINSTANCE  g_hInstance;
HANDLE  g_hEvent;
  
  
LRESULT  CALLBACK  DlgProc(HWND,UINT,WPARAM,LPARAM); 
  
int  WINAPI   WinMain(HINSTANCE   hInstance,   HINSTANCE   hPrevInstance,  
        LPSTR   lpszCmdLine,   int   nCmdShow   ) 
  
{  
 g_hInstance   =   hInstance; 
  
 DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DlgProc,0); 
  
 return    0;  
} 
  
  
//EnumChildWindows函数的回调函数
BOOLCALLBACK EnumChildProc(HWNDhwndChild, LPARAMlParam)
{
 if(!IsWindowEnabled(hwndChild))
 {
  EnableWindow(hwndChild,TRUE);
  
  returnTRUE;
 }
}
  
//激活功能执行线程
void_ActiveGbutton(HWNDhwnd)
{
 HWNDhFirstWindow=NULL,hTemp=NULL;
 charcbuff[100]={0};
  
 while(1)
 {
  
  WaitForSingleObject(g_hEvent,INFINITE);
  
  hTemp = GetForegroundWindow();
  
  //相同窗口已经激活
  if(hTemp==hwnd||hFirstWindow==hTemp||hTemp==NULL){
   Sleep(50);
   continue;
  }
  hFirstWindow = hTemp;
  
  //sprintf(cbuff,"handle = %d",hFirstWindow);
  //MessageBoxA(NULL,cbuff,NULL,MB_OK);
  
  //枚举子窗口
   EnumChildWindows(hFirstWindow,(WNDENUMPROC)EnumChildProc, NULL);
 }
 return;
}
  
LRESULT  CALLBACK   DlgProc(HWND   hwnd,UINT   uMsg,WPARAM   wParam,LPARAM   lParam)  
{  
 HICON  hIcon;  
 staticintbActive=FALSE;
 switch(uMsg)  
 {  
 case  WM_INITDIALOG:  
  //hIcon   =  LoadIcon(g_hInstance,MAKEINTRESOURCE(MYICON));  
  //SetClassLong(hwnd,GCL_HICON,(long)hIcon); 
  
  //对话框置顶
  SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE);
  
  g_hEvent = CreateEventA(NULL,TRUE,FALSE,NULL);
  //建立激活线程
  CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)_ActiveGbutton,hwnd,0,NULL);
  
  
  break;  
 case  WM_COMMAND:  
  {  
   switch(wParam)  
   {  
   case   IDOK: 
   //开始执行灰化按钮的激活
  
    //改变按键显示
    SetDlgItemTextA(hwnd,IDOK,bActive==FALSE?"Stop":"Start");
  
    bActive=!bActive;
      
    if(bActive==TRUE)
     SetEvent(g_hEvent);
    else
     ResetEvent(g_hEvent);
  
    break;
  
   case   IDCANCEL:  
    EndDialog(hwnd,1);  
    break;  
   }  
  }  
  break;  
 }  
 return  false;  
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值