質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

787閲覧

CreateProcessとadbコマンド

charlotte_27

総合スコア0

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2023/01/31 10:09

c++でCreateProcess を使用してadbコマンドを実行したいのですが、コードの書き方がわかりません。
https://learn.microsoft.com/ja-jp/windows/win32/procthread /creating-processes
のtmain関数はmain関数とは違うのでしょうか?

void _tmain( int argc, TCHAR *argv[] )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

if( argc != 2 ){
printf("Usage: %s [cmdline]\n", argv[0]);
return;
}

if( !CreateProcess( NULL, argv[1], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi )) {
printf( "CreateProcess failed (%d).\n", GetLastError() );
return;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}

これのargv[1]のところを例えば"adb device"とすればこのコマンドが実行される感じですか?
それで実行し終わったら
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
でプロセスを終了するというイメージでいいですか?
(mallocとfreeみたいな感じ?)

また、tmain関数はmain関数が違った場合ですが、

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _tmain( int argc, TCHAR *argv[] ){
(中略)
}

int main(void) {
_tmain( , &(TCHAR)"adb device");
_tmain( , &(TCHAR)"adb shell input touchscreen tap x y");
return 0;
}

でコマンドの実行が可能ですか?
何かほかに処理が必要であれば教えてほしいです。
あとargcは何の役割があるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2023/01/31 10:47

その提示のコードで実行してみたらどうなるでしょうか
charlotte_27

2023/01/31 10:57

argcの値の役割が分からなくて、この_tmainの第1引数に何を入れればいいのか分からないのですが、これはどういったももなのでしょうか? 他のサイトでコード例を見てるとこの引数は取ってないようなものもあったので、別になくてもいいものなのでしょうか?
charlotte_27

2023/01/31 11:20 編集

一旦argc関連のものを消して、実行(Visual Studio2019 の デバッグ無しで開始、デバッグを開始 の両方から)してみたのですが、 C:(中略)〇〇〇.exeが開始できませんでした。 ファイルが見つかりませんでした。 と出てきました。 ちなみにexeファイルはできてなかったです。 あと、 void _tmain(TCHAR *argv[] ){略} int main(void){ _tmain(&(TCHAR)"adb device"); return 0; } としましたが、 _tmain(&(TCHAR)"adb device");のTCHARのすぐ左の「(」の所に、式は左辺値または関数指定子である必要があります。と出てきました。 解決方法はありますかね?
guest

回答1

0

adbコマンドを実行したいのですが、コードの書き方がわかりません。

Visual C++ から外部コマンドを呼び出す方法はいくつかあります。
単純に外部コマンドを起動したいだけであれば CreateProcess 関数よりも system 関数を用いるのが簡単かと思います。

■ Windows-Tips > 外部プロセスの起動
http://shopping2.gmobb.jp/htdmnr/www08/windows/tips/process.html

・system 関数
・CreateProcess関数
・ShellExecute関数

tmain関数はmain関数とは違うのでしょうか?

Visual C++ の場合、main 関数として main() と wmain() があります。
wmain は main 関数のワイド文字バージョンです。Unicode プログラミングを行う場合に用います。
_tmain() はプリプロセッサに「_UNICODE」を定義している場合に wmain() として、そうでない場合は main() として扱われます。

あとargcは何の役割があるのでしょうか?

main 関数の引数の argc と argv は、EXE を実行する際のコマンドラインの引数の数および引き数の内容が入ります。
・argc … 引き数の数
・argv … 引き数の内容(配列)
コマンドに何か引数を渡したい場合に使われます。

投稿2023/01/31 12:20

編集2023/01/31 13:06
cx20

総合スコア4633

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問