ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
Win32 コンソール アプリケーション キット
日時: 2010/08/04 18:03
名前: lightbox



以下は、キットのダウンロードページです。
Win32 コンソール アプリケーション キット


   findwindow.cpp

   指定したタイトル(必要ならばウインドウクラス名)より、ウインドウハンドル
   を取得して標準出力へ出力します
拡張子:
#include <stdio.h>
#include <tchar.h>
#include <windows.h>

static TCHAR title[512];
static TCHAR class_name[512];

int _tmain(int argc, _TCHAR* argv[])
{

	title[0] = 0x00;
	class_name[0] = 0x00;
	HWND hWnd;

	if ( argc == 1 || argc > 3 ) {
		printf("%s\n", "findwindow.exe ウインドウタイトル [クラス名]" );
		exit( 1 );
	}
	if ( argc == 2 ) {
		lstrcpy( title, argv[1] );
		hWnd = FindWindow( NULL, title );
	}
	if ( argc == 3 ) {
		lstrcpy( title, argv[1] );
		lstrcpy( class_name, argv[2] );
		hWnd = FindWindow( class_name, title );
	}

	printf("%u\n", hWnd );

	return 0;
}
   movewindow.cpp    指定したウインドウハンドルを持つウインドウの位置を変更します    位置を省略すると、デスクトップの中央に移動します    最後に最前面にウインドウを持ってきます
拡張子:
#include <stdio.h>
#include <tchar.h>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{

	HWND hWnd;
	int x,y;

	if ( argc == 1 ) {
		printf("%s\n", "movewindow.exe ウインドウハンドル [X Y]" );
		exit( 1 );
	}

	hWnd = (HWND)(_wtol( argv[1] ));

	RECT drt;
	RECT rt;

	if ( argc == 2 ) {
		GetWindowRect( GetDesktopWindow(), &drt );
		GetWindowRect( hWnd, &rt );
		x = ( (drt.right - drt.left) - (rt.right - rt.left) ) / 2;
		y = ( (drt.bottom - drt.top) - (rt.bottom - rt.top) ) / 2;
		MoveWindow( hWnd, x, y, rt.right - rt.left , rt.bottom- rt.top, true );
	}
	else {
		x = _wtol( argv[2] );
		y = _wtol( argv[3] );
		GetWindowRect( hWnd, &rt );
		MoveWindow( hWnd, x, y, rt.right - rt.left , rt.bottom- rt.top, true );
	}

	SetForegroundWindow( hWnd );

	return 0;
}
   postmessage.cpp    メッセージをポストします。    引数は、ウインドウハンドル メッセージID wParam lParam です
拡張子:
#include <stdio.h>
#include <tchar.h>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{

	HWND hWnd;
	DWORD message;
	WPARAM wParam;
	LPARAM lParam;

	hWnd = (HWND)(_wtol( argv[1] ));
	message = (DWORD)(_wtol( argv[2] ));
	wParam = (WPARAM)(_wtol( argv[3] ));
	lParam = (LPARAM)(_wtol( argv[4] ));

	PostMessage( hWnd, message, wParam, lParam );

	return 0;
}
   foreground.cpp    ウインドウを最前面に移動します
拡張子:
#include <stdio.h>
#include <tchar.h>
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{

	HWND hWnd;

	hWnd = (HWND)(_wtol( argv[1] ));

	SetForegroundWindow( hWnd );

	return 0;
}
メンテナンス

run_and_win_handle.cpp ( No.1 )
日時: 2010/08/04 17:43
名前: lightbox


日時: 2010/08/04 17:43
名前: lightbox
拡張子:
#include <stdio.h>
#include <tchar.h>
#include <windows.h>

BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam );

static DWORD pid;
static HWND hTarget;

int _tmain(int argc, _TCHAR* argv[])
{

	// プログラムを実行して、PID を取得し
	// PID から Window ハンドルを取得
	int ret;
	PROCESS_INFORMATION pi;
	STARTUPINFO si;

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

	// 実行
	ret = CreateProcess(
		NULL,
		argv[1], 
		NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

	// ユーザーからの入力を待っている状態になるまで待つ
	// ( タイムアウト 60 秒 
	WaitForInputIdle(pi.hProcess,60000);
	CloseHandle(pi.hThread);
	CloseHandle(pi.hProcess);

	pid = pi.dwProcessId;

	// Window ハンドルを Callback で取得
	EnumWindows( EnumWindowsProc, 0 );

	printf("%u\n", hTarget );

	return 0;
}

// *********************************************************
// トップレベル用 ウインドウの列挙
// *********************************************************
BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam )
{
	DWORD ProcessId;

	GetWindowThreadProcessId( hWnd, &ProcessId );
	// 実行したプロセス内で表示されるウインドウを選ぶ
	if ( pid == ProcessId && IsWindowVisible( hWnd ) ) {
		hTarget = hWnd;
		return false;
	}

	return true;

}
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
sample.bat ( No.2 )
日時: 2010/08/04 18:05
名前: lightbox
拡張子:
@echo off

REM メモ帳強制終了用のスクリプトを作成
echo Wscript.Sleep 500 > %TEMP%\test.vbs 
echo Set WshShell = WScript.CreateObject("WScript.Shell") >> %TEMP%\test.vbs 
echo WshShell.SendKeys "%%(N)" >> %TEMP%\test.vbs 


REM メモ帳を実行して、クリップボードの内容を貼り付けます。
FOR /F %%i IN ('run_and_win_handle.exe notepad.exe') DO (
	postmessage.exe %%i 273 770 0

)
FOR /F %%i IN ('run_and_win_handle.exe notepad.exe') DO (
	postmessage.exe %%i 273 770 0

)
FOR /F %%i IN ('run_and_win_handle.exe notepad.exe') DO (
	postmessage.exe %%i 273 770 0

)


REM 終了確認に応答して全てのメモ帳を終了させる
:do_next
FOR /F %%i IN ('findwindow.exe "無題 - メモ帳"') DO (
	if "%%i"=="0" (
		goto end
	)
	postmessage.exe %%i 16 0 0
	foreground.exe %%i
	cscript.exe %TEMP%\test.vbs
	goto do_next
)

:end
このアーティクルの参照用URLをクリップボードにコピー メンテナンス