亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

工人線程中關閉窗體的實現

2019-11-18 18:03:10
字體:
來源:轉載
供稿:網友
在本人的《自動關閉信息提示窗體的實現》中實現了利用線程來關閉不需要的窗體技術,它所實現的是關閉同一程序中的窗體,而有時是需要關閉不在一個程序中的窗體的。比如,現在所見到的“廣告殺手”(自動關閉廣告窗體的一個程序)。
       實現關閉窗體的關鍵在于找到該窗體的句柄,之后就可以發送WM_CLOSE給該窗體實現窗體的關閉。下面就是一個典型的例子用來關閉指定窗體標題以及窗體類名稱的一個函數。
PRocedure TForm1.Button1Click(Sender: TObject);
var
  hCurrentWindow: HWnd;
  szText: array[0..254] of char;
begin
hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
   while hCurrentWindow <> 0 do
   begin
     if GetWindowText(hCurrentWindow, @szText, 255)>0 then
     begin
        if StrPas(@szText))=’窗體標題’ then
if GetClassName(hCurrentWindow, @szText, 255)>0 then
         if StrPas(@szText))=’窗體類名稱’ then
    break;
     end;
    hCurrentWindow:=GetWindow(hCurrentWindow, GW_HWNDNEXT);
  end;
      實際上有時需要在工人線程(MFC將線程分類為工人或者用戶接口。主要的差別是用戶接口線程可以接收消息,而工人線程不能。一般地,應該使用工人線程作為不需要用戶干預的后臺線程,比如電子表格的重新計算、打印操作或者拼寫檢查)中來實現這樣的功能,而上面的程序則不能實現該功能,因為其中使用的Handle,該Handle也就是Self.Handle(窗體的句柄)。
      如果能夠找到一個有意義的窗口句柄來替代該Handle的話,就可以實現了。
     查找Windwos幫助,相關的函數包括
         HWND GetWindow(HWND hWnd, INT uCmd);獲取一個窗體的相關窗體
         HWND GetNextWindow(HWND hWnd, UINT wCmd);獲取下一個窗體
         HWND GetTopWindow(HWND hWnd);獲取當前的頂窗體
    但這三個函數都需要事先指定hWnd;
    另一個函數HWND GetActiveWindow(VOID);返回的是線程相關的活動的窗體,但工人線程中沒有窗體。
    進一步查找可以發現HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName); 可以滿足我們的要求。其中的參數lpClassName是指向類名稱字符串的指針,而lpWindowName是指向窗體名稱的指針,如果該參數為NULL,那么所有的窗體都匹配。
      它關鍵的性質“而lpWindowName是指向窗體名稱的指針,如果該參數為NULL,那么所有的窗體都匹配。”所以可以利用此特性,找到任何一個有意義的窗體句柄,在利用此句柄作為GetWindow的參數,最終查找到我們所需要的窗體句柄。具體實現如下所示:
unit UWindowKiller;
interface
uses
  Classes, Windows, Messages, SysUtils, Dialogs;
type
  WindowKiller = class(TThread)
  protected
    procedure Execute; override;
  end;
implementation
var
  aKiller: WindowKiller;
{ WindowKiller }
procedure WindowKiller.Execute;
var
  Handle: THandle;
  hCurrentWindow: HWnd;
  szText: array[0..254] of char;
begin
  Handle := FindWindow(nil, nil);  // 先找到任意一個有意義的窗體句柄
  hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
   while hCurrentWindow <> 0 do
   begin
     if GetWindowText(hCurrentWindow, @szText, 255)>0 then
     begin
       if StrPas(@szText)='我的電腦' then  // 匹配窗體標題
    break;
     end;
    hCurrentWindow:=GetWindow(hCurrentWindow, GW_HWNDNEXT);
  end;
  If hCurrentWindow<>0 then
   PostMessage(hCurrentWindow, WM_CLOSE, 0, 0);  //將窗體關閉
end;

initialization
  aKiller := WindowKiller.Create(False); // 自動創建該線程,在程序啟動時就執行
end.

 結合上面的程序可以給出“廣告殺手”的偽實現過程:
procedure WindowKiller.Execute;
var
  i: integer;
  str: string;
  slWindow: TStrings;
  Handle, hCurrentWindow: HWnd;
  szText: array[0..254] of char;
begin
slWindow := TStringList.Create;
  try
    while not Terminated do
    begin
      slWindow.Clear;
      Handle := FindWindow(nil, nil);
      hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
     while hCurrentWindow <> 0 do
      begin
        if GetWindowText(hCurrentWindow, @szText, 255)>0 then
     begin
          str := StrPas(@szText);
          if str 符合廣告窗體標題的特征then
            slWindow.Add(IntToStr(hCurrentWindow));
          //  其他可能的根據窗體屬性的判斷
        end;
        hCurrentWindow:=GetWindow(hCurrentWindow, GW_HWNDNEXT);
      end;
    for i:=0 to slWindow.Count-1 do
        PostMessage(HWnd(StrToInt(slWindow[i])), WM_CLOSE, 0, 0);
      Sleep(1000);
end;  // end-while
  finally
    slWindow.Free;
  end;
end;


上一篇:支持XP下托盤欄氣球提示的托盤單元

