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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: どうしてもエラーの原因がわからないので教えてください。。。

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

#5

by PonPon » 4年前

変数の初期化をせずに使用していたのが問題だったようです。
回答してくださった方、ありがとうございました。

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

#4

by みけCAT » 4年前

FindWindowExFindWindowEx関数の呼び出し(全て)において、
未初期化の自動変数の値を関数に渡しているのも良くなさそうですね。
適切に初期化するか、適切な変数(メンバを含む)に置き換えるのが良いでしょう。

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

#3

by みけCAT » 4年前

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: どうしてもエラーの原因がわからないので教えてください。。。

#2

by もるも » 4年前

ループ処理が無いとそのままプログラムは終了してしまいます。

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

#1

by PonPon » 4年前

最終的には他のソフトのボタンを押したり文字を入力することが目的なのですが、
既にウィンドウハンドルを取得する段階で躓いてます。。。

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;
}

ページトップ