FindWindow用法

 

HWND hWnd=::FindWindow("Tform1",0);
可以找到form1 对它做动作
但若我要找如flashget
并把它用程序按钮缩小或关闭又要如何做?

结束指定的程序

要结束指定的程序,得先要知道要结束的对象程序标题名称是什么,然后利用FindWindow() 来找出其窗口 HANDLE,再呼叫 PostMessage() 送出 WM_CLOSE 讯息以结束该窗口,PostMessage()的用法与 SendMessage()完全相同,所不同的是 SendMessage() 会等待接收讯息的窗口处理完讯息后才返回,而PostMessage()则是送出讯息命令后马上返回

//-------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE DestHandle;
DestHandle = FindWindow(NULL,"test.txt -
记事本");
if (DestHandle != 0) PostMessage(DestHandle, WM_CLOSE, 0, 0);
}
//-------------------------------------------------------------------

最小化指定的程序

指定某一程序最小化有三种做法:(DestHandle 承上节求出)
1. CloseWindow(DestHandle); (
勿以为这是「结束」指定程序的用法)
2. ShowWindow(DestHandle, SW_MINIMIZE);
3. SendMessage(DestHandle, WM_SIZE, SIZE_MINIMIZED, 0);

FindWindow() 的问题

以上,当我们在寻找目标窗口时,FindWindow()内需一字不漏的填入完整的窗口标题名称,否则会找不到目标窗口;所以我们进一步利用 GetWindow()函式,搜寻全部可见窗口,再逐一比对其窗口标题名称,这样就可做到所谓「概略搜寻」,以下的程序范例会将桌面上所有窗口标题名称含有记事本字样的窗口通通关闭

//-------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
      HANDLE hCurrentWindow = GetWindow(Handle,GW_HWNDFIRST);
      char buff[255];
      String Text;

      while (hCurrentWindow!=0)
      {
           if ( ( GetWindowText(hCurrentWindow,buff,255)>0) &&
           IsWindowVisible(hCurrentWindow) )
           {
                //ShowMessage(buff);
                Text=buff;
                if (Text.Pos("
记事本")!=0)
               {
                       PostMessage(hCurrentWindow, WM_CLOSE, 0, 0);
              }
          }
          hCurrentWindow = GetWindow(hCurrentWindow,GW_HWNDNEXT);
     }
}

 

你可能感兴趣的:(c/c++)