下一篇:進程查看器1.3版開發后記

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品偷伦一区二区| 国产成人精品久久二区二区| 综合久久五月天| 欧美极品少妇xxxxⅹ喷水| 欧美自拍大量在线观看| 国产成人自拍视频在线观看| 亚洲级视频在线观看免费1级| 日韩欧美亚洲国产一区| 久久综合免费视频影院| 国产精品日韩av| 九九热99久久久国产盗摄| 精品国产31久久久久久| 成人黄色生活片| 一本大道香蕉久在线播放29| 国产精品第1页| 久久中文精品视频| 亚洲伊人久久综合| 国产精品伦子伦免费视频| 成人福利视频网| 在线免费观看羞羞视频一区二区| 成人春色激情网| 黑人极品videos精品欧美裸| 免费97视频在线精品国自产拍| 日韩精品一二三四区| 欧美日韩一区二区在线播放| 成人久久一区二区| 91久久久久久久久久久久久| 亚洲社区在线观看| 91精品久久久久久久久久久久久久| 国产精品h片在线播放| 色婷婷久久一区二区| 综合国产在线视频| 亚洲成成品网站| 麻豆国产精品va在线观看不卡| 国产999在线观看| 亚洲电影免费观看高清完整版在线| 一本一道久久a久久精品逆3p| 欧美日韩国产二区| 亚洲国产另类久久精品| 久久亚洲私人国产精品va| 精品久久久久久久久久久久久久| 国产精品免费一区| 91精品国产自产在线观看永久| 亚洲视频第一页| 亚洲欧美国产高清va在线播| 色综合久久中文字幕综合网小说| 国产精品主播视频| 国产女精品视频网站免费| 最近2019年日本中文免费字幕| 456国产精品| 久久这里有精品| 精品无码久久久久久国产| 成人午夜激情免费视频| 夜色77av精品影院| 亚洲风情亚aⅴ在线发布| 97精品久久久中文字幕免费| 久久免费视频观看| 久久免费视频网站| 91精品国产91久久| 亚洲一区二区福利| 久久伊人色综合| 色综合伊人色综合网| 欧美视频裸体精品| 亚洲成成品网站| 日韩av在线影视| 色偷偷av亚洲男人的天堂| 国产精品伦子伦免费视频| …久久精品99久久香蕉国产| 日本电影亚洲天堂| 中文字幕欧美日韩va免费视频| 少妇高潮 亚洲精品| 久久频这里精品99香蕉| 热久久视久久精品18亚洲精品| 91精品国产综合久久香蕉的用户体验| 欧美性20hd另类| 国产z一区二区三区| 亚洲天堂男人天堂女人天堂| 亚洲一区久久久| 亚洲成人久久久久| 国产成人精品久久二区二区91| 国产成人精品视频在线观看| 色综合久久天天综线观看| 国产精品99一区| 久久99国产精品久久久久久久久| 午夜精品久久久久久99热| 精品高清一区二区三区| 国产精品一区av| 亚洲精品xxx| 欧美电影免费观看高清完整| 国产一区二区三区欧美| 亚洲白拍色综合图区| 国产99久久精品一区二区永久免费| 久久综合色影院| 亚洲男女性事视频| 久久99视频精品| 亚洲欧美国产精品久久久久久久| 不卡在线观看电视剧完整版| 色999日韩欧美国产| 欧美极品少妇xxxxⅹ免费视频| 亚洲丝袜在线视频| 精品久久中文字幕| 国产成人精品久久二区二区91| 91久久在线观看| 久热国产精品视频| 亚洲激情在线观看视频免费| 欧美精品久久久久久久免费观看| 超碰精品一区二区三区乱码| 欧美日韩成人黄色| 在线一区二区日韩| 国产精品美女在线观看| 国产精品99久久久久久人| 91性高湖久久久久久久久_久久99| 国产精品久久久久免费a∨大胸| 成人一区二区电影| 久久久精品免费视频| 欧美大片在线免费观看| 中文字幕欧美日韩在线| 国产精品久久精品| 动漫精品一区二区| 欧美国产极速在线| 欧美日韩中国免费专区在线看| 国产亚洲精品高潮| 欧美成人激情视频| xvideos亚洲| 久久精品视频在线播放| 欧美极品美女视频网站在线观看免费| 国产一区二区免费| 69av在线视频| 久久国产一区二区三区| 国产精品免费一区二区三区都可以| 在线视频免费一区二区| 日韩欧美有码在线| 欧美黄色片视频| 国产精品久久久久免费a∨大胸| 成人精品久久av网站| 在线日韩日本国产亚洲| 欧美视频在线视频| 黑人巨大精品欧美一区二区| 亚洲理论在线a中文字幕| 最近2019中文免费高清视频观看www99| 日韩精品免费一线在线观看| 66m—66摸成人免费视频| 上原亚衣av一区二区三区| 国产91色在线|免| 国产精品美女av| 伊人久久久久久久久久久久久| 欧美亚洲国产视频| 97热精品视频官网| 久久国产色av| 中文字幕亚洲无线码在线一区| 国产在线不卡精品| 亚洲a中文字幕| 91在线无精精品一区二区| 欧美老少做受xxxx高潮| 视频在线一区二区| 欧美理论电影在线播放| 97热精品视频官网| 久久精品国产69国产精品亚洲| 国产精品自拍网| 亚洲视频日韩精品| 欧美激情精品久久久久久久变态| 亚洲最大的免费| 国产精品一区二区三区久久久| 日韩精品在线视频|