メモ帳を外部からコントロールする

  ダイアログの初期処理



リストビューは、ダイアログに貼り付けてあります

  
case WM_INITDIALOG:

	CenterWindow( hDlg );

	hList = GetDlgItem(hDlg,IDC_LISTVIEW);
	ListView_AddTitle( hList, LVCFMT_LEFT, 120, "ウインドウハンドル" );
	ListView_AddTitle( hList, LVCFMT_LEFT, 200, "タイトル" );
	ListView_AddTitle( hList, LVCFMT_LEFT, 200, "クラス" );
	ListView_AddTitle( hList, LVCFMT_LEFT, 100, "プロセスID" );
	EnumWindows( EnumWindowsProc, (LPARAM)(hList) );

	return TRUE;
  



  再表示ボタン



ListView_DeleteAllItems はマクロです

  
if ( LOWORD(wParam) == IDC_REDISPLAY ) {
	ListView_DeleteAllItems( hList );
	EnumWindows( EnumWindowsProc, (LPARAM)(hList) );
}
  



  メモ帳起動

メモ帳を起動して、そのプロセスIDを取得しています。その後、ウィンドウ一覧を再表示して
今起動したメモ帳を一覧に反映させます。

一覧の中に取得したプロセスID と一致する行があるはずなので全てチェックし、一致した行
のウィンドウハンドルを取得します

  
if ( LOWORD(wParam) == IDC_NOTEPAD ) {
	ProcessId = LoadAndGetProcessId("notepad.exe");
	wsprintf( buffer, "%ld", ProcessId ); 
	SetWindowText(GetDlgItem( hDlg, IDC_PROCESSID),buffer);

	ListView_DeleteAllItems( hList );
	EnumWindows( EnumWindowsProc, (LPARAM)(hList) );

	nRow = ListView_GetItemCount( hList );
	for( i = 0; i < nRow; i++ ) {
		ListView_GetItemText(
			hList,
			i,
			3,
			buffer,
			512
		);
		if ( (int)ProcessId == atoi( buffer ) ) {
			ListView_GetItemText(
				hList,
				i,
				0,
				buffer,
				512
			);
			SetWindowText(GetDlgItem( hDlg, IDC_HWND),buffer);
		}
	}
}
  



  メモ帳のフォント変更ダイアログを表示させる

33 というID は、「SPY++」で調べています。メモ帳のメニューにある処理は全てこの方法でアクセス可能なはずです
起動側でクリップボードにデータを転送しておいて、メモ帳の「貼り付け」を実行させれば、データをメモ帳で表示する
事もできます

この方法は、メモ帳以外のアプリケーションにも利用可能です

また、PostMessage を使用してメモリのハンドルを受け渡し、アプリケーション間で簡単な通信を行なう事も可能です

  
if ( LOWORD(wParam) == IDC_FONT ) {
	GetWindowText(GetDlgItem( hDlg, IDC_HWND),buffer, 512);
	PostMessage(
		(HWND)(atoi(buffer))
		,WM_COMMAND
		,MAKEWPARAM(LOWORD(33),HIWORD(0))
		,0
	);
}
  



  ダイアログ終了時にメモ帳を終了させる

  
if( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL ) {
	EndDialog(hDlg, LOWORD(wParam));

	GetWindowText(GetDlgItem( hDlg, IDC_PROCESSID),buffer, 512);
	hProcess = OpenProcess( PROCESS_ALL_ACCESS, false, (DWORD)(atoi(buffer)) );
	TerminateProcess( hProcess, (UINT)0 );
	CloseHandle( hProcess );

	return TRUE;
}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