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

請問一個findwindow問題

答題得分者是:cashyy
markchung123
一般會員


發表:2
回覆:0
積分:0
註冊:2005-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-18 21:28:11 IP:59.114.xxx.xxx 未訂閱
請問各位大大,利用findwindow找到目前執行的程序一定要用應用程式的名字嗎?可以用影像名稱來找到程序的id嗎??如小算盤,可以用FindWindow(NULL,"小算盤");來找到,那如果要利用calc.exe來找的話,可以嗎?還是要用別的函式,謝謝.
wpf
一般會員


發表:11
回覆:22
積分:6
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-18 21:54:11 IP:221.218.xxx.xxx 未訂閱
可以使用 classname,或者 caption查找, 例如 记事本, find in msdn and should have more detail info
cashyy
高階會員


發表:117
回覆:322
積分:212
註冊:2004-04-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-18 22:21:10 IP:59.104.xxx.xxx 未訂閱
您好! 如果要像工作管理員一樣,來取得程序id可以參考下列程式:
//取得執行緒
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  PROCESSENTRY32 *ProcessEntry32=new PROCESSENTRY32;
  HANDLE AHandle;
  LPWSTR APath;
  bool isFound;
  int i;
  String p;
  i=0;
  ListBox1->Items->Clear();
  AHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  isFound = true;
  try
  {
    ProcessEntry32->dwSize = sizeof(PROCESSENTRY32);
    isFound = Process32First(AHandle, ProcessEntry32);
    while(isFound)
    {
      OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                                false, ProcessEntry32->th32ProcessID);
      WinHandle[i  ] = ProcessEntry32->th32ProcessID;
      p = ProcessEntry32->szExeFile;
      ListBox1->Items->Add(p);
      isFound = Process32Next(AHandle, ProcessEntry32);
    }
  }
  catch ( ... )
  {
  }
}    //關閉執行緒
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  HANDLE AhProcess;
  DWORD test;
  test=WinHandle[ListBox1->ItemIndex];
  AhProcess = OpenProcess(PROCESS_ALL_ACCESS, true, test);
  TerminateProcess(AhProcess, 0);
  ListBox1->Refresh();
}    //========================================================
//如果您要用calc.exe來找的話就改成:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  PROCESSENTRY32 *ProcessEntry32=new PROCESSENTRY32;
  HANDLE AHandle;
  LPWSTR APath;
  bool isFound;
  int i=0;
  String p,h;
  AHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  isFound = true;      try
  {
    ProcessEntry32->dwSize = sizeof(PROCESSENTRY32);
    isFound = Process32First(AHandle, ProcessEntry32);
    while(isFound)
    {
      OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                                false, ProcessEntry32->th32ProcessID);
      WinHandle[i  ] = ProcessEntry32->th32ProcessID;
      p = ProcessEntry32->szExeFile;
      if(p == "calc.exe")
      {
        HANDLE hProcess,AhProcess;
        DWORD ProcessID;
        /* GetWindowThreadProcessId函式,取得視窗執行緒或處理程序之ID */
        GetWindowThreadProcessId(Application->Handle,&ProcessID);
        AhProcess = OpenProcess(PROCESS_ALL_ACCESS, true, ProcessID);
        delete ProcessEntry32;     //關閉前先釋放ProcessEntry32結構
        TerminateProcess(AhProcess, 0);
      }
      isFound = Process32Next(AHandle, ProcessEntry32);
    }
  }
  catch ( ... )
  {
  }
}
發表人 - cashyy 於 2005/08/18 22:29:54 發表人 - cashyy 於 2005/08/18 22:33:32
系統時間:2024-04-20 15:18:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!