偵測一隻App是否idle再問! |
尚未結案
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
之前有問一篇,尚未有明確的答案,最近一直覺得ForegroundIdleProc這隻func可能可行,終於有空自已try了一下,不過無法成功,完全是照著ForegroundIdleProc、SetWindowsHookEx上的說明照表操課寫的,不知道是那裏有錯還是概念完全不對,大家有空幫我看一下,謝謝! >< class="code">
~~~
#pragma resource "*.dfm"
TForm1 *Form1; HHOOK HIdleHook;
DWORD MyIdleHookProc(int code,DWORD wParam,LONG lParam); <---自訂的ForegroundIdleProc function HINSTANCE TestAppIns;
DWORD TestAppThreadId; //---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//開啟另一隻ap,並希望監控它是否變成idle
TestAppIns=ShellExecute(NULL,NULL,"C:\\testidle.exe",NULL,NULL,SW_SHOW); Sleep(500); HWND hwnd=FindWindow(NULL,"fuckdead"); <---由這隻ap的Form->Caption抓Form的hwnd if (hwnd==NULL)
ShowMessage("Can't find the program!"); DWORD xx; TestAppThreadId=GetWindowThreadProcessId(hwnd,&xx);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HIdleHook=SetWindowsHookEx(WH_FOREGROUNDIDLE,(HOOKPROC)MyIdleHookProc,TestAppIns,TestAppThreadId); if (HIdleHook==NULL)
ShowMessage("Can't Hook in!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
UnhookWindowsHookEx(HIdleHook);
}
//---------------------------------------------------------------------------
DWORD MyIdleHookProc(int code,DWORD wParam,LONG lParam)
{
Form1->Memo1->Lines->Add("This App is idle now"); if(code < 0) {
return CallNextHookEx(HIdleHook,code,wParam,lParam);
} return 1; <---實在不知道要return什麼
}
//---------------------------------------------------------------------------
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |