
Шустрый

Профиль
Группа: Участник
Сообщений: 109
Регистрация: 6.6.2007
Репутация: нет Всего: 2
|
Всем привет, народ помогите пытаюсь сделать программу для порождения процессов функцией CreateProcess(), но при кампиляции вылезает ошибка: Код | Linking... LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 Debug/process.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe.
|
Я грешу на то, что нужно подключить какую-то бибоиотеку, неподскажиет какую.?)) вот код программы: Заранее спасибО!) Код | #include <Windows.h> #include <String.h> #include <Stdio.h> #include <wtypes.h> #include "index.h" #define Procmax 5
#pragma comment(lib, "comctl32.lib") #pragma comment(lib, "gdi32.lib") #pragma comment(lib, "user32.lib") #pragma comment(lib,"gdiplus.lib") #pragma comment(lib,"kernel32.lib")
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
char szWinName[] = "ÌîåÎêíî"; // Èìÿ êëàññà îêíà
char str[255]; // Áóôåð ñòðîêè âûâîäà
int X=0, Y=0; // Òåêóùèå êîîðäèíàòû ñòðîêè
int procnum=0; // Êîëè÷åñòâî àêòèâíûõ ïðîöåññîâ
int maxX, maxY; // Ðàçìåðû ýêðàíà
HDC memdc; // DC âèðòóàëüíîãî îêíà
HBITMAP hbit; // Ðàñòð - ýòî âèðòóàëüíîå îêíî
HBRUSH hbrush; // Äåñêðèïòîð êèñòè
PROCESS_INFORMATION pinfo[Procmax];
int WINAPI WinMain (HINSTANCE hThisInst,
HINSTANCE hPrevInst,
LPSTR lpszArgs,
int nWinMode)
{
HWND hwnd;
MSG msg;
WNDCLASS wcl;
HACCEL hAccel;
// Îïðåäåëèòü êëàññ îêíà
wcl.hInstance=hThisInst; // Äåñêðèïòîð ïðèëîæåíèÿ
wcl.lpszClassName=szWinName; // Èìÿ êëàññà îêíà
wcl.lpfnWndProc=WindowFunc; // Ôóíêöèÿ îêíà
wcl.style=0; // Ñòèëü ïî óìîë÷àíèþ
wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION); // Èêîíêà
wcl.hCursor=LoadCursor(NULL,IDC_ARROW) ; // Êóðñîð
wcl.lpszMenuName="MYMENU"; // Ìåíþ
wcl.cbClsExtra=0; // Áåç äîïîëíèòåëüíîé
wcl.cbWndExtra=0; // èíôîðìàöèè
// Îïðåäåëèòü çàïîëíåíèå îêíà áåëûì öâåòîì
wcl.hbrBackground=
(HBRUSH)GetStockObject(WHITE_BRUSH);
if(!RegisterClass(&wcl)) // Çàðåãèñòð. êëàññ îêíà
return 0;
// Ñîçäàòü îêíî
hwnd=CreateWindow(szWinName, // Èìÿ êëàññà
"Ïîðîæäåíèå íîâûõ ïðîöåññîâ",
WS_OVERLAPPEDWINDOW,// Ñòèëü îêíà
CW_USEDEFAULT, // Õ-êîîðäèíàòà
CW_USEDEFAULT, // Y-êîîðäèíàòà
CW_USEDEFAULT, // Øèðèíà îêíà
CW_USEDEFAULT, // Âûñîòà îêíà
HWND_DESKTOP, // Íåò ðîäèò. îêíà
NULL, // Íåò ìåíþ
hThisInst, // Äåñêðèï. ïðèëîæåíèÿ
NULL); // Áåç äîïîëèò. àðãóìåíòîâ
// Çàãðóçèòü àêñåëåðàòîðû
hAccel=LoadAccelerators(hThisInst,"MYMENU");
ShowWindow(hwnd,nWinMode) ; // Ïîêàçàòü îêíî è
UpdateWindow(hwnd); // ïåðåðèñîâàòü ñîäåðæèìîå
// Çàïóñòèòü öèêë îáðàáîòêè ñîîáùåíèé
while(GetMessage (&msg,NULL,0,0))
if(!TranslateAccelerator(hwnd,hAccel,&msg))
{
TranslateMessage(&msg); // Èñïîëüç.Êëàâèàòóðû
DispatchMessage (&msg); // Âîçâðàò ê Windows
}
return msg. wParam;
}
// Ñëåäóþùàÿ ôóíêöèÿ âûçûâàåòñÿ îïåðàöèîííîé ñèñòåìîé
// Windows è ïîëó÷àåò â êà÷åñòâå ïàðàìåòðîâ ñîîáùåíèÿ
// èç î÷åðåäè ñîîáùåíèé äàííîãî ïðèëîæåíèÿ
LRESULT CALLBACK WindowFunc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT paintstruct;
TEXTMETRIC tm;
STARTUPINFO startin;
switch(message)
{
case WM_CREATE: // Ïîëó÷àåì ðàçìåðû ýêðàíà
maxX=GetSystemMetrics(SM_CXSCREEN);
maxY=GetSystemMetrics(SM_CYSCREEN);
hdc=GetDC(hwnd); // Ñîâìåñò. ñ îêíîì ðàñòð
memdc=CreateCompatibleDC(hdc);
hbit=CreateCompatibleBitmap(hdc,maxX,maxY);
SelectObject(memdc,hbit);
hbrush=(HBRUSH)GetStockObject(WHITE_BRUSH);
SelectObject(memdc,hbrush);
PatBlt(memdc,0,0,maxX,maxY,PATCOPY);
ReleaseDC(hwnd,hdc);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_PROCESS:
if(procnum == Procmax)
{
MessageBox(hwnd,
"Íåëüçÿ ñîçäàòü áîëüøå",
"Îøèáêà", MB_OK);
break;
} // Íå áîëåå ÷åì Procmax
// Ïîëó÷èòü ìåòðèêè òåêñòà */
GetTextMetrics(memdc, &tm);
sprintf(str, "Ïîðîæäàåòñÿ ïðîöåññ %d",
procnum);
TextOut(memdc, X, Y, str, strlen(str));
Y = Y+tm.tmHeight+tm.tmExternalLeading;
InvalidateRect(hwnd,NULL,1); //Ñîîáùèòü
// Ïîðîæäåíèå íîâîãî ïðîöåññà
startin.cb=sizeof(STARTUPINFO);
startin.lpReserved = NULL;
startin.lpDesktop = NULL;
startin.lpTitle = NULL;
startin.dwFlags =STARTF_USESHOWWINDOW;
startin.cbReserved2 = 0;
startin.lpReserved2 = NULL;
startin.wShowWindow = SW_SHOWMINIMIZED;
CreateProcess(NULL, "Test.exe", NULL,
NULL, FALSE, 0, NULL,
NULL, &startin,
&(pinfo[procnum]));
procnum++;
break;
case ID_KILLPROC:
if(procnum)
procnum--;
else
{
MessageBox(hwnd,
"Áîëüøå ïðîöåññîâ íåò",
"Îøèáêà", MB_OK);
break;
}
// Ïîëó÷èòü ìåòðèêè òåêñòà
GetTextMetrics(memdc, &tm);
TerminateProcess
(pinfo[procnum].hProcess, 0);
sprintf(str, "Ïðîöåññ %d çàâåðøåí",
procnum);
TextOut(memdc, X, Y, str, strlen(str));
Y = Y+tm.tmHeight+tm.tmExternalLeading;
InvalidateRect(hwnd,NULL,1); //Ñîîáùèòü
break;
case ID_HELP:
MessageBox(hwnd,
"F2: Íîâûé ïðîöåññ\n"
"F3: Çàâåðøèòü ïðîöåññ",
"Ïîìîùü:", MB_OK);
InvalidateRect(hwnd,NULL,1); //Ñîîáùèòü
break;
}
break;
case WM_PAINT: // Ïåðåðèñîâêà îêíà
hdc=BeginPaint(hwnd,&paintstruct); // Ïîë. DC
// Òåïåðü êîïèðóåì ðàñòð èç ïàìÿòè íà ýêðàí
BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY);
EndPaint(hwnd,&paintstruct); // Îñâîáîäèòü DC
break;
case WM_DESTROY: // Çàâåðøåíèå ïðîãðàììû
DeleteDC(memdc); // Óäàëèòü âèðòóàëüíîå îêíî
PostQuitMessage(0);
break;
default:
// Âñå ñîîáùåíèÿ, íå îáðàáàòûâàåìûå â äàííîé
// ôóíêöèè, íàïðàâëÿþòñÿ íà îáðàáîòêó ïî
// óìîë÷àíèþ
return DefWindowProc(hwnd,message,
wParam,lParam);
}
return 0;
}
|
index.h Код | #define ID_PROCESS 100 #define ID_KILLPROC 101 #define ID_HELP 103
|
index.rc Код | #include <Windows.h> #include "index.h"
MYMENU MENU
{
POPUP "Ïðîöåññû"
{
MENUITEM "Íîâûé ïðîöåññ", ID_PROCESS
MENUITEM "Çàâåðøèòü ïðîöåññ", ID_KILLPROC
}
MENUITEM "Ïîìîùü", ID_HELP
}
MYMENU ACCELERATORS
{
VK_F2, ID_PROCESS, VIRTKEY
VK_F3, ID_KILLPROC, VIRTKEY
VK_F1, ID_HELP, VIRTKEY
}
|
|