Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2013, 19:11   #1
RaTeN
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 25
По умолчанию программа для вывода нажатых клавиш в отдельном процессе

Код:
#include <windows.h> 
#include <iostream> 
using namespace std; 
HANDLE hInEvent[3]; 
TCHAR lpEventName[]=TEXT("InEventName"); 
int main() 
{ 
	 char c; 
	 hInEvent[0] = OpenEvent(EVENT_MODIFY_STATE, TRUE, lpEventName); 
	 hInEvent[1] = OpenEvent(EVENT_MODIFY_STATE, TRUE, lpEventName); 
	 hInEvent[2] = OpenEvent(EVENT_MODIFY_STATE, TRUE, lpEventName); 
	 if (hInEvent[0] == NULL) 
	 { 
		 cout << "Open event failed." << endl; 
		 cout << "Input any char to exit." << endl; 
		 cin >> c; 
		 return GetLastError(); 
	 } 
	  if (hInEvent[1] == NULL) 
	 { 
		 cout << "Open event failed." << endl; 
		 cout << "Input any char to exit." << endl; 
		 cin >> c; 
		 return GetLastError(); 
	 } 
	   if (hInEvent[2] == NULL) 
	 { 
		 cout << "Open event failed." << endl; 
		 cout << "Input any char to exit." << endl; 
		 cin >> c; 
		 return GetLastError(); 
	 } 

	 
	 while(true) 
	 { 
		cout<<"Enter - or . (or 'e' to finish)"<<endl;
		cin>>c;
		while ((c!='-')&&(c!='.')&&(c!='e'))
		{
			cout<<"Enter - or . (or 'e' to finish)"<<endl;
			cin>>c;
		}
		if (c=='-')
		{
			SetEvent(hInEvent[0]);
		}

		if (c=='.')
		{
			SetEvent(hInEvent[1]);
		}
		if (c=='e')
		{		
			SetEvent(hInEvent[2]);			
			break;

		}
	 } 
	
	 return 0; 
}
вот у нас вызывается событие при нажатии на определенные клавиши


Код:
#include <windows.h> 
#include <iostream> 
using namespace std; 
HANDLE hInEvent[3]; 
TCHAR lpEventName[] = TEXT("InEventName"); 
int main() 
{ 
	 
	 TCHAR szAppName[] = TEXT("C:\\Users\\RaTeN\\Documents\\Visual Studio 2010\\Projects\\prim\\Debug\\prim.exe"); 

	  // создаем событие, отмечающее ввод символа
	 hInEvent[0] = CreateEvent(NULL, TRUE, FALSE, lpEventName); 
	 hInEvent[1] = CreateEvent(NULL, TRUE, FALSE, lpEventName); 
	 hInEvent[2] = CreateEvent(NULL, TRUE, FALSE, lpEventName); 
	
	 int n;

	cout<<"Enter number of processes"<<endl;
	cin>>n;
	STARTUPINFO *si; 
	si=new STARTUPINFO[n]; 
	PROCESS_INFORMATION *pi; 
	pi=new PROCESS_INFORMATION[n];

	for(int i=0;i<n;i++)
	{
	// запускаем процесс, который ждет ввод символа
	 ZeroMemory(&si[i], sizeof(STARTUPINFO)); 
	 si[i].cb = sizeof(STARTUPINFO); 
	 if (!CreateProcess(szAppName, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si[i], &pi[i])) 
			return 0; 	 
	}

	while(true)
	{
		/*hInEvent[0] = OpenEvent(NULL, TRUE, NULL); 
		hInEvent[1]= OpenEvent(NULL, TRUE, NULL); 
		hInEvent[2] = OpenEvent(NULL,  TRUE, NULL);*/
		
		DWORD dwWaitResult = WaitForMultipleObjects(3, hInEvent, FALSE, INFINITE);
		if (dwWaitResult == WAIT_OBJECT_0) 
			cout<<'-'; 
		else if(dwWaitResult == WAIT_OBJECT_0+1)
			cout<<'.'; 
		else 
			cout<<'?'; 		

		ResetEvent(hInEvent[0]);
		ResetEvent(hInEvent[1]);
		ResetEvent(hInEvent[2]);
		
	 }	 
	
	 CloseHandle(hInEvent[0]); 
	 CloseHandle(hInEvent[1]); 
	 CloseHandle(hInEvent[2]); 
	 cout << "Press any key to exit: "; 
	 cin.get(); 
	 return 0; 
}

почему WaitForMultipleObjects не может определить какое именно событие в сигнальное состояние переведено??

Последний раз редактировалось Stilet; 06.10.2013 в 20:19.
RaTeN вне форума Ответить с цитированием
Старый 06.10.2013, 22:51   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

У всех event одно и то же имя это раз, а во вторых перед WaitForMultipleEvent делается OpenEvent вообще без имен.
waleri вне форума Ответить с цитированием
Старый 07.10.2013, 05:38   #3
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

WaitForMultipleObjects вторым параметром должна получать указатель.
vadimych вне форума Ответить с цитированием
Старый 07.10.2013, 09:11   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от vadimych Посмотреть сообщение
WaitForMultipleObjects вторым параметром должна получать указатель.
A hInEvent - это что?
waleri вне форума Ответить с цитированием
Старый 07.10.2013, 13:24   #5
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Тупанул, ассемблерная школа своё берёт.
vadimych вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Обработка нескольких нажатых одновременно клавиш lowercase Общие вопросы .NET 1 27.05.2012 20:44
Перехват нажатых клавиш. -=Virus=- Общие вопросы Delphi 8 29.07.2011 17:11
Key Up при нажатых 2х и более клавиш ldenis Общие вопросы Delphi 3 21.01.2011 13:00
Перехват нажатых клавиш sxem Общие вопросы Delphi 7 02.05.2010 23:31
Перехват нажатых клавиш AidarBik Общие вопросы Delphi 2 21.06.2007 20:11