DarkWinAPI by Darkleo.com
Com-Port und Treads unter Windows
menu.rc |
#include <windows.h> #include "menu.h" MeinMenu MENU { POPUP "&Port" { MENUITEM "&1 COM2 Port Öffnen", IDM_PO MENUITEM "&2 COM2 Port Schliessen", IDM_PZ MENUITEM "&3 Beenden", IDM_ENDE } POPUP "&Options" { MENUITEM "&1 Baudrate 4", IDM_OA MENUITEM "&2 Baudrate *2", IDM_OB MENUITEM "&3 Baudrate Zufall 2..50", IDM_OC } POPUP "&Send" { MENUITEM "&1 TAKT AN", IDM_XA MENUITEM "&2 TAKT AUS", IDM_XB } POPUP "&About" { MENUITEM "&1 PaulMizel", IDM_INFO MENUITEM "&2 IS ALL OK?", IDM_IOK } } |
menu.h |
//PORT #define IDM_PO 1 #define IDM_PZ 2 #define IDM_ENDE 3 //OPTIONS #define IDM_OA 21 #define IDM_OB 22 #define IDM_OC 23 //SEND #define IDM_XA 11 #define IDM_XB 12 //INFO #define IDM_INFO 31 #define IDM_IOK 32 |
MenuProgramm.cpp |
#define STRICT #define WIN32_LEAN_AND_MEAN #include <windows.h> #include "menu.h" #include <vcl.h> #include <time.h> #include <stdlib.h> USERC("menu.rc"); LRESULT WINAPI MainWndProc(HWND,UINT,WPARAM, LPARAM ); void WINAPI DCBInit(); void WINAPI IOKF(); DWORD WINAPI ThreadWinMain(LPVOID); /********************** Globale Variablen ********************/ HANDLE hI; static TCHAR tcMText[60] = TEXT("RS232 Ampelsteuerungs Programm"); static HANDLE hCom; static DCB dcb; BOOL erfolg; BOOL threadtod; int randz; HANDLE Thread; DWORD CThreadID; int iBAUD=4; DWORD BAUD=(DWORD)iBAUD; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow ) { WNDCLASS wc; MSG msg; HWND hWnd; randomize(); hI = hInstance; wc.lpszClassName = "MeinProgramm"; wc.lpfnWndProc = MainWndProc; wc.style = CS_OWNDC|CS_VREDRAW|CS_HREDRAW; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName = "MeinMenu"; wc.cbClsExtra = 0; wc.cbWndExtra = 0; RegisterClass( &wc ); hWnd = CreateWindow( "MeinProgramm", "Paul", WS_OVERLAPPEDWINDOW, 100,100,400,400, NULL, NULL, hInstance, NULL ); ShowWindow(hWnd, nCmdShow ); UpdateWindow(hWnd); while(GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } return msg.wParam; } LRESULT WINAPI MainWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { PAINTSTRUCT ps; HDC hDC; switch( msg ) { /**************************************************************\ * WM_PAINT: * \**************************************************************/ case WM_PAINT: hDC = BeginPaint( hWnd, &ps ); TextOut( hDC, 10, 300, tcMText, strlen(tcMText)); EndPaint(hWnd, &ps ); break; /**************************************************************\ * WM_DESTROY PostQuitMessage() is called * \**************************************************************/ case WM_DESTROY: PostQuitMessage( 0 ); break; /**************************************************************\ * WM_COMMAND * \**************************************************************/ case WM_COMMAND: switch(wParam) { /**********************************************************\ * PORT * \*************************************************************/ case IDM_PO: //Zeiger auf Com2 erzeugen hCom=CreateFile("COM2", GENERIC_WRITE, FILE_SHARE_READ, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); if(hCom == (HANDLE)0xFFFFFFFF) //ob fehler aufgetreten sind? MessageBox(hWnd,"Schnittstelle Öffnen!!!","Fehler", MB_OK|MB_ICONWARNING); break; case IDM_PZ: //Port Schliessen CloseHandle(hCom); break; case IDM_ENDE: //Programm Beenden SendMessage(hWnd,WM_CLOSE,NULL,NULL); break; /**************************************************************\ * OPTIONS * \**************************************************************/ case IDM_OA: GetCommState(hCom, &dcb); DCBInit(); iBAUD=4; DCBInit(); break; case IDM_OB: GetCommState(hCom, &dcb); DCBInit(); iBAUD=iBAUD*2; DCBInit(); break; case IDM_OC: GetCommState(hCom, &dcb); DCBInit(); iBAUD=((rand() % 50)+2); DCBInit(); break; /**************************************************************\ * SEND * \**************************************************************/ case IDM_XA: //Thread Starten DWORD MTID; Thread=CreateThread(NULL,0,ThreadWinMain,(LPVOID)10,0,&MTID); threadtod =1; break; case IDM_XB: //Thread Beenden CloseHandle(Thread); threadtod =0; break; /**************************************************************\ * PROGRAMM INFO \**************************************************************/ case IDM_INFO://About MessageBox(hWnd, "Info\n\n\ RS232 Ampelsteuerungs Programm\n\n\ Name Paul Mizel\n\ Klasse ITA-OC","Info zu PaulMizel", MB_OK|MB_ICONSTOP); break; case IDM_IOK://Zeigt ob etwas falsch ist IOKF(); break; } break;/*End wm_command */ /**************************************************************\ * MSG WEITER schicken \**************************************************************/ default: return( DefWindowProc( hWnd, msg, wParam, lParam )); } return 0; } DWORD WINAPI ThreadWinMain(LPVOID) { for(;;) { TransmitCommChar(hCom,(char)0x55);// stbit1 0x55=01010101 -> if(threadtod==0) return 0; } } /**************************************************************\ * DCBinit() \**************************************************************/ void WINAPI DCBInit() { BAUD=(DWORD)iBAUD; dcb.BaudRate = BAUD; dcb.ByteSize=8; dcb.Parity=0; dcb.StopBits=0; erfolg=SetCommState(hCom, &dcb); } void WINAPI IOKF() { if(hCom == (HANDLE)0xFFFFFFFF) MessageBox(NULL,"COM2 Verbindungs Fehler!","Fehler", MB_OK|MB_ICONWARNING); else if(erfolg==0) MessageBox(NULL,"DCB Fehler\n\n\ Vorgehensweise\n\ 1.Port 1. Com2 Port Öffnen\n\ 2.Options 1..3 Baudrate\n\ 3.Send 1 SENDEN AN\n\n\ Das sind die 3.Schritte.","Fehler",MB_OK|MB_ICONWARNING); else MessageBox(NULL,"Alles OK!","Es Leuft", MB_OK|MB_ICONWARNING); } |
Projekt Downloaden hier