線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4603
推到 Plurk!
推到 Facebook!

如何強迫關閉縮到系統列的AP

答題得分者是:Kingron
howger
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-29 14:58:02 IP:59.126.xxx.xxx 訂閱
目前公司要使用某類似MSN的AP,但按下此AP視窗「X」時並非直接關閉,而是縮到系統列~
因沒法改此AP,所以我想到不如寫程式來偵測此AP,只要user對此AP按下「X」縮到系統列時就直接把此AP給強制關閉~

請指引一下該如何實作?or有更好的方法?

PS:平時都寫表單AP的我,被抓來搞這問題,是有想到用Win32api....
but...根本沒頭緒從哪下手~
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-29 15:55:34 IP:61.222.xxx.xxx 訂閱
SetWindowsHookEx(WH_CBT,.....

HCBT_SYSCOMMAND、SC_CLOCSE
howger
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-03 14:08:45 IP:59.126.xxx.xxx 訂閱
感謝版主指引~ 目前正K文件中
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-05 00:09:56 IP:59.120.xxx.xxx 訂閱
http://delphi.ktop.com.tw/search.php

搜索 約有 250 項符合 "Win32api" 的查詢結果,搜尋耗時 2.3504 秒。
2秒下的2小時 你可以吸收多少 比較重要

dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-06 12:40:13 IP:220.134.xxx.xxx 訂閱
如果您不能改此 AP 的程式,要使用外部 Hook 的方式,可以是可以作到按下「X」時不關閉,
但無法作到幫它縮到系統列吧(可以的話,我也很想知道方法耶...),只能把它最小化,縮到工作列。

===================引 用 howger 文 章===================
目前公司要使用某類似MSN的AP,但按下此AP視窗「X」時並非直接關閉,而是縮到系統列~
因沒法改此AP,所以我想到不如寫程式來偵測此AP,只要user對此AP按下「X」縮到系統列時就直接把此AP給強制關閉~
------
http://www.ViewMove.com
howger
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-11 09:19:48 IP:59.126.xxx.xxx 訂閱
我目前是參考另一版面討論的作法,強制關掉視窗 http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=88995
如果能抓到AP是否已縮小至系統列狀況,在把此AP 強制關掉,或許這樣就能做到~
不過還得實做看看才知行不行的通........
Kingron
中階會員


發表:1
回覆:51
積分:60
註冊:2005-09-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-11 23:04:10 IP:125.89.xxx.xxx 訂閱
请参考TaskSwitchXP的源代码~
里面有可以把任意一个窗口缩到系统列(时钟旁边),也可以Hook鼠标,在任意窗口的最小化按钮右击的动作!
你稍微修改下,就可以用于最大化按钮的点击了。C 源代码。
------
超级猛料:http://kingron.delphibbs.com
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-12 20:16:53 IP:59.105.xxx.xxx 訂閱
感謝分享,不錯用喔 
------
http://www.ViewMove.com
mypigbaby
高階會員


發表:11
回覆:168
積分:155
註冊:2006-07-20

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-07-18 09:21:16 IP:203.73.xxx.xxx 訂閱
豬寶寶個人是用一套VCL
CoolTrayIcon這個免費的元件

然後在FORM的
CloseQuery這個事件中
加這個
CanClose:=False;
再執行那個cooltrayicon
這樣應該可以達成您的需求
gydogdog
一般會員


發表:0
回覆:2
積分:0
註冊:2004-09-30

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-07-24 16:12:23 IP:61.220.xxx.xxx 訂閱
<textarea class="cpp" rows="10" cols="60" name="code">//.h //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp> #include "trayicon.h" #include //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TImageList *imlTray; TTrayIcon *TrayIcon1; private: // User declarations public: // User declarations void __fastcall MyWndProc(TMessage &Message); __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif //.cpp //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "trayicon" #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { WindowProc = MyWndProc; } //--------------------------------------------------------------------------- void __fastcall TForm1::MyWndProc(TMessage &Message) { if (Message.Msg == WM_CLOSE) { if (TrayIcon1->Visible == false) { TrayIcon1->Visible = true; TrayIcon1->Minimize(); } return; } WndProc(Message); } //--------------------------------------------------------------------------- </textarea><br /> 不好意思, 看錯問題
這是把自己縮到系統列的

應該只有 Hook 能辦到吧
------
None
編輯記錄
gydogdog 重新編輯於 2007-07-24 16:15:04, 註解 看錯問題‧
anyone
中階會員


發表:1
回覆:63
積分:52
註冊:2007-02-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-09-07 11:18:31 IP:59.127.xxx.xxx 未訂閱
我有個想法,用兩個東西去判斷
若你有該AP之Handle值
則如下:
<textarea class="delphi" rows="10" cols="60" name="code">if not IsWindowVisible(Handle) and not IsIconic(Handle)then begin //關閉此AP end; </textarea> 判斷它是否為顯現,判斷是否為最小化若都不是,應該就是縮到系統列去了此方法應該可行,試看看
編輯記錄
anyone 重新編輯於 2007-09-07 11:19:40, 註解 無‧
WilliamWeng
一般會員


發表:0
回覆:6
積分:6
註冊:2007-07-26

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-03-08 03:11:37 IP:220.135.xxx.xxx 訂閱
需要
Uses TlHelp32;

function TerminateProcessByName(const ExeName: string): Boolean;
// 說明: 藉由指定的名稱 強制終止某一個 Process
// 傳入: ExeName -- 執行檔的名稱
// 傳回: True -- 有找到所指定的執行檔的 Process
// False -- 沒有找到指定執行檔的 Process
var
hProcessSnap: THandle;
pe32: PROCESSENTRY32;
hProcess: THandle;
tmpExeName: string;
begin
Result := False;
tmpExeName := UpperCase(ExeName);
hProcessSnap := THandle(nil);
FillChar(pe32, Sizeof(PROCESSENTRY32), 0);
hProcessSnap := TlHelp32.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap = INVALID_HANDLE_VALUE) then Exit;
try
pe32.dwSize := sizeof(PROCESSENTRY32);
if (TlHelp32.Process32First(hProcessSnap, pe32)) then
begin
repeat
if UpperCase(pe32.szExeFile) = tmpExeName then
begin
hProcess := Windows.OpenProcess(PROCESS_ALL_ACCESS, True, pe32.th32ProcessID);
if THandle(hProcess) = THandle(nil) then Continue;
Windows.TerminateProcess(hProcess, 0);
Result := True;
end;
until not (TlHelp32.Process32Next(hProcessSnap, pe32));
end;
finally
Windows.CloseHandle(hProcessSnap);
end;
end;
howger
一般會員


發表:1
回覆:3
積分:0
註冊:2002-06-02

發送簡訊給我
#13 引用回覆 回覆 發表時間:2008-07-16 18:36:29 IP:118.170.xxx.xxx 訂閱

===================引 用 Kingron 文 章===================
请参考TaskSwitchXP的源代码~
里面有可以把任意一个窗口缩到系统列(时钟旁边),也可以Hook鼠标,在任意窗口的最小化按钮右击的动作!
你稍微修改下,就可以用于最大化按钮的点击了。C 源代码。

感謝大家的幫忙(我忘了回來回報一下XD)~
最後是由另一個同事幫忙寫了小工具處理,用的就是TaskSwitchXP的方式,
不過這種作法對企業來說最大的用途,大概會變成鎖死桌面的利器吧
salo0610
高階會員


發表:42
回覆:120
積分:107
註冊:2003-02-18

發送簡訊給我
#14 引用回覆 回覆 發表時間:2008-07-17 08:28:01 IP:220.132.xxx.xxx 未訂閱

是否可以利用 TTrayIcon 的 PopupMenu

在 PopupMenu 做一個 關閉,

按 關閉 時去真正關掉程式 ???


TPopupMenu



系統時間:2024-05-09 1:39:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!