c++ builder XE4, 10.2 Tokyo > 他アプリを見つける > 1. captionでの見つけ方
10854 ワード
動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
注意
(追記 2018/11/14)
以下で使用しているZeroMemoryは最適化で吹き飛ぶため、SecureZeroMemory()の使用が推奨されます。
内容
http://qiita.com/7of9/items/7b8e8e5ec4111df6dcf5
の続き。
開いたアプリを見つけたい。
HWNDなりプロセス番号なりで見つけたいが、とりあえずできたのはウィンドウキャプションでの見つけ方。
try1
Unit1.cpp
void __fastcall TParentForm::App_openOther(String param)
{
String progname = L"childProject.exe";
if (FileExists(progname) == false) {
ShowMessage(L"childProejct.exe not found");
return;
}
TShellExecuteInfo sinfo;
::ZeroMemory(&sinfo,sizeof(SHELLEXECUTEINFO));
sinfo.cbSize = sizeof(sinfo);
sinfo.hwnd = 0; // Desktop
sinfo.fMask = SEE_MASK_FLAG_DDEWAIT;
sinfo.lpFile = progname.c_str();
sinfo.lpParameters = param.c_str();
sinfo.lpVerb = L"";
sinfo.nShow = SW_SHOWNORMAL;
ShellExecuteEx(&sinfo);
// 起動待ち
WaitForInputIdle(sinfo.hProcess, INFINITE);
}
void __fastcall TParentForm::App_findCaptionOf(String caption)
{
String suffix;
int len = String(L"/caption=").Length();
suffix = caption.Delete(1, len);
suffix = StringReplace(suffix, L"_", L" ", TReplaceFlags()<<rfReplaceAll);
String fullCaption = L"childProject";
fullCaption = fullCaption + L" / " + suffix;
HWND appHwnd;
appHwnd = FindWindowEx(NULL, NULL, NULL, fullCaption.c_str());
if (appHwnd != NULL) {
String msg = L"found:" + caption;
OutputDebugString(msg.c_str());
}
}
void __fastcall TParentForm::B_createClick(TObject *Sender)
{
App_openOther(L"/caption=Test_3_1_4");
}
//---------------------------------------------------------------------------
void __fastcall TParentForm::B_foundClick(TObject *Sender)
{
App_findCaptionOf(L"/caption=Test_3_1_4");
}
//---------------------------------------------------------------------------
以下のように見つけることができた。
結果
デバッグ出力: found:Test_3_1_4 プロセス parentProject.exe (2312)
try2
以下において、全部のキャプション文字列を渡すように変更した
Unit1.cpp
void __fastcall TParentForm::App_findFullCaptionOf(String fullCaption)
{
HWND appHwnd;
appHwnd = FindWindowEx(NULL, NULL, NULL, fullCaption.c_str());
if (appHwnd != NULL) {
String msg = L"found2:" + fullCaption;
OutputDebugString(msg.c_str());
}
}
void __fastcall TParentForm::B_foundClick(TObject *Sender)
{
App_findCaptionOf(L"/caption=Test_3_1_4");
App_findFullCaptionOf(L"childProject / Test 3 1 4");
}
App_findFullCaptionOf()の方では"_"から" "への変換は省略している。
Author And Source
この問題について(c++ builder XE4, 10.2 Tokyo > 他アプリを見つける > 1. captionでの見つけ方), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/fcbbb96551d25212a653著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .