C++ Builder Tokyo > ProcessLogger > 지정된 .exe 파일의 프로세스 ID를 로깅하는 v0.1(XE4에서 마이그레이션 가능)
14136 단어 processmigrationcppBuilder
Windows 10 Pro (64bit) バージョン 1803 (April 2018 Update)
RAD Studio 10.2 Tokyo Update 3
XE4에서 도쿄로 마이그레이션
XE4의 구현은 도쿄에서 빌드할 수 없는 것 같다.
아래의 변경을 한다.
#include <Tlhelp32.hpp>
#include <Tlhelp32.h>
C:\\Program Files(x86)\\Embarcadero\Studio\19.0
다음을 검색 할 때 tlhelp32.h
TProcessEntry32
PROCESSENTRY32
구현 v0.1
Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE で管理されるコンポーネント
TMemo *Memo1;
TEdit *E_exeName;
TButton *Button1;
TCheckBox *CHK_log;
TTimer *TMR_logging;
void __fastcall FormDestroy(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall TMR_loggingTimer(TObject *Sender);
private: // ユーザー宣言
int __fastcall ListUpProcess_NameOf(String exename);
void __fastcall checkProcessID(void);
TStringList *m_logSL; // ロギング用
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//(2018.11.19) XE4からTokyoへの対応
//#include <Tlhelp32.hpp>
#include <Tlhelp32.h>
//
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
static const String kFilename_log = L"ProcLogger.csv"; // ログ用
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Memo1->Lines->Clear();
//
m_logSL = new TStringList();
// ログタイマー設定
TMR_logging->Enabled = false;
TMR_logging->Interval = 10000; // msec
TMR_logging->Enabled = true;
}
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete m_logSL;
}
//---------------------------------------------------------------------------
int __fastcall TForm1::ListUpProcess_NameOf(String exename)
{
HANDLE ListHandle; // タスクマネージャ > プロセスリスト 用ハンドル
//(2018.11.19) XE4からTokyoへの対応
//TProcessEntry32 Pentry; // 個々のプロセス閲覧用
PROCESSENTRY32 Pentry; // 個々のプロセス閲覧用
ListHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (ListHandle == INVALID_HANDLE_VALUE) {
return 0;
}
//(2018.11.19) XE4からTokyoへの対応
//Pentry.dwSize = sizeof(TProcessEntry32);
Pentry.dwSize = sizeof(PROCESSENTRY32);
//
Process32First(ListHandle, &Pentry);
while(1) {
String pnam = Pentry.szExeFile;
int procId = Pentry.th32ProcessID;
if (pnam.Pos(exename) > 0) {
return procId;
}
if (Process32Next(ListHandle, &Pentry) == false) {
break;
}
}
return 0;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
checkProcessID();
}
void __fastcall TForm1::checkProcessID(void)
{
int procId = ListUpProcess_NameOf(E_exeName->Text);
String msg;
msg = Now().FormatString(L"yyyy/mm/dd,hh:nn:ss");
msg += L",procID," + IntToStr(procId);
Memo1->Lines->Add(msg);
m_logSL->Add(msg);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TMR_loggingTimer(TObject *Sender)
{
if (CHK_log->Checked) {
checkProcessID();
m_logSL->SaveToFile(kFilename_log);
}
}
//---------------------------------------------------------------------------
동작 예
Reference
이 문제에 관하여(C++ Builder Tokyo > ProcessLogger > 지정된 .exe 파일의 프로세스 ID를 로깅하는 v0.1(XE4에서 마이그레이션 가능)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/1d062ab3059611c04e1b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)