//
// 指定したキーワードを含むウィンドウタイトルのアプリを探し、それを最前面表示する
// 対象アプリが無ければ起動する
//
// g++ -mwindows -static -O2 -o callUtau.exe callUtau.cpp
// strip callUtau.exe
//
// ./callUtau.exe keyword exeFile
//
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <locale.h>

boolean debug = false;
char *keyword = NULL;

BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM lParam){
	char *buf;
	int len;
	char charbuf[1028];
	len = GetWindowTextLength(hWnd);
	buf = (char*)malloc(sizeof(char)*len + 2);
	GetWindowText(hWnd, buf, len);
	wsprintfA(charbuf, sizeof(TCHAR)==2 ? "%S" : "%s", buf);
	//if(strstr((char*)charbuf, "- ＵＴＡＵ")!=NULL){
	//if (StrStrW(buf, TEXT("- ＵＴＡ"))!=NULL){
	//if (wcsstr(buf, TEXT("- ＵＴＡ"))!=NULL){
	//if (strstr(buf, "- ＵＴＡ")!=NULL){
	if (strstr(buf, keyword)!=NULL){
		if (debug) fprintf(stderr, "%s\n", charbuf);
		(*(HWND*)lParam) = hWnd;  //ウィンドウハンドルを渡す
	}
	return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
  HWND hWnd = NULL;

	if (argc != 3){
		fprintf(stderr, "usage: %s keyword exeFile\n", argv[0]);
		exit(1);
	}
  keyword = argv[1];

	EnumWindows(EnumWndProc, (LPARAM)&hWnd);

	if(hWnd != NULL){
		if (debug) fprintf(stderr, "popup utau\n");
		SetForegroundWindow(hWnd);
	} else {
		if (debug) fprintf(stderr, "start exe\n");
		HINSTANCE ret = ShellExecute(NULL, "open", argv[2], NULL, NULL, SW_SHOWNORMAL);
	}
	if (debug) getchar();
	return 0;
}

