Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



CreateProcess, konzolová aplikace a propojení

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: CreateProcess, konzolová aplikace a propojení

Autor: vrtulex

12:39:38 01.05.2011

Zdravím,

jestli to chápu dobře, tak potřebujete přesměrovat novému procesu standardní vstup a výstup. To se obvykle provádí tak, že vytvoříte dvě roury: vstupní a výstupní. Čtecí konec vstupní roury předáte novému procesu v hStdInput položce struktury STARTUPINFO. Zapisovací si necháte, abyste do něho mohl posílat vstup (přes WriteFile). Pozor, je třeba případně přes SetHandleInformation nastavit, že čtecí konec se má dědit.

Dále je třeba procesu předat v členu hStdOutput struktury STARTUPINFO zapisovací konec výstupní roury. Pak cokoliv, co nový proces napíše na výstup, získáte například přes ReadFile do otcovského procesu.

Tyhle roury se obvykle vytvářejí pomocí funkce CreatePipe.

Citovat příspěvek

 

CreateProcess, konzolová aplikace a propojení

Autor: Pauli.9

14:04:46 30.04.2011

Dobrý den,
prosím Vás o pomoc.

Už delší dobu se snažím vyřešit jednu věc a nikde nemůžu dohledat jak.
Potřeboval bych spustit jinou aplikaci, která je konzolová tak, aby nebyla vidět na liště systému windows, jen v "procesech" v "správce úloh". Potom z tý konzole číst a odesílat jí řetězce a klávesy.
Mohl by mě někdo, prosím, doplnit kod? (Příkazy atd. jsou jen demonstrativní)

[code]
#include

#define intBox 2
HINSTANCE instance;
HWND hwndMain;
HWND hwndBox;

void fce()
{
//spustit proces - třeba cmd.exe, aby nebylo vidět okno a ani v liště systému windows
//CreateProcessW("program.exe", ?? .. )

//vypsat text z příkazového řádku do EditBoxu (místo řetězce "výsledek")
SendDlgItemMessage(hwndMain, intBox, EM_SETSEL, GetWindowTextLength(hwndBox), GetWindowTextLength(hwndBox));//položka caretu na poslední místo
SendDlgItemMessage(hwndMain, intBox, EM_REPLACESEL, FALSE, (LPARAM)TEXT("výsledek"));

//odeslat příkaz "edit"

//vypsat text z příkazového řádku do EditBoxu

//odeslat příkaz "copy"

//vypsat text

//odeslat klávesu "K"

//vypsat text

//ukončit
}

LRESULT CALLBACK procMain(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShow)
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = CreateSolidBrush(0x333333);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = instance;
wc.lpfnWndProc = procMain;
wc.lpszClassName = TEXT("class");
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
if (!RegisterClassEx(&wc)) return FALSE;

hwndMain = CreateWindowEx(NULL, TEXT("class"), TEXT("titulek"), WS_OVERLAPPEDWINDOW | WS_VISIBLE , 20, 20, 400, 400, NULL, NULL, instance, NULL);
if (hwndMain == NULL) return FALSE;

instance = hInstance;

hwndBox = CreateWindowEx(NULL, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL, 0, 0, 350, 350, hwndMain, (HMENU)intBox, instance, NULL);
if (hwndBox == NULL) return FALSE;

MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
[/code]

PS: Pročítal jsem tohle http://www.codeproject.com/Messages/3268714/Re-how-to-use-createprocess-to-create-a-new-consol.aspx ale nějak jsem z toho nic nevytáhl.

Děkuju moc za pomoc.
S pozdravem Paulí.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: