unit1.cpp

来自「本书《C++Builder与WindowsAPI经典范例》附含配套光盘包括132」· C++ 代码 · 共 67 行

CPP
67
字号
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//搜寻<记事本>是否打开
HWND hNpad = ::FindWindow(NULL, "未命名 - 记事本");
//若<记事本>在打开中,即带到最前面
if(::ShowWindow(hNpad,SW_SHOWNORMAL))
   {
   ::BringWindowToTop(hNpad);
   }
else //若没打开,则打开<记事本>
   {
   //取得Window目录位置
   char WinDir[MAX_PATH];
   ::GetWindowsDirectory(WinDir, MAX_PATH);
   AnsiString sysdir = AnsiString(WinDir) + "\\Notepad.exe";
   //打开<记事本>
   ::ShellExecute(NULL,"open",sysdir.c_str(),NULL,NULL,SW_SHOWNORMAL);
   //再次找到<记事本>窗口
   hNpad = ::FindWindow(NULL, "未命名 - 记事本");
   }
//进行自定义函数
if(VaultWindowThreadID(hNpad))
  Memo1->Text = "完成在不同线程行程间的窗口取得焦点。";
else
  Memo1->Text = "请在打开<记事本>后,再执行本程序。";
}
//---------------------------------------------------------------------------
//在不同线程行程间的窗口取得焦点
bool TForm1::VaultWindowThreadID(HWND hWnd)
{
bool Result;
DWORD fWinThreadID;
DWORD winThreadID;
//若传入的窗口handle等同于现在最前面窗口handle
if(hWnd == ::GetForegroundWindow())
   Result = true;
else
   {//取得现在最前面窗口的线程代码ID
   fWinThreadID =
      ::GetWindowThreadProcessId(::GetForegroundWindow(), NULL);
   //取得现在窗口的线程ID
   winThreadID = ::GetWindowThreadProcessId(hWnd, NULL);
   if(fWinThreadID != winThreadID)
      {//若两者不同,则跳至现在线程的窗口,并移动至最前面
      ::AttachThreadInput(fWinThreadID, winThreadID, true);
      Result = ::SetForegroundWindow(hWnd);//true
      //再解开此二者不同线程的关联
      ::AttachThreadInput(fWinThreadID, winThreadID, false);
      }
   else//若相同,则直接将此窗口提至最前面
      Result = ::SetForegroundWindow(hWnd);
   //显现窗口到桌面上

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?