ページ 11

どうしてもエラーの原因がわからないので教えてください。。。

Posted: 2019年7月09日(火) 00:49
by PonPon
最終的には他のソフトのボタンを押したり文字を入力することが目的なのですが、
既にウィンドウハンドルを取得する段階で躓いてます。。。

VC++2019を使用していて、
"CL.exe"はコード2を伴って終了しました。
と出てしまいます。

コード:

#include <Windows.h>


struct cess
{
	HWND SW_hWnd;
	HWND C_SW_hWnd1;
	HWND C_SW_hWnd2;
	HWND C_SW_hWnd3;
};


int WINAPI WinMain(HINSTANCE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	struct cess c;

	
	c.SW_hWnd = FindWindow(L"WindowsForms10.Window.8.app.0.141b42a_r6_ad1", L"Save Wizard for PS4 MAX - 1.0.6510.36416");
	c.C_SW_hWnd1 = FindWindowEx(c.SW_hWnd, c.C_SW_hWnd1, L"WindowsForms10.Window.8.app.0.141b42a_r6_ad1", 0);
	c.C_SW_hWnd2 = FindWindowEx(c.C_SW_hWnd1, c.C_SW_hWnd2, L"WindowsForms10.Window.8.app.0.141b42a_r6_ad1", 0);
	c.C_SW_hWnd3 = FindWindowEx(c.C_SW_hWnd2, c.C_SW_hWnd3, L"WindowsForms10.BUTTON.app.0.141b42a_r6_ad1", L"Deactivate");

	if (c.C_SW_hWnd3 != NULL)
	{
		MessageBox(NULL, (LPCSTR)L"ハンドル取得成功!!", (LPCSTR)L"Error!!!", MB_OK);
	}
	else
	{
		MessageBox(NULL, (LPCSTR)L"Save Wizard PS4 MAXを起動してください。", (LPCSTR)L"Error!!", MB_OK);
	}

	return 0;
}

Re: どうしてもエラーの原因がわからないので教えてください。。。

Posted: 2019年7月09日(火) 20:16
by もるも
ループ処理が無いとそのままプログラムは終了してしまいます。

Re: どうしてもエラーの原因がわからないので教えてください。。。

Posted: 2019年7月10日(水) 01:44
by みけCAT
API関数はANSI版かUnicode版かを指定していないのに、
文字列はLを使って明示的にUnicode版を指定しているのがよくなさそうですね。
以下の(A)(B)(C)どれか1セットの修正を試してみてください。

(A) 明示的にANSI版を用いる
・関数名(FindWindow, FindWindowEx, MessageBox)の最後に全てAをつける
・文字列の前にあるLを全て削除する

(B) 明示的にUnicode版を用いる
・関数名(FindWindow, FindWindowEx, MessageBox)の最後に全てWをつける
・LPCSTRへのキャストを全て削除する

(C) コンパイルオプションで切り替えられるようにする
・文字列の前にあるLを全て削除する
・LPCSTRへのキャストを全て削除する
・文字列を全てTEXT(~)で囲む

Re: どうしてもエラーの原因がわからないので教えてください。。。

Posted: 2019年7月10日(水) 01:47
by みけCAT
FindWindowExFindWindowEx関数の呼び出し(全て)において、
未初期化の自動変数の値を関数に渡しているのも良くなさそうですね。
適切に初期化するか、適切な変数(メンバを含む)に置き換えるのが良いでしょう。

Re: どうしてもエラーの原因がわからないので教えてください。。。

Posted: 2019年7月10日(水) 02:40
by PonPon
変数の初期化をせずに使用していたのが問題だったようです。
回答してくださった方、ありがとうございました。